1-8 对象的扩展

20 阅读1分钟

属性简洁表示法

let obj = {
  name: 'xioabai',
  age: 4
}
console.log(obj)

let name = 'xioabai'
let age = 4
let obj = {
  name,
  age
}
console.log(obj)

属性名表达式

let name = 'xioabai'
let age = 4
let s = 'school'
let obj = {
  name,
  age,
  [s]: 'maoxueyuan',
  // study: function(){
    // console.log(this.name + '正在学习')
  // },
  // study: () => {
    // console.log(this.name + '正在学习') // 对象里面的方法不能使用箭头函数
  // },
  study(){
    console.log(this.name + '正在学习') // 可以使用ES6 方法的简写方式
  },
}
console.log(obj)
obj.study()

object.is()

console.log(2, '2') // false
console.log(NaN, NaN) // true
object.is跟 === 很类似,是一个严格模式, 区别就是在NaN的情况下,=== 返回的是false

let obj1 = {
  name: 'xiaobai',
  age: 4
}
let obj2 = {
  name: 'xiaobai',
  age: 4
}
console.log(obj1 == obj2) // false
console.log(Object.is(obj1, obj2)) // false
  • 对象对比的不是内容而是引用地址所以返回的false

扩展运算符与Object.assign()

let x = {
  a: 3,
  b: 4
}
let y = {...x}
console.log(y)
Object.assign(y, x)
  • Object.assign() 用于合并对象,第一个参数指的是目标对象,第二个参数是源对象

in

判断当前对象里面是否包含某个属性

  a: 3,
  b: 4
}
console.log('a' in x) // true
console.log('a1' in x) // fasle

let arr = [1, 2, 3]
console.log(3 in arr) // false
  • 使用 in 判断数组的时候并不是判断有没有值是3,而是判断下标3 ,有没有内容

对象的遍历方法

let obj = {
  name: 'xiaobai',
  age: 4
}
for (let key in obj){
  console.log(key, obj[key])
}
Object.keys(obj).forEach(key => {
  console.log(key, obj[key])
})

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