if子句中的JavaScript false/null var

Fra*_*isc 2 javascript if-statement boolean

什么样的变量不会通过这个:

if(myVar){//code}

布尔值false?空值?Boolean false和NULL?还要别的吗?

谢谢.

CMS*_*CMS 10

以下所有值如下:

  • null
  • undefined
  • NaN
  • 0
  • "" (一个空字符串)
  • false

转换为布尔值的任何其他内容都将产生true.

更多信息:

  • @lincolnk:如果`myVar`是**未声明的**你会得到一个`ReferenceError`.一个变量可以被声明并保持`undefined`作为它的值,例如,当你声明一个变量而不用一个值初始化它时:`var myVar;`它将被**声明**,但是未初始化,它将保持` undefined`作为它的值,例如`alert(myVar);`将警告`"undefined"`.在某些时候,你也可以为它指定`undefined`值,例如`myVar = undefined;`.记住,**未声明**!=`undefined` (5认同)
  • - 注意以上所有都是*原始值*,任何对象,甚至布尔对象包装器总是会产生`true`,例如:`if(new Boolean(false)){alert('Javascript FTW!'); }` - (3认同)
  • @lincolnk:是的,如果[`typeof`运算符]的操作数表达式(http://ecma262-5.com/ELS5_HTML.htm#Section_11.4.3)是*不可解析的引用*(它不存在于范围链),将显式返回字符串`"undefined"`. (2认同)
  • @Francisc:转换为布尔值的字符串只有当它的长度为"0"(空字符串)时才会生成`false`****,这不是"0"的情况(它的长度是"1") .你可以通过`alert(!!"0");`或`alert(Boolean("0"))来简单地测试这个;`它会给你'true`.是的,我描述的值基于ECMAScript语言规范,它们是跨浏览器一致地实现的. (2认同)