对象的拓展

1、属性的简介表示法
ES6允许直接写入变量和函数,作为对象的属性和方法。这样的书写更加简介。

let foo = 'foo';
let obj = {foo};
console.log(obj)    //{foo:'foo'}

除了属性简写,方法也可以简写。

const o = {
  methods(){
    return 'heool'
  }
}

2、属性名表达式
javascript定义对象的属性,有两种方法

//方法一
obj.foo = true;
//方法二
obj['a' + 'b'} = 123;
上面代码的方法一是直接用标识符作为属性名,方法二是用表达式作为属性名,这时要将表达式放在方括号内。

但是,如果使用字面量定义对象(使用大括号),在ES5中只能使用方法一(标识符)定义属性。

let obj = {
  a:1,
  b:2
}
ES6允许字面量定义对象时,用方法二(表达式)作为对象的属性名,即将表达式放在方括号内。
let foo = 'foo';
let obj = {
    ['a']:1,
    ['b']:2
}

表达式还可以用于定义方法名。

let obj = {
    ['h' + 'ello'](){
      return 'hi';
    }
}
obj.hello()    //hi

3、方法的name属性
函数的name属性,返回函数名。对象方法也是函数,因此也有name属性。

let person = {
  sayName(){
    console.log('hello!')
  }
}
person.sayName.name    //'sayName'

4、属性的可枚举性和遍历

let obj = {1:'a',2:'b'}
console.log(Object.keys(obj))    //[1,2]

5、对象的拓展运算符
解构赋值
对象的解构赋值用于从一个对象取值,相当于将目标对象自身的所有可遍历的,但尚且被读取的属性,分配到指定对象上面。所有的键和它们的值,都会拷贝到新对象上面。

let {a,b,c} = {a:1,b:2,c:3,d:4,e:5}
console.log(a,b,c)    //1,2,{c:3,d:4,e:5}

拓展运算符
对象的拓展运算符(...)用于取出参数对象的所有可遍历属性,拷贝到当前对象之中。

let z = {a:1,b:2}
let n = {...z}
n    //{a:1,b:2}

由于数组是特殊的对象,所以对象的拓展运算符也可以用于数组。

let foo = {...['a','b','c']}
foo
//{0: "a", 1: "b", 2: "c"}

对象合并

let z = {a:1,b:2}
let y = {c:3,d:4}
let zy = {...z,...y}
console.log(zy)    //{a: 1, b: 2, c: 3, d: 4}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。