摘要:數(shù)字加轉(zhuǎn)為,再做加法運算。在這里,被解析成一個空的因此實際上解析成這樣就是把一個空數(shù)組轉(zhuǎn)換成數(shù)值,調(diào)用之后還是自身,因此調(diào)用得到一個空字符串,轉(zhuǎn)換成數(shù)字。參考詳解的加法運算符中和的返回值情況是怎樣的
JavaScript 里面不同的類型做加法之前,需要做各種轉(zhuǎn)換,這里做一個比較完善的總結(jié)。
基本轉(zhuǎn)換規(guī)則
運算雙方存在對象時
如果有一個對象,那么先把它轉(zhuǎn)換成基本類型值
轉(zhuǎn)換之后,如果有字符串,另一個值先轉(zhuǎn)換成字符串,然后再做連接操作
如果沒有,把二者轉(zhuǎn)換成數(shù)字再相加
如果二者都是基本類型值,先檢查是否有字符串類型,如果有就做連接操作;如果沒有,就把二者轉(zhuǎn)換成數(shù)字相加。
對象轉(zhuǎn)換成基本類型值如果是 Date 對象,那么用toString()
其它情況下,用valueOf()
其他情況下(valueOf()不存在或者不返回基本類型值),那么用toString()
舉例 數(shù)字加字符串var result = 1 + "5" // 15
二者都是基本類型值,且有字符串,因此做連接操作。
數(shù)字加數(shù)組var result = [1, 3, 5] + 1 // "1, 3, 51"
數(shù)組是引用類型,先用valueOf()進行轉(zhuǎn)換,但是數(shù)組的valueOf()的結(jié)果還是原來的數(shù)組,所以用toString()方法得到一個字符串"1, 3, 5";然后是一個字符串加一個數(shù)字,做連接操作。
數(shù)字加 booleanvar result = 10 + true // 11
二者都是基本類型值,且沒有字符串,所以把true轉(zhuǎn)換成數(shù)字相加。
數(shù)字加對象var result = 15 + {} // "15[object Object]"
首先對對象做轉(zhuǎn)換,對象的valueOf還是自身,所以用toString()來轉(zhuǎn)換,{}.toString()的結(jié)果是"[object Object]",所以最后的結(jié)果就是"15[object Object]"。
數(shù)字加 nullvar result = 8 + null // 8
null 轉(zhuǎn)為0,再做加法運算。
字符串加 nullvar result = "queen" + null // "queennull"數(shù)字加 undefined
var result = 12 + undefined // NaN
把undefined轉(zhuǎn)換成數(shù)字,得到NaN,因此加法的結(jié)果就是NaN。
[] + {}var result = [] + {} // "[object Object]"
二者都是對象,而且二者的valueOf方法的結(jié)果都是自身,所以要調(diào)用toString方法??諗?shù)組調(diào)用的結(jié)果是個空字符串,空對象調(diào)用的結(jié)果是"[object Object]", 字符串連接之后的結(jié)果就是"[object Object]"。
{} + []var result = {} + [] // 0
在這里,{}被解析成一個空的 block,因此實際上解析成這樣:
{ // empty block } + []
就是把一個空數(shù)組轉(zhuǎn)換成數(shù)值,調(diào)用valueOf之后還是自身,因此調(diào)用toString, 得到一個空字符串,轉(zhuǎn)換成數(shù)字0。
參考:
詳解 JavaScript 的加法運算符
JS中{}+[]和[]+{}的返回值情況是怎樣的
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/79482.html
摘要:數(shù)字和解釋因為沒有任何一個操作數(shù)是字符串,將轉(zhuǎn)換為一個數(shù)字做數(shù)字加法運算因為沒有操作數(shù)是對象或字符串,將轉(zhuǎn)換為。結(jié)論以避免潛在的問題,不使用加法運算符處理對象,除非你清楚地使用或方法。 前端學習:教程&模塊化/規(guī)范化/工程化/優(yōu)化&工具/調(diào)試&值得關(guān)注的博客/Git&面試資源匯總 JavaScript一路走來,備受爭議,與其說它備受爭議,不如說它不夠完美。不夠完美?那完美了還得了,它的...
摘要:我們再來回顧下文首提出的這個比較運算,首先為對象,則調(diào)用函數(shù)將其轉(zhuǎn)化為字符串對于右側(cè)的,首先會進行顯式類型轉(zhuǎn)換,將其轉(zhuǎn)化為。 JavaScript 運算符規(guī)則與隱式類型轉(zhuǎn)換詳解 從屬于筆者的現(xiàn)代 JavaScript 開發(fā):語法基礎(chǔ)與工程實踐系列文章,主要探討 JavaScript 中令人迷惑的加減乘除與比較等常見運算中的規(guī)則與隱式類型轉(zhuǎn)換;本文中涉及的參考資料全部聲明在了JavaSc...
摘要:我們再來回顧下文首提出的這個比較運算,首先為對象,則調(diào)用函數(shù)將其轉(zhuǎn)化為字符串對于右側(cè)的,首先會進行顯式類型轉(zhuǎn)換,將其轉(zhuǎn)化為。 JavaScript 運算符規(guī)則與隱式類型轉(zhuǎn)換詳解 從屬于筆者的現(xiàn)代 JavaScript 開發(fā):語法基礎(chǔ)與工程實踐系列文章,主要探討 JavaScript 中令人迷惑的加減乘除與比較等常見運算中的規(guī)則與隱式類型轉(zhuǎn)換;本文中涉及的參考資料全部聲明在了JavaSc...
摘要:代碼示例等號檢查,類型轉(zhuǎn)換后返回全等檢查,由于時類型,時類型,類型不同,返回關(guān)系運算符關(guān)系運算符執(zhí)行的是比較運算,通常用于判斷兩個變量哪個大哪個小關(guān)系運算符都返回一個布爾值。邏輯或運輸符用雙豎線表示。 1.運算符 JavaScript中常見的運算符包含:賦值運算符、算數(shù)運算符、等性運算符、關(guān)系運算符、條件運算符、布爾運算符、邏輯運算符…… 1.賦值運算符 = 賦值運算符=,用于給某個變...
閱讀 1346·2021-11-15 11:37
閱讀 2224·2021-09-23 11:21
閱讀 1309·2019-08-30 15:55
閱讀 2116·2019-08-30 15:55
閱讀 2825·2019-08-30 15:52
閱讀 2830·2019-08-30 11:12
閱讀 1583·2019-08-29 18:45
閱讀 1897·2019-08-29 14:04