ES6中对对象的扩展

  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};

posted @ 2018-07-18 15:34  艾路  阅读(158)  评论(0编辑  收藏  举报