use*_*ca8 193 javascript
JavaScript中的值是什么'falsey',这意味着它们在表达式中评估为false if(value),value ?并且!value?
关于Stack Overflow上的falsey值的目的已有一些讨论,但没有详尽的完整答案列出所有的falsey值.
我在MDN JavaScript Reference上找不到任何完整列表,我很惊讶地发现在JavaScript中查找完整,权威的虚假值列表时的最佳结果是博客文章,其中一些有明显的遗漏(例如,NaN),并且没有一个像Stack Overflow这样的格式,可以添加评论或替代答案来指出怪癖,惊喜,遗漏,错误或警告.因此,制作一个似乎是有意义的.
use*_*ca8 337
false0和其他形式的数字零相似-0,0.0和0x0(对于十六进制形式的RBT的信用)"",''和``- 长度为0的字符串nullundefinedNaNdocument.all (仅限HTML浏览器)
document.all是一个虚假的对象,typeofas undefined.它是IE11之前IE中的Microsoft专有功能,并且作为"故意违反JavaScript规范"添加到HTML规范中,因此为IE编写的网站在尝试访问时不会中断,例如document.all.something; 它是假的,因为if (document.all)在条件评论之前曾经是一种流行的方式来检测IE.请参阅为什么document.all falsy?详情"Falsey"只是意味着JavaScript的内部ToBoolean函数返回false. ToBoolean基础!value,value ? ... : ...;和if (value).这是它的官方规范(2018年工作草案)(自1997年第一个ECMAscript规范以来唯一的变化就是增加了ES6的符号,这些符号总是很简单):
==(宽松平等)的比较值得讨论的是假值与松散的比较==,ToNumber()由于潜在的差异而使用并可能引起一些混淆.它们有效地形成三组:
false, 0, -0, "", '' 所有人都相互配合 ==
false == "",'' == 0因此4/2 - 2 == 'some string'.slice(11); null, undefined 配合 ==
null == undefined但是undefined != falsetypeof null回报'object',null是不是一个对象,这是一个长期的错误/怪癖这是不固定的,以保持兼容性.这不是一个真正的对象,对象是真实的(除了document.all在HTML中实现Javascript时的"故意违规" )NaN 不匹配任何东西,与==或===甚至不匹配
NaN != NaN,NaN !== NaN,NaN != false,NaN != null"严格平等"(===),没有这样的分组.只有false === false.
这是许多开发人员和许多样式指南(例如标准 js)更喜欢===并且几乎从不使用的原因之一==.
== false"Truthy"只是意味着JavaScript的内部ToBoolean函数返回true.Javascript的应用怪癖要知道的(和另一个很好的理由,更喜欢===了==):这是可能的值是truthy(ToBoolean回报true),而且还== false.
您可能认为这if (value && value == false) alert('Huh?')是不可能发生的逻辑不可能性,但它会:
"0"并且'0'- 它们是非空字符串,这是真实的,但Javascript ==匹配数字与等效字符串(例如42 == "42").因为0 == false,如果 "0" == 0,"0" == false.new Number(0)而且new Boolean(false)- 它们是真实的物体,但却==看到了它们的价值观== false.0 .toExponential(); - 数值等于的对象 0[],[[]]和[0](感谢用于JavaScript Equality Table链接的cloudfeet)这些只是一些人可能会认为是假的,但实际上是真实的.
-1 和所有非零负数' '," ","false",'null'... 所有非空字符串,包括字符串只是空白来自的任何东西typeof,总是返回非空字符串,例如:
typeof null('object' 由于长期存在的错误/怪癖而返回一个字符串)typeof undefined(返回一个字符串'undefined')任何对象(除了document.all浏览器中的"故意违规" ; 除非另有说明,否则请记住这null不是真正的对象typeof).包含:
{}[]function(){}或() => {}(任何功能,包括空功能)Error 和任何实例 Errornew(包括new Number(0)和new Boolean(false))创建的任何东西true,1,"1"和[1]返回true相互比较与时==.
| 归档时间: |
|
| 查看次数: |
70156 次 |
| 最近记录: |