ES6对象扩展

来源:互联网 发布:js 固定长度数组 编辑:程序博客网 时间:2024/04/30 12:45

属性的简洁表示

es6允许直接写入变量和函数,作为属性名和方法

var a = 'b';var c = {a};//c = {a:'b'};

如果属性值与属性名一样,我们值写属性名就可以:

{ x , y } = { x: x, y: y}

方法简写:

add(){ a + b};//add : function (){    a + b}

属性名表达式

定义对象属性有两种方法:

1obj.name = lijixuan;2obj['name'] = lijixuan;

我们原本只能用标识符定义属性,在es6中我们可以使用表达式作为属性名:

var obj  = {    a : 111;    bb: 222;};

现在可以:

var cc = 'a';var obj = {    [cc] : 111;    ['b' + 'b'] : 222;

这两种写法是相等的。

 name属性
函数的name属性返回函数名。

function add (){    console.log(this.name);}//add

两种特殊情况:bind方法创造的函数,name属性返回“bound”加上原函数的名字;Function构造函数创造的函数,name属性返回“anonymous”。

(new Function()).name // "anonymous"  var add = function() {   ...};  add.bind().name // "bound add"

Object.is
用来比较两个值是否严格相等。

+0 === -0 //true  NaN === NaN // false  Object.is(+0, -0) // false  Object.is(NaN, NaN) // true

这就是Object.is与 === 的区别,其余的都一样。

Obiect.assign()

Object.assign方法用于对象的合并,将源对象的所有可枚举属性,复制到目标对象

let target = { a : 1 };let origin1 = { b : 2 };let origin3 = { c : 3 };Object.assign(target , origin1 , origin2 )//target {a : 1, b : 2, c : 3};

第一个参数是目标对象,其余的全是源对象。

如果只有一个参数,返回该参数,如果不是对象,转换为对象。
undefined 、 null 报错。
字符串 => 数组 => 对象 (数组参数的转换形式)

拷贝:

var target = { a: { b: 'c', d: 'e' } }  var source = { a: { b: 'hello' } }  Object.assign(target, source)  // { a: { b: 'hello' } }

使用assign拷贝是浅拷贝。也就是说,如果源对象某个属性的值是对象,那么目标对象拷贝得到的是这个对象的引用。

为对象添加方法:

add(x, y) {      Object.assign(this, {x, y});    }  

合并对象:

  (target, ...sources) => Object.assign(target, ...sources);  

Object.setPrototypeOf()
给对象增加原型:

let proto = {};  let obj = { x: 10 };  Object.setPrototypeOf(obj, proto);  proto.y = 20;  proto.z = 40;  obj.x // 10  obj.y // 20  obj.z // 40

Object.keys() Object.values() Object.entries()

Object.keys(obj)  Object.values(obj)  Object.entries(obj)  

一个返回可遍历的属性名,一个返回可遍历的属性值,一个返回数组,属性名与属性值。

原创粉丝点击