javascript:關於parseint()、Number和+最清晰的區別解析
阿新 • • 發佈:2018-12-04
1.思考
首先對於+操作符有一個有趣的題目
console.log(++[[]][+[]]+[+[]]) //???
++[[]][+[]]+[+[]]
這個式子輸出的是什麼?
不知道?那就先了解一下他們的用法吧。
2.三者的使用
parseInt(), parseInt(str, radix)方法是把給定的字串按照指定的進位制轉換為整型 int型別。parseInt()在遇到不能解析的內容時會自動返回前面已經解析好的內容,如果是第一位字元不能解析那麼會直接返回NaN。
Number(), Number()除了可以用’new’關鍵字來建立物件外,還可以用來執行型別轉換,如果需要轉換的內容不能轉換為數字,則會自動返回NaN。
+操作符可以將字串轉化為數字,和Number()一樣,如+”123”返回是123.
3.案例
// 當字串是由數字組成的時候 let numStr = '123' console.log(parseInt(numStr)) //123 console.log(Number(numStr)) //123 console.log(+numStr) //123 // 當字串是由字母組成的時候 numStr = 'abc' console.log(parseInt(numStr)) //NaN console.log(Number(numStr)) //NaN console.log(+numStr) //NaN // 當字串是由數字和字母組成的時候,數字開頭 numStr = '12a3b' console.log(parseInt(numStr)) //12 console.log(Number(numStr)) //NaN console.log(+numStr) //NaN // 當字串是由數字和字母組成的時候,字母開頭 numStr = 'a123' console.log(parseInt(numStr)) //NaN console.log(Number(numStr)) //NaN console.log(+numStr) //NaN // 當字串是由0和數字 numStr = '0123' console.log(parseInt(numStr)) //123 console.log(Number(numStr)) //123 console.log(+numStr) //123 // **當字串包含小數點 numStr = '123.456' console.log(parseInt(numStr)) //123 console.log(Number(numStr)) //123.456 console.log(+numStr) //123.456 // **當字串為null時 numStr = null console.log(parseInt(numStr)) //NaN console.log(Number(numStr)) //0 console.log(+numStr) //0 // **當字串為''(空)時 numStr = '' console.log(parseInt(numStr)) //NaN console.log(Number(numStr)) //0 console.log(+numStr) //0
4.其他的型別
對於其他的型別呼叫這三個其實原理是沒有變的,首先是將其他的型別轉換為字元型別,也就是先呼叫toString()的方法,然後在通過這三種方式轉換為數字;
numStr =[] console.log(numStr.toString()) //''空字串 console.log(parseInt(numStr)) //NaN console.log(Number(numStr)) //0 console.log(+numStr) //0 numStr =[1] console.log(numStr.toString()) //1 console.log(parseInt(numStr)) //1 console.log(Number(numStr)) //1 console.log(+numStr) //1 numStr =[1,2] console.log(numStr.toString()) //1,2 console.log(parseInt(numStr)) //1 console.log(Number(numStr)) //NaN console.log(+numStr) //NaN
關於++[[]][+[]]+[+[]]
解法
如果你看了上面的內容你就會知道+[]輸出的是0了
所以式子可以簡化為
++[[]][0]+[0]
[[]][0]的意思是獲取 [[]] 的第一個元素,這就得出了下面的結果:
++[]+[0]
++[]可以轉化為
+([]+1) =====> +('1') =====> 1
式子又得到一步簡化
1+[0] // 1+[0].toString
最終的結果就是 10 (string型別)
牛鼻不?也希望各位不單單要鑽牛角尖,而是在鑽研的過程中,掌握更多的基礎。