In JavaScript falsch, 0 und andere Formen von Zahlen usw. Null („-0“, „+0“, „0.0“ und „0x0“), null, undefiniert, NaN, „document.all“, „ []“, „{}“, „“““ (leere Zeichenfolge) und andere Werte sind alle falsche Werte.
Die Betriebsumgebung dieses Tutorials: Windows 7-System, JavaScript-Version 1.8.5, Dell G3-Computer.
Falsche Werte in JavaScript
false
false
0
和其他形式的数字等的零-0
、+0
、0.0
和0x0
(信贷RBT为十六进制形式)document.all (仅在HTML浏览器中)这是一个奇怪的。document.all
是一个假对象,带有typeof
as undefined
。它是IE11之前的IE中的Microsoft专有功能,并作为“蓄意违反JavaScript规范”而添加到HTML规范中,因此为IE编写的网站在尝试访问时不会中断document.all.something。这是虚假的,因为它if (document.all)
曾经是在条件注释之前检测IE的流行方法。请参阅为什么document.all
虚假?详情
“ Falsey”仅表示JavaScript的内部ToBoolean
函数return false
。 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
与==
ull == undefined
但是undefined != false
typeof null
回报'object',null
是不是一个对象,这是一个长期的错误/怪癖这是不固定的,以保持兼容性。它不是一个真正的对象,并且对象是真实的(document.all
当在HTML中实现Javascript时会发生“恶意违反” )==
或===
,甚至没有自己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]
0
und andere Formen von Zahlen usw. Null -0
, +0
, 0.0
und 0x0
(Credit RBT in hexadezimaler Form)nullundefiniert
NaN
🎜🎜document.all (nur in HTML-Browsern) Das ist seltsam.document.all
ist ein gefälschtes Objekt mit typeof
als undefiniert
. Es war eine von Microsoft proprietäre Funktion im IE vor IE11 und wurde der HTML-Spezifikation als „absichtlicher Verstoß gegen die JavaScript-Spezifikation“ hinzugefügt, damit für den IE geschriebene Websites beim Versuch, darauf zuzugreifen, document.all.something nicht beschädigen. Das ist falsch, denn if (document.all)
war früher eine beliebte Methode zur Erkennung bedingter Kommentare vor dem IE. Siehe Warum document.all
falsch ist? DetailsToBoolean
-Funktion von JavaScript false
zurückgibt. ToBoolean
liegt !value, value? ...
: ...; Hier ist die offizielle Spezifikation (Arbeitsentwurf 2018) (die einzige Änderung seit der ersten ECMAscript-Spezifikation im Jahr 1997 ist die Hinzufügung der ES6-Symbole, die immer wahr waren): 🎜🎜🎜🎜[]🎜🎜🎜🎜{} 🎜🎜🎜 🎜"" (leerer String)== code>, der <code>ToNumber()
verwendet und aufgrund möglicher Unterschiede zu Verwirrung führen kann. Sie sind effektiv in drei Kategorien unterteilt: 🎜🎜🎜false, 0, -0, "", ''
stimmen überein ==
🎜🎜 z.B. false = = ""
,'' == 0
Daher 4/2 - 2 == 'some string'.slice(11)
;🎜🎜 null , undefiniert
und ==
🎜🎜Zum Beispiel: null == undefiniert
aber undefiniert != falsch
🎜🎜Das ist Erwähnenswert ist auch, dass, obwohl typeof null
'object' zurückgibt, null
kein Objekt ist, dies ein seit langem bestehender Fehler/eine Eigenart ist, der aus Kompatibilitätsgründen nicht behoben wird . Es handelt sich nicht um ein reales Objekt, und Objekte sind real (document.all
„böswillige Verstöße“ treten auf, wenn Javascript in HTML implementiert wird) 🎜🎜NaN stimmt mit nichts überein, verwenden Sie = =
oder ===
, auch ohne sich selbstNaN != NaN
, NaN !== NaN
, NaN !
= false
, NaN != null
🎜🎜Für „strenge Gleichheit“ (===
) gibt es keine solche Gruppierung. Nur false === false
. 🎜🎜🎜Dies ist einer der Gründe, warum viele Entwickler und viele Styleguides (z. B. StandardJS) ===
bevorzugen und ==
fast nie verwenden. 🎜🎜🎜🎜True Value == false🎜🎜🎜🎜 „Truthy“ bedeutet einfach, dass die interne ToBoolean
-Funktion von JavaScript true
zurückgibt. Das muss man bei einer Javascript-Anwendung wissen (und ein weiterer guter Grund, ===
gegenüber ==
vorzuziehen): Es ist möglich, dass der Wert wahr ist (ToBoolean
gibt true zurück) und auch == false
. 🎜🎜Sie denken vielleicht, dass if (value && value == false) warning('Huh?')
eine logische Möglichkeit ist, die nicht eintreten kann, aber in der folgenden Situation ist Folgendes möglich: 🎜 🎜🎜"0"
und '0'
– es handelt sich um nicht leere Zeichenfolgen, was richtig ist, aber Javascript wird == Zahlen mit äquivalenten Zeichenfolgen abgleichen (z. B. 42 == "42"
). Weil 0 == false
, wenn "0" == 0
, "0" == false
. 🎜🎜new Number(0)
und new Boolean(false)
– sie sind echte Objekte, aber == siehe ihre Werte which == false. 🎜🎜<code>0 .toExponential()
– ein Objekt mit einem Wert gleich 0🎜🎜Jedes ähnliche Konstrukt gibt Ihnen einen falschen Wert, verpackt in einen echten Typ🎜🎜[], <code>[[]]
und [0]
(Danke an cloudfeet für den Link zur JavaScript-Gleichheitstabelle) 🎜🎜🎜🎜🎜Einige weitere reale Werte 🎜🎜🎜 🎜 Dabei handelt es sich lediglich um Werte, von denen manche vielleicht annehmen, dass sie falsch sind, die aber tatsächlich wahr sind. 🎜-1
und alle negativen Zahlen ungleich Null -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
相比彼此==
' '
, " "
, "false"
, 'null'alles, was von typeof kommt, gibt immer eine nicht leere Zeichenfolge zurück, zum Beispiel:
🎜🎜typeof null code> (<code>'object'
gibt eine Zeichenfolge aufgrund eines seit langem bestehenden Fehlers/einer Eigenart zurück) 🎜🎜🎜typeof undefiniert
(gibt eine Zeichenfolge 'undefiniert' zurück) code>) 🎜🎜🎜 Jedes Objekt (außer „böswillige Verstöße“ in <code>document.all
-Browsern; denken Sie daran, dass null eigentlich kein Objekt ist, trotz anderer Vorschläge für typeof). Enthält: 🎜🎜🎜🎜{}
🎜🎜🎜[]
🎜🎜function(){}
oder () => {}
(jede Funktion, einschließlich leerer Funktionen) 🎜🎜Error
und Error
🎜🎜Jeder reguläre Ausdruck🎜🎜Verwenden Sie new
( Einschließlich new Number(0)
und new Boolean(false)
) Erstellen Sie alles 🎜🎜Jedes Symboltrue, 1, "1"
und [1]
geben im Vergleich zueinander true
zurück ==
. 🎜🎜🎜【Empfohlenes Lernen: 🎜Javascript-Tutorial für Fortgeschrittene🎜】🎜Das obige ist der detaillierte Inhalt vonWelcher Wert ist in JavaScript falsch?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!