Skip to main content

Lodash 转换检测类

一、强制转换数组 _.castArray

_.castArray(value)

参数

  • value (*): 要处理的值。

返回

  • (Array): 返回转换后的数组。

如果 value 不是数组, 那么强制转为数组。

_.castArray(1);
// => [1]

_.castArray({ 'a': 1 });
// => [{ 'a': 1 }]

_.castArray('abc');
// => ['abc']

_.castArray(null);
// => [null]

_.castArray(undefined);
// => [undefined]

_.castArray();
// => []

var array = [1, 2, 3];
console.log(_.castArray(array) === array);
// => true

二、数值浅拷贝 _.clone

_.clone(value)

参数

  • value (*): 要拷贝的值

返回

  • (*): 返回拷贝后的值。

创建一个 value 的浅拷贝。

var objects = [{ 'a': 1 }, { 'b': 2 }];

var shallow = _.clone(objects);
console.log(shallow[0] === objects[0]);
// => true

三、数值深拷贝 _.cloneDeep

_.cloneDeep(value)

参数

  • value (*): 要深拷贝的值。

返回

  • (*): 返回拷贝后的值。

这个方法类似 _.clone,但它会递归拷贝 value(也叫深拷贝)

var objects = [{ 'a': 1 }, { 'b': 2 }];

var deep = _.cloneDeep(objects);
console.log(deep[0] === objects[0]);
// => false

四、深比较值相等 _.isEqual

_.isEqual(value, other)

参数

  • value (*): 用来比较的值。
  • other (*): 另一个用来比较的值。

返回 (boolean): 如果 两个值完全相同,那么返回 true,否则返回 false。

执行深比较来确定两者的值是否相等。

var object = { 'a': 1 };
var other = { 'a': 1 };

_.isEqual(object, other);
// => true

object === other;
// => false

五、断言检测值 _.conformsTo

_.conformsTo(object, source)

参数

  • object (Object): 要检查的对象。
  • source (Object): 要断言属性是否符合的对象。

返回 (boolean): 如果 object 符合,返回 true,否则 false。

通过调用断言 source 的属性与 object 的相应属性值,检查 object 是否符合 source

var object = { 'a': 1, 'b': 2 };

_.conformsTo(object, { 'b': function(n) { return n > 1; } });
// => true

_.conformsTo(object, { 'b': function(n) { return n > 2; } });
// => false

六、数值检测(is[type]

1、是否为 Array

_.isArray([1, 2, 3]);
// => true

_.isArray(document.body.children);
// => false

_.isArray('abc');
// => false

_.isArray(_.noop);
// => false

2、是否为 ArrayBuffer

_.isArrayBuffer(new ArrayBuffer(2));
// => true

_.isArrayBuffer(new Array(2));
// => false

3、是否为原始 boolean

_.isBoolean(false);
// => true

_.isBoolean(null);
// => false

4、是否为 buffer

_.isBuffer(new Buffer(2));
// => true

_.isBuffer(new Uint8Array(2));
// => false

5、是否为 Date

_.isDate(new Date); 
// => true

_.isDate('Mon April 23 2012');
// => false

6、是否为 DOM 元素

_.isElement(document.body);
// => true

_.isElement('<body>');
// => false

7、是否为 Function 对象

_.isFunction(_);
// => true

_.isFunction(/abc/);
// => false

8、是否为整数

_.isInteger(3);
// => true

_.isInteger(Number.MIN_VALUE);
// => false

_.isInteger(Infinity);
// => false

_.isInteger('3');
// => false

9、是否为 NaN

这个方法基于 Number.isNaN,和全局的 isNaN 不同之处在于,全局的 isNaN 对于 undefined 和其他非数字的值返回 true

_.isNaN(NaN);
// => true

_.isNaN(new Number(NaN));
// => true

isNaN(undefined);
// => true

_.isNaN(undefined);
// => false

10、是否为 null 或 undefined

_.isNil(null);
// => true

_.isNil(void 0);
// => true

_.isNil(NaN);
// => false

11、是否为 null

_.isNull(null);
// => true

_.isNull(void 0);
// => false

12、是否为 Number

_.isNumber(3);
// => true

_.isNumber(Number.MIN_VALUE);
// => true

_.isNumber(Infinity);
// => true

_.isNumber('3');
// => false

13、是否为 RegExp 对象

_.isRegExp(/abc/);
// => true

_.isRegExp('/abc/');
// => false