2011-05-13 82 views
7

我在編寫腳本時發現了一個錯誤,而且我遇到了麻煩,確切指出導致問題的原因。具體做法是:這裏發生了什麼樣的Javascript類型轉換?

"49px" < 50 === false 

有兩種不同的轉換,我能想到的在這裏:

parseInt("49px") < 50 === true 

那麼,爲什麼這個值爲false:

49 < 50 === true 
"49px" < "50" === true 
"49" < 50 === true // just for the hell of it 

我有固定的呢?到底發生了什麼?

+1

查看[Abstract Relational Comparison Algorithm](http://es5.github.com/#x11.8.5)... – 2011-05-13 00:41:53

+0

修復不足。 Number(「49px」)發生,parseInt/Float行爲有所不同 – user422039 2011-05-13 02:36:17

+1

你沒有在解析int中指定一個基數? https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/parseInt現在就做,但還​​不算太晚! – Incognito 2011-05-13 02:42:36

回答

10

如果一個操作數是一個數字,另一個操作數是一個字符串,則the string is converted to a number然後進行比較。

如果字符串不能轉換爲數字,它將轉換爲NaN,並且比較總是返回false

3

當javascript被要求將某個數字與其他東西進行比較時,它會嘗試將該「其他」轉換爲數字。在這種情況下,"49px"評估爲NaN因此NaN < 50false

+0

困擾,只是幾分鐘太晚! – 2011-05-13 00:43:41

+0

維達先生,感謝您清理我的爛攤子。 – 2011-05-13 00:58:18

相關問題