1. 程式人生 > >javascript:關於parseint()、Number和+最清晰的區別解析

javascript:關於parseint()、Number和+最清晰的區別解析

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型別)

牛鼻不?也希望各位不單單要鑽牛角尖,而是在鑽研的過程中,掌握更多的基礎。