Heim > Web-Frontend > Front-End-Fragen und Antworten > Welcher Wert ist in JavaScript falsch?

Welcher Wert ist in JavaScript falsch?

青灯夜游
Freigeben: 2021-07-22 09:52:09
Original
2743 Leute haben es durchsucht

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.

Welcher Wert ist in JavaScript falsch?

Die Betriebsumgebung dieses Tutorials: Windows 7-System, JavaScript-Version 1.8.5, Dell G3-Computer.

Falsche Werte in JavaScript

  • falsefalse
  • 0和其他形式的数字等的零-0+00.00x0(信贷RBT为十六进制形式)
    - `”“,’‘ 和 ```-长度的字符串0
  • null
  • undefined
  • NaN
  • 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 falseToBooleanunderlies !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==
  • 例如,null == undefined但是undefined != false
  • 这也是值得一提的是,虽然typeof null回报'object',null是不是一个对象,这是一个长期的错误/怪癖这是不固定的,以保持兼容性。它不是一个真正的对象,并且对象是真实的(document.all当在HTML中实现Javascript时会发生“恶意违反” )
  • NaN 不匹配任何东西,用=====,甚至没有自己
    例如NaN != NaNNaN !== NaNNaN != falseNaN != 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)
- „“,“ und „ `` – String der Länge 0

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? Details
„Falsey“ bedeutet einfach, dass die interne ToBoolean-Funktion von JavaScript false zurückgibt. ToBooleanliegt !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)
🎜🎜🎜🎜🎜🎜 vs. == (lose Gleichheit) 🎜🎜🎜🎜 Erwähnenswert ist der lose Vergleich von falschen Werten vs. == 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 = = "",'' == 0Daher 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 selbst
Zum Beispiel NaN != 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'
… Alle nicht leeren Zeichenfolgen, einschließlich nur Leerzeichenzeichenfolgen

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 Symbol
true, 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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage