建設(shè)網(wǎng)站的英語怎么說做網(wǎng)站的網(wǎng)絡(luò)公司
本質(zhì): 二元操作符+規(guī)則
一般判斷規(guī)則:
- 如果操作數(shù)是對象,則對象會轉(zhuǎn)換為原始值
- 如果其中一個操作數(shù)是字符串的話,另一個操作數(shù)也會轉(zhuǎn)換成字符串,進行字符串拼接
- 否則,兩個操作數(shù)都將轉(zhuǎn)換成數(shù)字或NaN,進行加法操作
轉(zhuǎn)為原始數(shù)據(jù)類型的值的方法:
- Symbol.ToPrimitive
- Object.prototype.valueOf
- Object.prototype.toString
一.?[]的原值
- typeof [][Symbol.ToPrimitive] // undefined
- [].valueOf() // []
- [].toString() // ‘’
所以[] + [] 就相當于 ''+'', 得到的是空字符串''
二.{}的原始值
- typeof {}[Symbol.ToPrimitive] // undefined
- ({}).valueOf() // {}
- ({}).toString() ?// '[object Object]'
注意事項: {}+xx需要看成{};+xx才是得到和控制臺一樣的值
比如:
({} + []) 相當于是'[object Object]' + '', 得到的是'[object Object]'
{} + [] 相當于{}; + [], 分號說明語句結(jié)束了,所以要往后看,而+號本身有隱式轉(zhuǎn)換數(shù)字的功能, 所以+[]等于0
同理:
({} + {})是'[object Object][object Object]'
而{} + {}相當于{}; + {},相當于只需要看+{}, {}的原始值是'[object Object]',隱式轉(zhuǎn)換'[object Object]'為數(shù)字,'[object Object]'無法轉(zhuǎn)換為正常數(shù)字,所以變成NaN
因此:
[] + ???就相當于([] + ???)
而{}的+運算特殊一些:
{} + ??? 相當于 +???轉(zhuǎn)換為數(shù)字, 得到0或者NaN
({} + ???) 相當于分別得到{}的原始值和???的原始值, 即('[object Object]' +???的原始值)
綜上所述:
[]+[] =>得到?''
[]+{} =>得到 '[object Object]'
{} + [] =>得到 0
{} + {} => 得到NaN