Fallstricke im impliziten Front-End-Test-JS-Konvertierungsproblem
hzc
Freigeben: 2020-06-17 10:00:32
nach vorne
2009 Leute haben es durchsucht
Wenn wir schriftliche Testfragen schreiben, stoßen wir häufig auf Fragen mit impliziten Konvertierungen, wie z. B.
"1" + 2
obj + 1
[] == ![]
[null] == false
Nach dem Login kopieren
=== und ==
=== werden als strenge Operatoren und Objekte bezeichnet Der Typ zeigt auf die gleiche Adresse oder den gleichen ursprünglichen Typwert (numerischer Wert, Zeichenfolge, boolescher Wert); wird als Gleichheitsoperator bezeichnet. Wenn undefiniert und null gleich sind, wird der Objekttyp immer noch verwendet verglichen und referenziert werden. Der ==-Operator behandelt den ursprünglichen Wert und sein umschlossenes Objekt als gleich, der ==-Operator behandelt sie jedoch als ungleich.
Alle obj.a==null (entspricht ===). obj.a=== null || obj.a ===undefined
Der Gleichheitsoperator ist eine Falle, die in JS häufig zu einer impliziten Konvertierung führt. In der realen Entwicklung ist jedoch die Verwendung strenger Operatoren erforderlich. Aber es ist immer noch notwendig, es zu verstehen. Wenn Sie die implizite JS-Konvertierung verstehen möchten, müssen Sie zunächst mit drei Wissenspunkten beginnen. Primitive TypenPrimitive Typen (Basistypen, primitive Datentypen, primitive Datentypen) sind Daten, die weder Objekte noch Methoden sind. In JavaScript gibt es 7 Typen:
falscher Wert (virtueller Wert)falscher Wert (virtueller Wert) ist ein Wert, der in einem booleschen Kontext als falsch erkannt wird. Es gibt nur
sieben falsche Werte JavaScript.
false false Schlüsselwort
0 Wert Null
0n Wenn BigInt als boolescher Wert verwendet wird, befolgen Sie seine Regeln, da ein numerischer Wert 0n ist .
Eine leere Zeichenfolge (die Länge der Zeichenfolge ist Null). Zeichenfolgen können in JavaScript mit doppelten Anführungszeichen „“, einfachen Anführungszeichen „“ oder Vorlagenliteralen „“ definiert werden.
null null – fehlender Wert
undefiniert undefiniert – ursprünglicher Wert
NaN NaN – nicht numerischer Wert
Insbesondere, außer diesem Alle Sieben Objekte haben wahre Werte, z. B. neue Zahl und neuer boolescher Wert.
let b = new Boolean(false);i
f(b){
//会执行到这里。
}
Nach dem Login kopieren
Vier wichtige Konvertierungsregeln
toString-Regel: Operationen zum Konvertieren anderer Wertetypen in String-Typen
null => "null"
undefiniert => "undefiniert"
true => "true" false=>"false"
10 = > "10" "1e21"=>"1e+21"
[1,2,3] => "1,2,3"
Objekt object=> ; „[Object Object]“ ruft tatsächlich die toString-Methode auf
ToPrimitive-Regel: die Operation zum Konvertieren eines Objekttyp-Arrays in einen primitiven Typ
Wenn der Objekttyp in einen primitiven Typ konvertiert werden muss, wird zunächst die valueOf-Methode des Objekts nachgeschlagen. Wenn die valueOf-Methode einen Wert des ursprünglichen Typs zurückgibt, lautet das Ergebnis von ToPrimitive dieser Wert
Wenn valueOf nicht existiert oder wenn die valueOf-Methode einen Wert zurückgibt, der kein primitiver Typ ist, versucht sie, die toString-Methode des Objekts aufzurufen, was bedeutet, dass sie den ToString-Regeln des Objekts folgt und dann Verwenden Sie den Rückgabewert von toString als Ergebnis von ToPrimitive
Datum ist zuerst toString und dann ValueOf
Wenn der ursprüngliche Typ nach toString und ValueOf nicht erhalten werden kann, wird er bei der Beurteilung der Gleichheit geworfen. Addition und Subtraktion
Uncaught TypeError: Cannot convert object to primitive value
ToNumber-Regel
null=>undefiniert => NaN
"123"=>123 "12ssd"=>NaN ""=>0
false => 0 true=>1
Array, Objekt ToPrimitive
ToBoolean-Regeln
Die sieben falschen Werte (virtuelle Werte) in js sind falsch und die anderen sind wahr
Implizite Konvertierung
Mit dem Verständnis der oben genannten Wissenspunkte können wir die implizite JS-Konvertierung auf einen Schlag erledigen Sturzflug.
Das obige ist der detaillierte Inhalt vonFallstricke im impliziten Front-End-Test-JS-Konvertierungsproblem. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen 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