Javascript JS:检查是否存在等于0的变量
我有一段代码,使用下面的示例中的if语句测试变量的存在性。如果设置了var,我需要做一件事,如果没有设置,我需要做另一件事。在某个测试用例中,var需要设置为0,但这与JS中有一个未设置的var是一样的,显然:Javascript JS:检查是否存在等于0的变量,javascript,Javascript,我有一段代码,使用下面的示例中的if语句测试变量的存在性。如果设置了var,我需要做一件事,如果没有设置,我需要做另一件事。在某个测试用例中,var需要设置为0,但这与JS中有一个未设置的var是一样的,显然: var toMatch; toMatch = 0; if (!toMatch) { document.write("no"); } else { document.write(toMatch); } // html is "no" 所以我的问题是,如果var的值合法
var toMatch;
toMatch = 0;
if (!toMatch) {
document.write("no");
} else {
document.write(toMatch);
}
// html is "no"
所以我的问题是,如果var的值合法地为零,我如何测试它。我应该指出,在我的函数中,可能要传递的值是0-40+
在过去,我使用了一种变通方法,比如将初始值设置为一个足够高的数字,这样就不太可能传递给函数,但在我看来,这似乎很难。有更好的方法吗
var toMatch;
toMatch = 0;
if (toMatch === 0) { // or !== if you're checking for not zero
document.write("no");
} else {
document.write(toMatch);
}
toMatch===0
将检查是否为零
toMatch===undefined
将检查undefined
对于这种情况,三重等于是严格的比较运算符。请看这个问题:Javascript在值和布尔检查方面有点滑稽。我建议阅读Javascript中的 您应该使用恒等式运算符
==代码>:
var toMatch;
toMatch = 0;
if (toMatch !== 0) {
document.write("no");
} else {
document.write(toMatch);
}
这也值得理解。您可以看到名称是否未定义为:
if (typeof bad_name === "undefined") {
而不是
if (toMatch)
使用
请注意,undefined
不是关键字,理论上可以被覆盖。建议使用if(typeof(toMatch)!==“undefined”)
或在匿名函数上使用undefined
的额外参数关闭代码。您可能还想提到,要检查存在性(不一定是特定值),您可以这样做:if(typeof toMatch!==“undefined”){如果你真的有妄想症,你也可以用(void 0)
代替未定义的,)+1代替x===undefined
代替typeof x===“undefined”
“unset”与未定义的相同。这个测试会起作用的。(它们中的任何一个)-1因为在与null/undefined(关键字)No进行比较时,您应该始终使用绝对相等===不,x==null
相当于x==null | x==undefined
。与null
进行比较是您应该使用=
的唯一情况(例如,jQuery样式指南认可这种做法)。null和undefined是保留字这一事实与此无关。我知道这一点,但这只是懒惰。。。您允许可能的异常,除非这是您正在寻找的特定行为。好的JavaScript实践总是说使用绝对平等,但我在所有代码中发现IE中有1到2处有缺陷,所以我必须使用相对平等。当然jQuery支持这一点,它们是最终的跨浏览器库。这就是为什么他们在市场份额中占有如此巨大的份额。你很少真正关心null
和undefined
之间的区别。如果toMatch
是一个全局变量,那么我建议使用typeof
检查,但因为(显然)不是,所以不会有任何异常——函数和局部变量的参数在未定义的情况下访问它们时不会抛出异常。我在IE方面做了很多发展;我可以向你保证这个比较没有错。我没说错,我说的是懒惰。。。程序员天生懒惰,这就是为什么我们编程,我们发现问题并尝试编写代码来解决它,因为。。。跳转实际上是数学,我有一个计算器。的类型是一个运算符,而不是一个方法。应该是if(typeof bad_name===undefined)
当我第一次看到这个符号时,我也都是WTF。。。告诉您一些有关强制转换的信息,如果您深入研究,它也将帮助您进行属性解析。还值得注意的是,您应该检查var是如何创建的,如果它是用户提交的表单,那么if(toMatch==“0”)可能会起作用,这就是我的情况,因为所有接受的答案都失败了
if (toMatch == null)