所有在JavaScript中的错误值
 JavaScript中的值是'falsey' ,这意味着它们在if(value) , value ?等expression式中被评估为false value ? 和!value ? 
已经有一些关于堆栈溢出错误值的讨论 ,但是没有详尽的完整答案列出所有错误的值。
  我在MDN JavaScript Reference上找不到任何完整的列表 ,我惊奇地发现,当在JavaScript中查找完整的权威falsey值列表时,最重要的结果是博客文章,其中一些文章有明显的遗漏(例如, NaN ),没有一个像Stack Overflow这样的格式,可以添加注释或替代答案来指出怪癖,惊喜,遗漏,错误或警告。 所以,做一个似乎是有道理的。 
Falsey在JavaScript中的价值
-  false
-   0和-0
-   ""和''
-  null
-  undefined
-  NaN
-   document.all– 这是一个奇怪的,它是一个虚假的对象,typeof为undefined。 这是IE11之前IE中的微软专有function,并被添加到HTML规范中作为“故意违反JavaScript规范”,以便为IE编写的网站在尝试访问时不会中断,例如document.all.something这是虚假的,因为if (document.all)曾经是一个stream行的方式来检测IE浏览器,有条件的评论之前。 看看为什么`document.all`虚伪? 了解详情
  “Falsey”只是表示JavaScript的内部ToBoolean函数返回false 。  ToBoolean基础!value , value ? ... : ...; value ? ... : ...;  if(value){...}else{...} 。 
 为了与==比较,这些形成三个组: 
-   false, 0, -0, "", ''全部用==互相匹配-  例如false == ""和'' == 0
 
-  例如
-   null, undefined匹配==-  例如null == undefined但是undefined != false
-  另外值得一提的是,尽pipetypeof null返回的是'object',但null不是一个对象,这是一个长期存在的bug /怪癖 ,为了保持兼容性而没有被修复。 这不是一个真正的对象,而对象是真实的(除了那个“故意违规”的document.all,所有的Javascript都是用HTML实现的)
 
-  例如
-   NaN与==不匹配,甚至不是本身-  例如NaN != NaN,NaN != false,NaN != null
 
-  例如
 只有false与===匹配false 。 
  Truthy值其实== false 
  “Truthy”仅仅意味着JavaScript的内部ToBoolean函数返回true 。  一个Javascript的怪癖要注意:值可能是truthy( ToBoolean返回true ),而且== false 。 
 你可能会认为if( value && value==false ){ alert("huh?"); }  if( value && value==false ){ alert("huh?"); }是不可能发生的逻辑不可能的事情,但是,对于: 
-   "0"和'0'– 它们是非空的string,这是真的,但是Javascript的==匹配等价string的数字(例如42 == "42")。 由于0 == false,如果"0"==0,"0"==false。
-   new Number(0)和new Boolean(false)– 他们是对象,这是truthy,但==看到他们的价值观,这== false。
-  0 .toExponential();– 数值相当于0的对象
- 任何类似的结构,给你一个真正的价值包装在一个真正的types
-   [],[[]]和[0](感谢JavaScript平等表链接的 cloudfeet )
一些更真实的价值
这些只是一些人可能认为是虚假的,但实际上是真的。
-   -1和所有非零的负数
-   ' '," "和所有非空string,即使它们只是空格
- 
任何来自 typeof东西,总是返回一个非空string,例如:-   typeof null( 由于长期存在的bug /怪癖,返回一个string'object')
-   typeof undefined(返回一个string'undefined')
 
-   
- 
任何对象(请记住, null不是一个真正的对象),包括:-  {}
-  []
-   function(){}(任何定义为函数的variables,包括空函数)
- 任何正则expression式
-  用new创build的任何东西(包括用new创build的falsey值,见上)
 
-  
  true , 1 ,当用==比较时, "1"和[1]返回true 。 
只需添加@ user568458的falsey值列表即可:
- 
除了整数0之外,十进制数字0.0,0.00或任何这样的零数字也是一个错误的值。 var myNum = 0.0; if(myNum){ console.log('I am a truthy value'); } else { console.log('I am a falsey value'); }上面的代码片断打印 I am a falsey value
- 
类似的数字0的hex表示也是一个错误的值,如下面的代码片段所示: var myNum = 0x0; //hex representation of 0 if(myNum){ console.log('I am a truthy value'); } else { console.log('I am a falsey value'); }上面的代码段再次打印 I am a falsey value。
 不要忘记非空string"false" ,其值为true