创建对象
通常使用字面量创建
let obj1 = {username: 'smyhvae', age: 26};
遍历对象 for in
var obj = { name: "smyhvae", age: 26, gender: "男", address: "shenzhen" }; //枚举对象中的属性 for (var n in obj) { console.log("属性名:" + n); console.log("属性值:" + obj[n]); // 注意,因为这里的属性名 n 是变量,所以,如果想获取属性值,不能写成 obj.n,而是要写成 obj[n] }
使用lodash
_.forInRight为反向遍历
function Foo() { this.a = 1; this.b = 2; } Foo.prototype.c = 3; _.forIn(new Foo, function(value, key) { console.log(key); }); // => Logs 'a', 'b', then 'c' (无法保证遍历的顺序)。
操作属性
当属性名不能使用.运算符时(如123,变量等),只能使用 [] 操作属性
判断是否存在指定属性
属性名 in 对象名
用 in 检查对象中是否含有某个属性时,如果对象中没有但是原型中有,也会返回true。
使用对象的hasOwnProperty()来检查对象自身中是否含有该属性。
使用lodash
- _.has判断是否是对象的直接属性
- _.hasIn 判断是否是对象的直接或继承属性。
var object = { 'a': { 'b': 2 } }; var other = _.create({ 'a': _.create({ 'b': 2 }) }); _.has(object, 'a'); // => true _.has(object, 'a.b'); // => true _.has(object, ['a', 'b']); // => true _.has(other, 'a'); // => false
获取属性
如果获取对象中没有的属性,不会报错而是返回undefined。
let name = 对象名.属性名 // 或 let name = 对象名[属性名]
添加属性
对象名.属性名 = 属性值 // 或 对象名[属性名] = 属性值
修改属性
对象名.属性名 = 新的属性值 // 或 对象名[属性名] = 新的属性值
删除属性
delete 对象名.属性名 //或 delete 对象名[属性名]
获取属性名构成的数组 keys()【需Lodash】
function Foo() { this.a = 1; this.b = 2; } Foo.prototype.c = 3; _.keys(new Foo); // => ['a', 'b'] (iteration order is not guaranteed) _.keys('hi'); // => ['0', '1']
获取属性值构成的数组 values()【需Lodash】
function Foo() { this.a = 1; this.b = 2; } Foo.prototype.c = 3; _.values(new Foo); // => [1, 2] (无法保证遍历的顺序) _.values('hi'); // => ['h', 'i']
批量修改属性名【需Lodash】
_.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) { return key + value; }); // => { 'a1': 1, 'b2': 2 }
批量修改属性值【需Lodash】
var users = { 'fred': { 'user': 'fred', 'age': 40 }, 'pebbles': { 'user': 'pebbles', 'age': 1 } }; _.mapValues(users, function(o) { return o.age; }); // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) // The `_.property` iteratee shorthand. _.mapValues(users, 'age'); // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)
获取满足条件的属性名【需Lodash】
_.findLastKey 为反向遍历查找
var users = { 'barney': { 'age': 36, 'active': true }, 'fred': { 'age': 40, 'active': false }, 'pebbles': { 'age': 1, 'active': true } }; _.findKey(users, function(o) { return o.age < 40; }); // => 'barney' (iteration order is not guaranteed) // The `_.matches` iteratee shorthand. _.findKey(users, { 'age': 1, 'active': true }); // => 'pebbles' // The `_.matchesProperty` iteratee shorthand. _.findKey(users, ['active', false]); // => 'fred' // The `_.property` iteratee shorthand. _.findKey(users, 'active'); // => 'barney'
获取对象属性的个数【需Lodash】
_.size({ 'a': 1, 'b': 2 }); // => 2
对象深拷贝
内含 JSON.parse(JSON.stringify(obj)) 的缺陷
https://blog.csdn.net/weixin_41192489/article/details/119633624
对象合并 assign
Object.assign(目标对象, 源对象1, 源对象2...)
作用: 将多个对象合并为一个新的对象(将源对象的属性追加到目标对象上,如果对象里属性名相同,会被覆盖。)
let obj1 = { name: 'smyhvae', age: 26 }; let obj2 = { city: 'shenzhen' }; let obj3 = {}; Object.assign(obj3, obj1, obj2); // 将obj1和obj2的属性复制给obj3
对象过滤【需Lodash】
选中属性 https://www.lodashjs.com/docs/lodash.pick
var object = { 'a': 1, 'b': '2', 'c': 3 }; _.pick(object, ['a', 'c']); // => { 'a': 1, 'c': 3 }
排除属性 https://www.lodashjs.com/docs/lodash.omit
var object = { 'a': 1, 'b': '2', 'c': 3 }; _.omit(object, ['a', 'c']); // => { 'b': '2' }
对象倒置
invert
【需Lodash】
属性值变属性名,属性名变属性值
var object = { 'a': 1, 'b': 2, 'c': 1 }; _.invert(object); // => { '1': 'c', '2': 'b' }