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