
Javascript中的假值
false
0
和其他形式的数字等的零-0
,0.0
和0x0
(信贷RBT为十六进制形式)
- `”“,’‘ 和 ```-长度的字符串0- null
- undefined
- NaN
- document.all (仅在HTML浏览器中)
- 这是一个奇怪的。
document.all
是一个假对象,带有typeof
asundefined
。它是IE11之前的IE中的Microsoft专有功能,并作为“蓄意违反Javascript规范”而添加到HTML规范中,因此为IE编写的网站在尝试访问时不会中断document.all.something。这是虚假的,因为它if (document.all)
曾经是在条件注释之前检测IE的流行方法。请参阅为什么document.all
虚假?详情
“ Falsey”仅表示Javascript的内部ToBoolean
函数returnfalse
。ToBoolean
underlies!value,value ? ...
: …;和if (value)。这是其官方规范(2018年工作草案)(自1997年第一个ECMAscript规范以来唯一的变化就是添加了ES6的Symbols,它们始终是真实的):
与==(宽松平等)的比较
值得一谈的是falsy值与的松散比较
==,这会使用
Tonumber()并可能由于潜在的差异而引起混淆。它们有效地分为三类:
false, 0, -0, "", ''
彼此匹配==
- 例如
false == ""
,'' == 0
因此4/2 - 2 == 'some string'.slice(11)
; null, undefined
与==
- 例如,n
ull == undefined
但是undefined != false
- 这也是值得一提的是,虽然
typeof null
回报'object',null
是不是一个对象,这是一个长期的错误/怪癖这是不固定的,以保持兼容性。它不是一个真正的对象,并且对象是真实的(document.all
当在HTML中实现Javascript时会发生“恶意违反” ) - NaN 不匹配任何东西,用
==
或===
,甚至没有自己
例如NaN != NaN
,NaN !== NaN
,NaN !
=false
,NaN != null
- 对于“严格相等”(
===
),没有这样的分组。只有false === false
。
这就是为什么许多开发人员和许多样式指南(例如standardjs)偏爱
===且几乎从不使用的原因之一
==。
真正的价值观 == false
“ Truthy”仅表示Javascript的内部
ToBoolean函数return
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)
-它们是真实的对象,但是==看到它们的值which == false
。0 .toExponential()
; -数值等于的对象 0- 任何类似的构造都会为你提供虚假的值,并包装在真实的类型中
[]
,[[]]
和[0]
(感谢cloudfeet对Javascript的平等表链接)
一些更真实的价值
这些只是一些人可能期望是虚假的价值观,但实际上是真实的。
-1
和所有非零负数' '
," "
,"false"
,'null'
… 所有非空字符串,包括只是空格串来自的任何内容typeof,总是返回非空字符串,例如:
typeof null
('object'
由于长期存在的错误/怪癖而返回字符串)typeof undefined
(返回一个字符串'undefined'
)任何对象(
document.all
浏览器中的“恶意违反”除外;请记住,null尽管有typeof其他建议,但这实际上不是对象)。包含:{}[]
function(){}或() => {}(任何功能,包括空功能)Error
以及Error
- 任何正则表达式
- 用
new
(包括new Number(0)
和new Boolean(false)
)创建的任何内容 - 任何符号
true,1,"1"
和[1]
回报true
相比彼此==
。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)