属性的简洁表示
es6允许直接写入变量和函数,作为属性名和方法
var a = 'b';
var c = {a};
//c = {a:'b'};
如果属性值与属性名一样,我们值写属性名就可以:
{ x , y } = { x: x, y: y}
方法简写:
add(){ a + b};
//add : function (){
a + b
}
属性名表达式
定义对象属性有两种方法:
1
obj.name = lijixuan;
2
obj['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)
一个返回可遍历的属性名,一个返回可遍历的属性值,一个返回数组,属性名与属性值。