本篇比較短,記錄自己剛學(xué)到的設(shè)置對象默認(rèn)值
眾所周知對象是通過valueOf跟toString來轉(zhuǎn)換值的
var obj={
valueOf:()=>{console.log('ValueOf');return {}},
toString:()=>{console.log('String');return {}}
}
首先我們寫一個對象并添加valueOf跟toString屬性,先進(jìn)行number轉(zhuǎn)換
+obj

可以看到先進(jìn)行了valueOf 然后是toString,最后報(bào)錯(因?yàn)閞eturn 被我修改了)
那么再進(jìn)行String轉(zhuǎn)換
String(obj)

那么就先進(jìn)行toString,當(dāng)然如果return一個隨意字符串就會終止這個過程
如果是對象自身隱式轉(zhuǎn)換,則是valurOf優(yōu)先
var obj={
valueOf:()=>{console.log('ValueOf');return {}},
toString:()=>{console.log('String');return 'a'}
}
console.log(obj=='1',obj==1,'1'==obj,1==obj)

為了防止報(bào)錯,給予了一個字符串a(chǎn)
那么ES6之后規(guī)定了一個ToPrimitive函數(shù),用來規(guī)定這個轉(zhuǎn)換規(guī)則,也可以看到報(bào)錯中出現(xiàn)了這個單詞
使用方法很簡單
var obj={
[Symbol.toPrimitive](n){
}
}
n的話是當(dāng)前的環(huán)境所指(Stirng or Number)
var obj={
[Symbol.toPrimitive](n){
console.log(n)
if(n=='string'){
return 'vue'
}
if(n=='number'){
return 110
}
return true;
}
}
此時進(jìn)行一個number操作
console.log(+obj)

同樣的字符串操作(使用模板字符串)
console.log(`${obj}`)

默認(rèn)執(zhí)行
console.log(obj+'') //此時就是default狀態(tài)
