【ECMAScript 6入门】Object 扩展

Object 扩展

属性简洁表示法

在 ES6 之前 Object 的属性必须是 key-value 形式。

let name = 'zhangsan'
let age = 13
let obj = {
  name: name,
  age: age,
  study: function() {
    console.log(this.name + '在自学前端')
  }
}

在 ES6 之后是可以用简写的形式来表达。

let name = 'zhangsan'
let age = 13
let obj = {
  name,
  age,
  study() {
    console.log(this.name + '在自学前端')
  }
}

属性名表达式

在 ES6 可以直接用变量或者表达式来定义 Object 的 key。

let s = 'school'
let obj = {
  name: 'zhangsan',
  [s]: 'mit'
}

Object.is()

判断两个对象是否相等,与严格比较运算符(===)的行为基本一致。

// new Object()
let obj1 = {
  name: 'zhangsan',
  age: 13
}

// new Object()
let obj2 = {
  name: 'zhangsan',
  age: 13
}
console.log(obj1 == obj2)          // false
console.log(Object.is(obj1, obj2)) // false

let obj3 = obj1
console.log(obj1 === obj3)         // true
console.log(Object.is(obj1, obj3)) // true

Object.assign()

用于将所有可枚举属性的值从一个或多个源对象复制到目标对象,它将返回目标对象。

语法

Object.assign(target, …sources)

解释

参数含义必选
target目标对象Y
sources源对象N

从语法上可以看出源对象的个数是不限制的(零个或多个),如果是零个直接返回目标对象,如果是多个,相同属性会被位于后边的源对象属相覆盖。

let target = { a: 1 }

let source1 = { a: 2, b: 2 }
let source2 = { a: 3, c: 3 }

Object.assign(target, source1, source2)
console.log(target) // {a:3, b:2, c:3}

Object.assign() 对于引用数据类型属于浅拷贝,也就是说对于同名属性,后面的源对象会整个的覆盖位于前面的源对象。

如下,复制后 age 属性消失了,因为源对象中的 desc 里没有 age

let target = {
  desc: {
    name: 'zhangsan',
    age: '13'
  }
}
let source = {
  desc: {
    name: 'lisi'
  }
}

Object.assign(target, source)
console.log(target) // { desc: { name: 'lisi' } }

对象的遍历方式

for…in

for…in 可以遍历出对象的 key,然后通过 key 获取值。

let obj = {
  name: 'zhangsan',
  age: 13,
  school: 'mit'
}

for (let key in obj) {
  console.log(key, obj[key])
}

Object.keys()

用于返回对象所有 key 组成的数组。

let obj = {
  name: 'zhangsan',
  age: 13,
  school: 'mit'
}

Object.keys(obj).forEach(key => {
  console.log(key, obj[key])
})

Object.getOwnPropertyNames()

用于返回对象所有 key 组成的数组。

let obj = {
  name: 'zhangsan',
  age: 13,
  school: 'mit'
}

Object.getOwnPropertyNames(obj).forEach(key => {
  console.log(key, obj[key])
})

Reflect.ownKeys()

用于返回对象所有 key 组成的数组。

let obj = {
  name: 'zhangsan',
  age: 13,
  school: 'mit'
}

Reflect.ownKeys(obj).forEach(key => {
  console.log(key, obj[key])
})

参考资料

(完)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值