對(duì)象
對(duì)象的屬性
-
屬性名可省略
ES6中,當(dāng)對(duì)象中的key:value鍵值對(duì),如果value是個(gè)變量/函數(shù),此時(shí)省略key,key的值就是變量名/函數(shù)名。
var a = 1;
var obj = {
a,
fn(){
console.log(1)
}
obj;
//{a:1,fn:fn(){console.log(1)}}
2.屬性名可變
實(shí)際上大多數(shù)瀏覽器都已支持此方式
var a = 'name';
var obj = {};
obj[a] = '全棧前端';
-
屬性的描述器(Descriptor)
屬性的此對(duì)象用來(lái)控制屬性的行為,常用到枚舉(enumerable)
查看屬性的描述器:
Object.getOwnPropertyDescriptor(object,key)
var obj = {a:1};
Object.getOwnPropertyDescriptor(obj,'a');
//{value:1,writable:true,enumerable:true,configurable:true}
-
可枚舉性
屬性的enumerable值,不可枚舉時(shí)以下操作會(huì)忽略此屬性:
1.for...in...循環(huán)
for in 循環(huán)也會(huì)遍歷到繼承的屬性(最初枚舉只為了遍歷開某些屬性,比如toString方法等)
2.Object.keys()
3.JSON.stringify()
4.Object.assign()
5.Reflect.enumerable()
ES6對(duì)象常用的方法
1.合并對(duì)象Object.assign(target,source...)
此方法將其他對(duì)象的可枚舉屬性淺合并到目標(biāo)對(duì)象里,重復(fù)的會(huì)被覆蓋
var obj = {a:1};
var obj1={b:2};
Object.assign(obj,obj1);
obj;
//{a:1,b:2}
注:克隆對(duì)象可使用此方法解決
- ES6對(duì)象不常用方法
Object.is(val1,val2)
比較2個(gè)值是否全等,基本同===(NaN比較和+0,-0比較結(jié)果不同)
JS第七種數(shù)據(jù)類型Symbol
七種數(shù)據(jù)類型
bolean、number 、string、undefined、null、object、symbol(標(biāo)示類型)
symbol含義
表示獨(dú)一無(wú)二的,是基本數(shù)據(jù)類型的一種,類似字符串。
它是為了解決命名重復(fù)問(wèn)題。
symbol創(chuàng)建
symbol類型數(shù)據(jù)只能使用Symbol()函數(shù)創(chuàng)建
注意:
- symbol值不能與其他類型值進(jìn)行運(yùn)算
var s = Symbol();
s;
//輸出Symbol()
Symbol(del)函數(shù)
該函數(shù)返回一個(gè)symbol類型的值,其中參數(shù)des表示對(duì)值的描述
注意:
symbol函數(shù)返回的值永遠(yuǎn)不相同,即便參數(shù)des相同,返回值也不同。
轉(zhuǎn)化
類型數(shù)據(jù)不會(huì)自動(dòng)轉(zhuǎn)化,可以轉(zhuǎn)換為字符串或布爾值
var s = Symbol("name");
String(s);//"Symbol(name)"
Boolean(s);//true
!s;//false
//if語(yǔ)句也可
if(s){
}
方法
1.Symbol.for(des)
登記symbol值,使用此方法生成的symbol值,如果des相同則認(rèn)為是同一個(gè)值。
var s1 = Symbol.for("ss");
var s2 = Symbol.for("ss");
s1===s2;
//true
2.Symbol.keyFor(var)
返回已登記symbol的描述之
var s1=Symbol.for("ss");
Symbol.keyFor(s1);
//ss
應(yīng)用
1.作為對(duì)象的key的值
必須使用[],取值用。語(yǔ)法報(bào)錯(cuò)(點(diǎn)語(yǔ)法認(rèn)為后面是字符串)
var s=Symbol();
var obj={
[s]:1
};
obj;//{symbol():1}
obj[s];//1
注:
(1)對(duì)象中屬性名是symbol則無(wú)法用for in變量,使用Object.getOwnPropertySymbo()返回所有symbol屬性名的數(shù)組或者使用Reflect.ownKeys()返回所有屬性名的數(shù)組
(2)用作私有屬性
Set結(jié)構(gòu)
概念
Set結(jié)構(gòu)類似數(shù)組,但是不會(huì)有重復(fù)的值
創(chuàng)建
Set結(jié)構(gòu)只能通過(guò)Set()構(gòu)造器創(chuàng)建
var s=new Set();
s.add(1);
s.add(2);
s.add(1);
s;//Set(2){1,2}
注:symbol數(shù)據(jù)類型由Symbol函數(shù)創(chuàng)建,不需要實(shí)例化
Set([arr])構(gòu)造函數(shù)
用來(lái)創(chuàng)建一個(gè)Set結(jié)構(gòu)的數(shù)據(jù),參數(shù)arr可選(初始化數(shù)據(jù))
var s = new Set([1,2,2]);
s;//Set(2){1,2}
Set結(jié)構(gòu)的屬性和方法
屬性
1.size成員數(shù)量
2.constructor構(gòu)造器,自然是Set
方法
1.add(value)添加值并返回自身(可鏈?zhǔn)讲僮鳎?br>
2.delete刪除某個(gè)值,返回true/false(刪除不存在的value)
3.clear()清空所有值,無(wú)返回值
4.has(value)查找,返回true/false
5.keys()、values()、entries()、forEach()不常用
遍歷
默認(rèn)可遍歷(實(shí)際調(diào)用的values()方法)
for...of
var s = new S([1,2,3]);
for(i of s){
console.log(i)
}
//1,2,3
應(yīng)用
1.Array.from()或者...展開符號(hào),可以將Set結(jié)構(gòu)轉(zhuǎn)為數(shù)組
2.數(shù)組去重
var arr = [1,2,2];
var s = new Set(arr);
var newArr=Array.from(s);
newArr;//[1,2]
WeakSet
類似Set,但是只能存放對(duì)象,而且保存的數(shù)據(jù)都是弱引用(不被垃圾回收機(jī)制計(jì)算在內(nèi),意味著保存的數(shù)據(jù)很可能會(huì)消失,且弱引用不可遍歷)
創(chuàng)建:WeakSet()構(gòu)造器
方法:add、delete、has
-
屬性:無(wú)size屬性
-應(yīng)用:保存dom,不必?fù)?dān)心內(nèi)存泄露-----本系列文章到此結(jié)束,喜歡的點(diǎn)個(gè)贊再走。