有没有办法将nan与变量进行比较?我需要这个在不使用javascript函数的情况下理解变量是否为数字。
答案 0 :(得分:0)
我不确定你为什么要避免为此调用函数,但这是一个快速的黑客攻击:
var myNumber = NaN;
typeof myNumber === "number" && myNumber + "" !== "NaN"
这样一来,如果它是一个number
而不是NaN
,你会得到真的,如果它只是一个数字,如果它是一个非数字,它将返回true,它将返回false /
再次,建议使用isNaN
函数
答案 1 :(得分:0)
您可以通过检查值是否为NaN来测试值是否为NaN:
var foo = NaN;
console.log(foo !== foo); // true
var bar = 4;
console.log(bar !== bar); // false
有note for this in the ECMAScript specs。
根据评论,我想提供这样的功能来检测变量是否是数字:
function isNum (candidate) {
return +(candidate) === +(candidate) && //check for NaN with conversion
candidate !== (candidate / 0) && //check for Infinity
candidate !== '' && candidate !== null; //check for empty string and null, since +'' and +null will return 0
}
//returns false
console.log(isNum({ foo: 1 }));
console.log(isNum(''));
console.log(isNum(NaN));
console.log(isNum(undefined));
console.log(isNum(null));
console.log(isNum(Infinity));
console.log(isNum("foo1"));
console.log(isNum([1, 2, 3]));
console.log("------------------------------------------------------------------");
//returns true
console.log(isNum(9999999999));
console.log(isNum(.23));
console.log(isNum(0));
console.log(isNum(1e+30));
//will treat this also as number, since it could be easily converted
//typeof +"112233" === "number"
console.log(isNum("112233"));
//but still you can modify this method to use
//typeof candidate === "string" or (candidate).constructor === String
很高兴听到您的意见/建议。
答案 2 :(得分:-2)
忽略你对#34;没有Javascript功能" ...:
的奇怪限制content_type
这是确定值是typeof num == 'number' && !isNaN(num)
而不是Number
的正确方法。如果您还想确定数字是否有限(不是NaN
),请改用Infinity
。