從underscore.js源摘自:理解下劃線的實施isNaN
_.isNaN = function(obj) {
return _.isNumber(obj) && obj != +obj;
};
他們爲什麼做這種方式?以上實現是否相當於:
_.isNaN = function(obj) {
return obj !== obj;
};
如果是,爲什麼「更復雜」版本?如果不是,行爲差異是什麼?
從underscore.js源摘自:理解下劃線的實施isNaN
_.isNaN = function(obj) {
return _.isNumber(obj) && obj != +obj;
};
他們爲什麼做這種方式?以上實現是否相當於:
_.isNaN = function(obj) {
return obj !== obj;
};
如果是,爲什麼「更復雜」版本?如果不是,行爲差異是什麼?
_.isNaN(new Number(NaN))
返回true。
這就是by design。
var n = new Number(NaN);
console.log(_.isNaN(n), n!==n); // logs true, false
主機環境(例如網頁瀏覽器環境)可能會引入其他不等於自己的值。該_.isNumber(obj)
部分可以確保輸入的是數值,因此,如果NaN
值傳遞_.isNaN
只返回true
。
你有一個主機環境的例子,介紹一個不等於自己的值? – Randomblue 2013-03-02 16:17:31
@Randomblue沒有。我從來沒有聽說過這樣的價值,因此*可能*。 – 2013-03-02 18:50:27
好的。聰明的想法,理論上說,主機環境把所有的賭注都關閉了。 – Randomblue 2013-03-02 18:57:05
如果+與前款沒有價值+任意值的前給予JavaScript引擎將嘗試把變量轉換爲Number.If它是有效的,它會給你數否則將返回NaN的。例如
+ "1" // is equal to integer value 1
+ "a1" // will be NaN because "a1" is not a valid number
在上述情況下
+"a1" != "a1" // true, so this is not a number, one case is satisfied
+"1" == "1" // true, so it is number
另一種簡單的情況下將是,爲什麼以下表達式得到該輸出
console.log("Why I am " + typeof + "");
// returns "Why I am number"
因爲+ 「」 爲0
如果你想檢查它是否是一個數字,你可以使用下面的函數
function isNumber(a){
/* first method : */ return (+a == a);
/* second method : */ return (+(+a) >= 0);
// And so many other exists
}
有人糾正我,如果我錯了地方..
我發現一個案例_.isNaN 它顯示了與本地一個不同的結果,如果你有傳遞一個對象
_.isNaN({}) => false
//but
isNaN({}) => true
或者更簡單,本機'isNaN'功能... – 2013-03-02 15:24:55
@Kolink從下劃線文檔拍攝:「注意:如果變量是不確定的,這是不一樣的本地isNaN功能,這也將返回true」 – robertklep 2013-03-02 15:26:23
@Kolink' isNaN(未定義)'給出true。 – 2013-03-02 15:27:14