文章目录
常用:
.clone,.cloneDeep,
.eq,.isEqual,
.isArray,.isArrayLike, .isArrayLikeObject,.isObject, .isObjectLike,.isBoolean, .isString,.isDate, .isNumber,.isInteger,
_.isElement,
如果 value 不是数组, 那么强制转为数组。
参数
value (*): 要处理的值。
返回
(Array): 返回转换后的数组。
_.castArray(1);
// => [1]
_.castArray({ 'a': 1 });
// => [{ 'a': 1 }]
_.castArray('abc');
// => ['abc']
_.castArray(true);
// => [true]
_.castArray(null);
// => [null]
_.castArray(undefined);
// => [undefined]
_.castArray();
// => []
var array = [1, 2, 3]; // [1, 2, [3],{a:1,}]
console.log(_.castArray(array) === array);
// => true
// 如果是数组,那么原样返回,存储的地址都是一样的。
创建一个 value 的浅拷贝。
参数
value (*)
: 要拷贝的值
返回
(*)
: 返回拷贝后的值。
// js赋值
var objects = [{ 'a': 1 }, { 'b': 2 }];
var shallow= objects;
console.log(shallow===objects); // true,外层引用地址是一样的。
console.log(shallow[0] === objects[0]); // true,里面引用类型地址也是一样的。
objects[0].a=3; // 都会改变
// _.clone() 浅拷贝
var objects = [{ 'a': 1 }, { 'b': 2 }];
var shallow = _.clone(objects);
console.log(shallow===objects); // false,外层引用地址不一样。
console.log(shallow[0] === objects[0]); // true,里面引用类型地址是一样的。
objects[0].a=3; // 都会改变
// _.cloneDeep() 深拷贝
var objects = [{ 'a': 1 }, { 'b': 2 }];
var deep = _.cloneDeep(objects);
console.log(deep === objects); // false,外层断开了联系
console.log(deep[0] === objects[0]); // false,里面引用类型也断开了联系
deep [0].a=3; // 互不影响
这个方法类似 _.clone,除了它会递归拷贝 value。(也叫深拷贝)。
参数
value (*)
: 要深拷贝的值。
返回
(*)
: 返回拷贝后的值。
var objects = [{ 'a': 1 }, { 'b': 2 }];
var deep = _.cloneDeep(objects);
console.log(deep[0] === objects[0]);
// => false
检查 value 是否是 Array 类对象。
参数
value (*)
: 要检查的值。
返回
(boolean)
: 如果value是一个数组
返回 true,否则返回 false。
_.isArray([1, 2, 3]);
// => true
_.isArray(document.body.children);
// => false
_.isArray('abc');
// => false
_.isArray(_.noop);
// => false
参数
value (*)
: 要检查的值。
返回
(boolean)
: 如果value是一个类数组
,那么返回 true,否则返回 false。
_.isArrayLike([1, 2, 3]);
// => true
_.isArrayLike(document.body.children);
// => true
_.isArrayLike('abc');
// => true
_.isArrayLike(_.noop);
// => false
这个方法类似 _.isArrayLike。除了它还检查value是否是个对象。
参数
value (*)
: 要检查的值。
返回
(boolean)
: 如果 value 是一个类数组对象
,那么返回 true,否则返回 false。
_.isArrayLikeObject([1, 2, 3]);
// => true
_.isArrayLikeObject(document.body.children);
// => true
_.isArrayLikeObject('abc');
// => false
_.isArrayLikeObject(_.noop);
// => false
检查 value 是否是原始 boolean 类型或者对象。
_.isBoolean(false);
// => true
_.isBoolean(null);
// => false
检查 value 是否是 Date 对象。
参数
value (*)
: 要检查的值。
返回
(boolean)
: 如果 value 是一个日期对象
,那么返回 true,否则返回 false。
注:日期字符串不可以的;时间戳不可以的。
_.isDate(new Date);
// => true
typeof new Date() // object
_.isDate('Mon April 23 2012');
// => false
检查 value 是否是可能是 DOM 元素。
_.isElement(document.body);
// => true
_.isElement('<body>');
// => false
检查 value 是否为一个空对象,集合,映射或者set。 判断的依据是除非是有枚举属性的对象,length 大于 0
的 arguments object
, array
, string
或类jquery选择器
。
_.isEmpty(null);
// => true
_.isEmpty(true);
// => true
_.isEmpty(1);
// => true
_.isEmpty([1, 2, 3]);
// => false
_.isEmpty({ 'a': 1 });
// => false
_.isEmpty('abc')
// false
空对象呢?是不是arrayLike都是fasle?
执行深比较来确定两者的值是否相等。
var object = { 'a': 1 };
var other = { 'a': 1 };
_.eq(object, other) // false
_.isEqual(object, other);
// => true
object === other;
// => false
检查 value 是否为一个整数。
注意: 这个方法基于 Number.isInteger.
_.isInteger(3);
// => true
_.isInteger(Number.MIN_VALUE);
// => false
_.isInteger(Infinity);
// => false
_.isInteger('3');
// => false
检查 value 是否是原始字符串String或者对象。
_.isString('abc');
// => true
_.isString(1);
// => false
等等