我正在读一本书" Eloquent JavaScript"由Marijn Haverbeke说道:
"将字符串和数字转换为布尔值的规则规定0,NaN和空字符串("")计为false,而所有其他值都计为true。 "
如果有人根据转换规则说NaN算错,那么有人会解释我作者的意思会不会很好?
我现在可以看到:
for i in range(len(word) // 2):
print(word[2*i:2*i+2])
是的我知道" NaN不等于任何东西,即使对于其他NaN",但我只是想知道这本书要我知道什么?
答案 0 :(得分:3)
基本上,如果将变量分配给NaN
,则在条件语句中使用它时将评估为false。例如:
var b = NaN;
if(b){//code will never enter this block
console.log('the impossible has occurred!')
}
如果输入无效,也是如此:
var input = "abcd"
var num = parseFloat(input);
if(num){
console.log('the impossible has occurred!')
}
答案 1 :(得分:1)
var a = NaN;
var b = null;
var c;
var d = false;
var e = 0;
document.write(a + " " + b + " " + c + " " + d + " "+ e + "<br>");
if(a || b || c || d || e){
document.write("Code won't enter here");
}
if(a || b || c || d || e || true){
document.write("Code finally enters");
}
参考:link
答案 2 :(得分:1)
其他答案是正确的,但重要的是,在条件中使用的情况下会转换为bool
。
这就是原因:
NaN === false // false
然而:
if(NaN) // false because it first does a boolean conversion
// which is the rule you see described
作为旁注,问题(注释NaN == false
vs ==
)中使用的===
实际上是从false
到0
的类型转换==
运算符。它超出了这个问题的范围,但操作员的差异在其他地方有很好的记录。
答案 3 :(得分:0)
本书希望您了解JavaScript将NaN评估为false。
var notANumber = 500 / 0;
if(notANumber) {
// this code block does not run
}
else {
// this code block runs
}