聲明對象時,可以只寫屬性名合陵,不寫屬性值
/*ES5中*/
var obj = {
foo: "aaaa"
}
console.log(obj.foo); //aaaa
/*ES6中*/
var foo = 'aaaa';
var obj = {
foo
}
console.log(obj.foo); //aaaa
var obj1 = {
foo() {
return 'hello!';
}
}
var obj2 = {
foo: function () {
return 'hello!'
}
}
console.log(obj1.foo()); //hello
console.log(obj2.foo()); //hello
增加對象屬性的方法
var prop = 'age';
var obj = {};
obj.name = 'name1';
obj[prop] = 18; //用方括號作為對象的屬性名潭兽,然后里面寫一個變量或者表達式:
obj["prop"+"prop"] = "pppp";
console.log(obj); //Object {name: "name1", age: 18, propprop: "pppp"}
Object.is()屬性
用于比較兩個值是否相等
在ES5中,我們常用到 == 和 ===王浴,但 == 會存在隱式類型轉換脆炎,===的NaN不等于自身,+0等于-0
ES6的Object.is()屬性解決了這個問題氓辣。
+0 === -0 //true
NaN === NaN // false
Object.is(+0, -0) // false
Object.is(NaN, NaN) // true
Object.assign()屬性
對象合并秒裕,該方法第一個參數(shù)是目標對象,后面的參數(shù)都是源對象钞啸。
相當于淺拷貝(如果大家不知道什么是淺拷貝几蜻,可以參考我前面的寫的)
var target = { a: 1 };
var source1 = { b: 2 };
var source2 = { c: 3 };
Object.assign(target, source1, source2);
console.log(target); //Object {a: 1, b: 2, c: 3}
一旦遇到同名屬性喇潘,后面對象的屬性會覆蓋前面對象的屬性。
var target = { a: 1 };
var source1 = { b: 2 };
var source2 = { b: 3 };
Object.assign(target, source1, source2);
console.log(target); //Object {a: 1, b: 3}
Object.keys()屬性
輸出屬性名
var obj = { foo: "bar", baz: 42 };
console.log(Object.keys(obj)); //["foo", "baz"]
Object.values()屬性
輸出屬性值
var obj = { foo: "bar", baz: 42 };
console.log(Object.values(obj));//["bar", 42]
Object.entries()屬性
將對象的所有信息包裝成為二維數(shù)組
讀寫操作
_proto_前后的雙下劃線梭稚,說明它本質上是一個內部屬性颖低,而不是一個正式的對外的 API,只是由于瀏覽器廣泛支持弧烤,才被加入了 ES6.
從語義的角度忱屑,還是從兼容性的角度,都不要使用這個屬性暇昂,而是使用下面的Object.setPrototypeOf()(寫操作)Object.getPrototypeOf()(讀操作)莺戒、Object.create()(生成操作)代替.
var obj1 = {
a:1
}
var obj2 = {
b:2
}
Object.setPrototypeOf(obj1,obj2);//obj1.__proto__ = obj2;
console.log(obj1.b); //2
擴展運算符 “ ... ”
var arr1 = [1,2,3];
var arr2 = [4,5,6];
var arr = [...arr1,...arr2];
console.log(arr); //[1,2,3,4,5,6]
rest運算符 “ ... ”
var [a,...b] = [1,2,3];
console.log(a);//1
console.log(b);//[2,3]