keys()可以非常方便地返回一个object自身所有的key,但不包含从原型链继承下来的:

    allKeys()除了object自身的key,还包含从原型链继承下来的:

    1. 'use strict';
    2. function Student(name, age) {
    3. this.name = name;
    4. this.age = age;
    5. }
    6. Student.prototype.school = 'No.1 Middle School';
    7. var xiaoming = new Student('小明', 20);
    8. _.allKeys(xiaoming); // ['name', 'age', 'school']

    values

    keys()类似,values()返回object自身但不包含原型链继承的所有值:

    1. var obj = {
    2. name: '小明',
    3. age: 20
    4. };

    注意,没有allValues(),原因我也不知道。

    mapObject()就是针对object的map版本:

    invert

    1. 'use strict';
    2. var obj = {
    3. Adam: 90,
    4. Lisa: 85,
    5. Bart: 59
    6. };
    7. _.invert(obj); // { '59': 'Bart', '85': 'Lisa', '90': 'Adam' }

    extend()把多个object的key-value合并到第一个object并返回:

    1. 'use strict';
    2. _.extend(a, {age: 15}, {age: 88, city: 'Beijing'}); // {name: 'Bob', age: 88, city: 'Beijing'}
    3. // 变量a的内容也改变了:
    4. a; // {name: 'Bob', age: 88, city: 'Beijing'}

    注意:如果有相同的key,后面的object的value将覆盖前面的object的value。

    extendOwn()extend()类似,但获取属性时忽略从原型链继承下来的属性。

    clone

    如果我们要复制一个object对象,就可以用方法,它会把原有对象的所有属性都复制到新的对象中:

    也就是说,修改source.skills会影响copied.skills

    isEqual()对两个object进行深度比较,如果内容完全相同,则返回true

    1. 'use strict';
    2. var o1 = { name: 'Bob', skills: { Java: 90, JavaScript: 99 }};
    3. var o2 = { name: 'Bob', skills: { JavaScript: 99, Java: 90 }};
    4. o1 === o2; // false
    5. _.isEqual(o1, o2); // true

    isEqual()其实对Array也可以比较:

    1. 'use strict';
    2. var o1 = ['Bob', { skills: ['Java', 'JavaScript'] }];
    3. var o2 = ['Bob', { skills: ['Java', 'JavaScript'] }];
    4. o1 === o2; // false

    更多完整的函数请参考underscore的文档:http://underscorejs.org/#objects

    读后有收获可以支付宝请作者喝咖啡,读后有疑问请加微信群讨论:

    Objects - 图2