2012-11-26 47 views
1

我有一個有2個值的二維數組,我想用一條消息打印差異。爲什麼我需要parseInt()來避免NaN?

var array = [[0,2],[3,4]]; 
console.log(array[0][1]-array[0][0]) //prints '2' 
console.log(array[0][1]-array[0][0] + ' is the number') //prints '2 is the number' 
console.log('The number is' + array[0][1]-array[0][0]) //prints 'NaN' 
console.log('The number is ' + parseInt(array[0][1]-array[0][0], 10)) //prints 'The number is 2' 

爲什麼我需要parseInt()這裏之前打印一條消息的結果,但的結果,或只是對自己的結果後打印文本,是A-OK?

回答

7

其實,parseInt沒什麼區別。它將減法放在重要的括號中。

你的代碼基本上說的是:

"The number is" + array[0][1]-array[0][0] 
// becomes... 
"The number is 2"-array[0][0] 
// is cast to... 
parseInt("The number is 2")-array[0][0]; 
// which is... 
NaN-0 
// or just... 
NaN 

這是所有關於操作順序。

+0

我真的希望這拋出某種異常,而不是做類型強制。我不知道有多少次意外添加,反之亦然。 – tjameson

+0

哇,我有點笨,謝謝你的回答。我剛纔假設JS會在添加字符串之前減去數字。假設是所有的母親*%ù£$ès... – agryson

+0

那麼,我總是向對方保證事情的順序是正確的。花了我一點時間才明白XD –

0

發生這種情況是因爲JavaScript遵循從左到右的數學順序。既然你從一個字符串開始,它假定你正在拼接字符串。

+1

是怎麼回事除了'-'試圖把lhs變成數字,因爲'-'沒有爲字符串定義,而rhs是一個數字。 – tjameson

相關問題