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}
网友评论