ES6允许直接写入变量和函数作为对象的属性和方法。这样的书写更加简洁。
ES6允许在对象中只写属性名,不写属性值。这时,属性值等于属性名所代表的变量。
function f(x , y){ return {x ,y}; } f(1,2)// Object {x:1,y:2} function getPoint(){ var x=1; var y=10; return {x,y}; } getPoint()//{x:1,y:10}
js语言定义对象的属性有两种方法。obj.foo=true;obj[‘a‘]=123;1直接用标识符作为属性名;2是用表达式作为属性名,这时要将表达式放在方括号内。但是,如果使用字面量方式定义对象,在ES5中只能使用方法一定义属性。
ES6允许字面量定义对象时用表达式作为对象的属性名,即把表达式放在方括号内。
let propKey=‘foo‘; let obj={ [propKey]:true, [‘a‘+‘bc‘]:123, } var lastWord=‘last word‘; var a={ ‘first word‘:‘hello‘, [lastWord]:‘world‘ }
Object.is用来比较两个值是否严格相等。它与严格比较运算符(===)的行为基本一致。Object.is(‘foo‘,‘foo‘)//true Object.is({},{})//false 不同之处只有两个:一是+0不等于-0,二是NaN等于自身。Object.assign方法用来将源对象的所有可枚举属性复制到目标对象。它至少需要两个对象作为参数,第一个参数是目标对象,后面的参数都是源对象。只要有一个参数不是对象,就会抛出TypeError错误。
var target={a:1}; var source1={b:2}; var source2={c:3}; Object.assign(target,source1,source2); target//{a:1,b:2,c:3} //注意,如果目标对象与源对象有同名属性,或多个源对象有同名属性, //则后面的属性会覆盖前面的属性。 var target={a:1,b:1}; var source1={b:2,c:2}; var source2={c:3}; Object.assign(target,source1,source2); target//{a:1,b:2,c:3}
注意,Object.assign可用于处理数组,但是会将其视为对象。
Object.assign([1,2,3],[4,5])//[4,5,3]
Obeject.assign把数组视为属性名为0、1、2的对象,因此目标数组的0号属性4覆盖了原数组的0号属性1.
对象的扩展运算符
Rest参数用于从一个对象取值,相当于将所有可遍历但尚未被读取的属性,分配到指定的对象上。所有的键及其值都会复制到新对象上。rest参数的复制是浅复制,即如果一个键的值是复合类型的值,那么rest参数复制的是这个值的引用,而不是这个值的副本。
Rest参数不会复制继承自原型对象的属性。
扩展运算符用于取出参数对象的所有可遍历属性,复制到当前对象中。这等同于使用Object.assign方法。
扩展运算符可用于合并两个对象。let ab={...a,...b};
原文地址:https://www.cnblogs.com/wlxll/p/9329434.html