symbol:一種新的原始資料型別
宣告方式:
let s1 = symbol()let s2 = symbol()
console.log(s1); // symbol()
console.log(s2); // symbol()
console.log(s1 === s2); // false
let s3 = symbol('foo');
let s4 = symbol('bar');
console.log(s3); // symbol(foo)
console.log(s4); // symbol(bar)
console.log(s3 === s4); // false
如果symbol宣告時傳入的引數是物件,會自動呼叫自身的tostring方法:
const obj =let s5 = symbol(obj)
console.log(s5); // symbol([object object])
for方法:
使用for方法會在全域性進行表述的定義,下次再使用for定義,會先去全域性定義裡面找有沒有定義過的描述
let s6 = symbol.for('foo')let s7 = symbol.for('foo')
function foo()
s8 = foo()
console.log(s6 === s7); // true
console.log(s6 === s8); // true
keyfor來檢視你的symbol有沒在全域性登記過:
const s9 = symbol('foo')const s10 = symbol.for('foo')
console.log(symbol.keyfor(s9)); // undefined
console.log(symbol.keyfor(s10)); // foo
應用場景:
1、用symbol保證物件的key可以重名但是key不相等,得到同時存在,
例如乙個物件裡面儲存班級同學的資訊,但是很有可能班級有重名的情況
const stu1 = symbol('張三')const stu2 = symbol('張三')
const grade = ,
[stu2]: ,
}console.log(grade);
console.log(grade[stu1]);
console.log(grade[stu2]);
2、使用symbol可以相對隱藏類的例項屬性
const sym = symbol('age')class user
getname()
}const user = new user('張三')
user.getname()
// for in是讀取不到sym屬性
for (let key in user)
// keys讀取不到sym屬性
for (let key of object.keys(user))
// getownpropertysymbols只能讀取symbol屬性
for (let key of object.getownpropertysymbols(user))
// reflect.ownkeys既可以讀取一般例項屬性,也可以讀取symbol屬性
for (let key of reflect.ownkeys(user))
3、消除魔術字串
什麼是魔術字串?如下**:
這裡的aaa,bbb就是魔術字串,需要來回編寫,而且只要原方法修改,另外地方也要跟著修改
function getarea(str)return area
}console.log(getarea('aaa'))
使用物件來消除魔術字串
/*const strtype =
*/// 由於上面value其實並不需要關心是什麼字串,所以可以用symbol來代替
const strtype =
function getarea2(str)
return area
}console.log(getarea2(strtype.aaa))
ES6 11學習筆記 箭頭函式
1 this指向定義時所在的物件,而不是呼叫時所在的物件 2 不可以當做建構函式 3 不可以使用arguments物件 es5中定義函式的兩種方式 function fn1 let fn2 function fn1和fn2之間區別是 fn1編譯器會預編譯,呼叫fn1無論是在定義的前面還是後面都能正常...
es6 學習筆記(二)Symbol
symbol類似於enum,可以起到識別符號的作用。主要可以應用在一下場景。1.可以作為屬性名 var mysymbol symbol var a a.mysymbol hello a mysymbol undefined a mysymbol hello 要注意symbol值作為物件屬性名時,不能...
6 11學習筆記
一.加強版ol元素 1.可以通過start屬性來定義標號的開始值。2.可以通過reversed屬性來進行反向編號。二.dl元素 dl元素在html4中 d元素在html4中,是乙個專門用來定義術語的列表。dl元素在html5中 d元素在html5中,把d元素進行了重定義。每一項包含一條或者多秦帶名字...