對象不是類生成的對象歉提,指的是Object這個對象尘颓;
1.新增特性
- 簡潔表示法
- 屬性表達式
- 擴展運算符
- Object新增方法
2.簡潔表示法
{
//簡潔表示法
let o =1;
let k =2;
//ES5:聲明一個簡易的Object對象
var es5 = {
o:o,
k:k
};
//ES6
let es6 ={
o,
k
};
console.log(es5,es6); //Object{k:2,o:1} Object{k:2,o:1}
//ES5:對象中有方法
let es5_method ={
hello:function(){
console.log('Hello');
}
};
//ES6:對象中方法
let es6_method = {
hello(){
console.log('Hello');
}
};
console.log(es5_method.hello(),es6_method.hello()): //Hello Hello
}
3.屬性表達式
應(yīng)用:生成一個對象肘迎,而這個key值因為另一個變量來不同做變化的耀盗,這種就可以實現(xiàn)這種對變量的依賴调鬓;
{
//ES5:對象的寫法
//ES5中寫的屬性一定是一個固定的key值认然;
ES6中key值是可以用表達式补憾,也可以用變量來做這個key的;
let a ='b';
let es5_obj ={
a:'c',
b:'c'
};
//ES6:key值[a]中括號包起來的就是表達式卷员;可以直接是一個變量盈匾,
let es6_obj ={
//a是變量,變量的值是b
[a]:'c'
};
console.log(es5_obj,es6_obj);
//Object{ Object{b:"c"}
a:"c",
b:"c"
}
}
**4.Object對象中新增的常用的幾個API
{
//判斷兩個值是不是相等毕骡;
//is的判斷和===在功能上是一樣的削饵;
console.log('字符串',Object.is('abc','abc'),'abc'==='abc');//字符串 true true
//1.數(shù)組也是引用類型岩瘦,在值上都是空,兩個數(shù)組引用的是兩個不同的地址窿撬;嚴格意義上它兩不是相等的启昧;
//2.Object.is其實和===沒有區(qū)別;
console.log('數(shù)組',Object.is([],[]),[]===[]); //數(shù)組 false false
//assign--拷貝劈伴;
第一個參數(shù)要拷貝到的一個對象上密末;第二個參數(shù)把哪個值(哪個對象)拷貝到別的地方去;
//1.拷貝的屬性是有限制的跛璧;
(淺拷貝--引用類型值修改引用地址严里,而不是把所有的值拷過去)
//2.這個方法拷貝的是只有自身對象的一個屬性;如果這個對象有繼承追城,它不會拷貝繼承的屬性刹碾;
同時也不會拷貝這個對象中不可枚舉的一個屬性;
console.log('拷貝',Object.assign({a:'a'},{b:'b'}));
//輸出:拷貝 Object{a:"a",b:"b"} 兩個對象合并成一個新的對象了
//entries
let test ={k:123,o:456};
for(let [key,value] of Object.entries(test)){
console.log([key,value]);
}
//輸出:["k",123]
["o",456]
}
5.擴展運算符(ES7提案)
{
//...變量座柱;直接是編譯不通過的迷帜,加入babel-polyfill擴展兼容的,還是會報錯辆布;
babel支持不太好瞬矩,目前實際應(yīng)用沒法用;
let{a,b,...c} ={a:'test',b:'hill',c:'ddd',d:'ccc'}
//a 解析出來是 a:'test'
b 解析出來是 b:'hill'
c ={
c:'ddd',
d:'ccc'
};
}