仿網(wǎng)站制作教學(xué)視頻網(wǎng)絡(luò)營銷與直播電商怎么樣
大家思考一下
[ ] + [ ]= ?
答案是空字符串
為什么呢?
當(dāng)做加法運(yùn)算的時候,發(fā)現(xiàn)左右兩端存在非原始類型,也就是引用類型對象,就會對對象做隱式類型轉(zhuǎn)換
如何執(zhí)行的?或者說怎么查找的?
第一步,會去對象中查找是否有 [Symbol.toPrimitive]
let obj = {[Symbol.toPrimitive]() {return 123 //如果返回引用數(shù)據(jù)類型 下面打印會報(bào)錯}}console.log(obj + 1); //124
如果不存在就進(jìn)入第二步,查找是否存在valueOf
let obj = {valueOf() {return 1 }}console.log(obj + 1); //2
如果valueOf返回的也是引用數(shù)據(jù)類型就會進(jìn)入第三步,toString()
let obj = {valueOf() {return [] //如果返回引用數(shù)據(jù)類型就會進(jìn)入第三步},toString() {return 1}}console.log(obj + 1); //2
所有為什么[ ] + [ ] = " " 呢?
因?yàn)樗来尾檎?#xff0c;找到最后發(fā)現(xiàn)是 [ ] 就會執(zhí)行最后一步 [ ].toString()也就是空字符串
那[ ] + ![ ] = ?
答案是false
這個是布爾判定 不是類型轉(zhuǎn)換
大家熟知的布爾為false的有:NaN Undefined Null “ ” 0 false
除了這些東西 其它都為true ![ ] 為false
空字符串 + false = false
console.log([] + ![]);//false
感謝大家的閱讀,如有不對的地方,可以向我提出,感謝大家!