Heim Web-Frontend js-Tutorial Lassen Sie uns die Fallstricke der JS-Typkonvertierung besprechen

Lassen Sie uns die Fallstricke der JS-Typkonvertierung besprechen

Jan 23, 2017 pm 02:18 PM
js 类型转换

Warum sagst du das?
Eine Frage im Vorstellungsgespräch gab mir die Motivation, es zu sagen.
Die Frage lautet wie folgt:

var bool = new Boolean(false);
if (bool) {
    alert('true');
} else {
    alert('false');
}
Nach dem Login kopieren

Das Laufergebnis stimmt! ! !
Eigentlich sind Typkonvertierung und Operatorpriorität die grundlegendsten Dinge.
Eine ausführliche Einführung gibt es im Rhino-Buch. Aber ich habe die ersten fünf Kapitel des Rhino-Buches selten gelesen. . .
Zum Beispiel lehren uns viele Bücher in Bezug auf Prioritäten: „Es ist nicht nötig, sich die Prioritätsreihenfolge zu merken. Wenn Sie sich nicht sicher sind, fügen Sie einfach Klammern hinzu.“
Normalerweise machen wir das beim Schreiben von Code.
Aber was ist die Realität? Diese Art von Frage wird im Vorstellungsgespräch gestellt und Sie werden gebeten, diese zu beantworten. . .
Ich weiß wirklich nicht, was diese Frage bedeutet. . .
Die Beschwerden hören hier auf. Dieser Artikel versucht, das Typkonvertierungsproblem zu lösen und sich die Tabelle auf Seite 49 des „JS Definitive Guide“ zu merken.
Was sind die falschen Werte?
Insgesamt 6:

0或+0、-0,NaN
""
false
undefined
null
Nach dem Login kopieren

Die obige Reihenfolge ist nach den Grundtypen geordnet.
Nichts anderes! ! Auch wenn es in der folgenden Form vorliegt:

Infinity
'0'、'false'、" "(空格字符)
任何引用类型:[],{},function(){}
Nach dem Login kopieren

Der richtige Weg, if (a && b) zu verstehen, ist: a && b wertet den Ausdruck aus und wandelt ihn dann in den Booleschen Wert um Typ.
&& ist eine Kurzschlusssyntax. Nach der Auswertung ist es nicht unbedingt ein boolescher Typ und wird auch nicht auf beiden Seiten in boolesche Werte konvertiert und dann verarbeitet.
Zum Beispiel ist das Ergebnis von 2&&3 3, was nicht wahr ist.
Wenn also (a && b), was wir normalerweise verstehen, „wenn a und b gleichzeitig wahr sind“, ist eine falsche Art, es zu beschreiben.
Andere Grundtypen werden in Zeichenfolgen konvertiert , was im Grunde das Gleiche ist wie erwartet:

console.log("" + null);      // "null"
console.log("" + undefined); // "undefined"
console.log("" + false);     // "false"
console.log("" + true);      // "true"
console.log("" + 0);         // "0"
console.log("" + NaN);       // "NaN"
console.log("" + Infinity);  // "Infinity"
Nach dem Login kopieren

Andere Grundtypen werden in Zahlen konvertiert , was erforderlich ist Spezialspeicher:

console.log(+null);          // 0
console.log(+undefined);     // NaN
console.log(+false);         // 0
console.log(+true);          // 1
console.log(+"");            // 0
console.log(+'1');           // 1
console.log(+'1x');          // NaN
Nach dem Login kopieren

Wobei null das leere Zeichen 0 ist und undefiniert NaN ist.
Oben wird die grundlegende Typkonvertierung klar erläutert.

Sehen wir uns die Konvertierung von Referenztypen in Basistypen an.
Referenztyp in booleschen Wert konvertiert, immer wahr
Referenztyp in Zeichenfolge konvertiert

1.优先调用toString方法(如果有),看其返回结果是否是原始类型,如果是,转化为字符串,返回。
2.否则,调用valueOf方法(如果有),看其返回结果是否是原始类型,如果是,转化为字符串,返回。
3.其他报错。
Nach dem Login kopieren

Referenztyp in Zahl konvertiert

1.优先调用valueOf方法(如果有),看其返回结果是否是基本类型,如果是,转化为数字,返回。
2.否则,调用toString方法(如果有),看其返回结果是否是基本类型,如果是,转化为数字,返回。
3.其他报错。
Nach dem Login kopieren

Schauen wir uns zunächst an, was die gemeinsamen Referenztypen toString und valueOf zurückgeben.

var a = {};
console.dir(a.toString());   // "[object Object]"
console.dir(a.valueOf());    // 对象本身
 
var b = [1, 2, 3];
console.dir(b.toString());   // "1,2,3"
console.dir(b.valueOf());    // 对象本身
 
var c = [[1],[2]];
console.dir(c.toString());   // "1,2"
console.dir(c.valueOf());    // 对象本身
 
var d = function() {return 2};
console.dir(d.toString());   // "function() {return 2}"
console.dir(d.valueOf());    // 对象本身
Nach dem Login kopieren

Die entsprechende Konvertierung in Zeichenfolgen und Zahlen lautet also:

var a = {};
console.dir(a + "");         // "[object Object]"
console.dir(+a);             // NaN
 
var b = [1, 2, 3];
console.dir(b + "");         // "1,2,3"
console.dir(+b);             // NaN
 
var c = [[1],[2]];
console.dir(c + "");         // "1,2"
console.dir(+c);             // NaN
 
var d = function() {return 2};
console.dir(d + "");         // "function () {return 2}"
console.dir(+d);             // NaN
Nach dem Login kopieren

Eine weitere Fehlersituation:

var a = {};
a.toString = function() {return {};}
console.log("" + a);         // 报错
console.log(+a)              // 报错
Nach dem Login kopieren

Die oben genannten Typkonvertierungsregeln sind im Grunde genommen abgeschlossen.

Lassen Sie uns zum Schluss über das Böse sprechen „==“
Die Interviewfragen lauten wie folgt:

var a = false;
var b = undefined;
if (a == b) {
    alert('true');
} else {
    alert('false');
}
Nach dem Login kopieren

Ich dachte, dass „Wahr“ auftauchen würde. Oh mein Gott! Warum ist das falsch?
Haha. . .
Doppeltes Gleichheitszeichen. Wenn die Typen auf beiden Seiten unterschiedlich sind, erfolgt eine implizite Konvertierung. Rhino-Buchseite 75 fasst es wie folgt zusammen:

1,null和undefined,相等。
2,数字和字符串,转化为数字再比较。
3,如果有true或false,转换为1或0,再比较。
4,如果有引用类型,优先调用valueOf。
5,其余都不相等。
Nach dem Login kopieren

Daher gilt:

console.log(undefined == false); // false
console.log(null == false);      // false
console.log(0 == false);         // true
console.log(NaN == false);       // false
console.log("" == false);        // true
Nach dem Login kopieren

0 == false, was gemäß Klausel 3 wahr ist.
Der Grund, warum „“ == false gemäß Artikel 3 wahr ist, wird zu „“ == 0 und dann gemäß Artikel 2.
Ein weiteres Beispiel in Artikel 4:

console.log([[2]] == 2)
Nach dem Login kopieren

Das obige Ergebnis ist aus folgenden Gründen wahr:
[[2]]'s valueOf ist das Objekt selbst, nicht der Basistyp.
Das Ergebnis des Versuchs, toString aufzurufen, ist „2“.
So entsteht ein Vergleich zwischen „2“ und der Zahl 2. Gemäß Artikel 2 gleich. WTF!!
Schließlich werden diese Probleme durch die Verwendung von „===" beseitigt.
Dieser Artikel ist fertig.

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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Wesentliche Tools für die Aktienanalyse: Lernen Sie die Schritte zum Zeichnen von Kerzendiagrammen mit PHP und JS Wesentliche Tools für die Aktienanalyse: Lernen Sie die Schritte zum Zeichnen von Kerzendiagrammen mit PHP und JS Dec 17, 2023 pm 06:55 PM

Wesentliche Tools für die Aktienanalyse: Lernen Sie die Schritte zum Zeichnen von Kerzendiagrammen in PHP und JS. Mit der rasanten Entwicklung des Internets und der Technologie ist der Aktienhandel für viele Anleger zu einer wichtigen Möglichkeit geworden. Die Aktienanalyse ist ein wichtiger Teil der Anlegerentscheidung, und Kerzendiagramme werden häufig in der technischen Analyse verwendet. Wenn Sie lernen, wie man Kerzendiagramme mit PHP und JS zeichnet, erhalten Anleger intuitivere Informationen, die ihnen helfen, bessere Entscheidungen zu treffen. Ein Candlestick-Chart ist ein technischer Chart, der Aktienkurse in Form von Candlesticks anzeigt. Es zeigt den Aktienkurs

Empfohlen: Ausgezeichnetes JS-Open-Source-Projekt zur Gesichtserkennung und -erkennung Empfohlen: Ausgezeichnetes JS-Open-Source-Projekt zur Gesichtserkennung und -erkennung Apr 03, 2024 am 11:55 AM

Die Technologie zur Gesichtserkennung und -erkennung ist bereits eine relativ ausgereifte und weit verbreitete Technologie. Derzeit ist JS die am weitesten verbreitete Internetanwendungssprache. Die Implementierung der Gesichtserkennung und -erkennung im Web-Frontend hat im Vergleich zur Back-End-Gesichtserkennung Vor- und Nachteile. Zu den Vorteilen gehören die Reduzierung der Netzwerkinteraktion und die Echtzeiterkennung, was die Wartezeit des Benutzers erheblich verkürzt und das Benutzererlebnis verbessert. Die Nachteile sind: Es ist durch die Größe des Modells begrenzt und auch die Genauigkeit ist begrenzt. Wie implementiert man mit js die Gesichtserkennung im Web? Um die Gesichtserkennung im Web zu implementieren, müssen Sie mit verwandten Programmiersprachen und -technologien wie JavaScript, HTML, CSS, WebRTC usw. vertraut sein. Gleichzeitig müssen Sie auch relevante Technologien für Computer Vision und künstliche Intelligenz beherrschen. Dies ist aufgrund des Designs der Webseite erwähnenswert

PHP- und JS-Entwicklungstipps: Beherrschen Sie die Methode zum Zeichnen von Aktienkerzendiagrammen PHP- und JS-Entwicklungstipps: Beherrschen Sie die Methode zum Zeichnen von Aktienkerzendiagrammen Dec 18, 2023 pm 03:39 PM

Mit der rasanten Entwicklung der Internetfinanzierung sind Aktieninvestitionen für immer mehr Menschen zur Wahl geworden. Im Aktienhandel sind Kerzendiagramme eine häufig verwendete Methode der technischen Analyse. Sie können den sich ändernden Trend der Aktienkurse anzeigen und Anlegern helfen, genauere Entscheidungen zu treffen. In diesem Artikel werden die Entwicklungskompetenzen von PHP und JS vorgestellt, der Leser wird zum Verständnis des Zeichnens von Aktienkerzendiagrammen geführt und es werden spezifische Codebeispiele bereitgestellt. 1. Aktien-Kerzendiagramme verstehen Bevor wir uns mit dem Zeichnen von Aktien-Kerzendiagrammen befassen, müssen wir zunächst verstehen, was ein Kerzendiagramm ist. Candlestick-Charts wurden von den Japanern entwickelt

So erstellen Sie ein Aktien-Candlestick-Diagramm mit PHP und JS So erstellen Sie ein Aktien-Candlestick-Diagramm mit PHP und JS Dec 17, 2023 am 08:08 AM

So verwenden Sie PHP und JS zum Erstellen eines Aktienkerzendiagramms. Ein Aktienkerzendiagramm ist eine gängige technische Analysegrafik auf dem Aktienmarkt. Es hilft Anlegern, Aktien intuitiver zu verstehen, indem es Daten wie den Eröffnungskurs, den Schlusskurs, den Höchstkurs usw niedrigster Preis der Aktie. In diesem Artikel erfahren Sie anhand spezifischer Codebeispiele, wie Sie Aktienkerzendiagramme mit PHP und JS erstellen. 1. Vorbereitung Bevor wir beginnen, müssen wir die folgende Umgebung vorbereiten: 1. Ein Server, auf dem PHP 2. Ein Browser, der HTML5 und Canvas 3 unterstützt

Typkonvertierung der Golang-Funktion Typkonvertierung der Golang-Funktion Apr 19, 2024 pm 05:33 PM

Durch die Typkonvertierung innerhalb der Funktion können Daten eines Typs in einen anderen Typ konvertiert werden, wodurch die Funktionalität der Funktion erweitert wird. Verwenden Sie die Syntax: Typname:=Variable.(Typ). Sie können beispielsweise die Funktion strconv.Atoi verwenden, um eine Zeichenfolge in eine Zahl umzuwandeln und Fehler zu behandeln, wenn die Konvertierung fehlschlägt.

Implizite Typkonvertierung: Eine Untersuchung verschiedener Variationen von Typen und ihrer Anwendungen in der Programmierung Implizite Typkonvertierung: Eine Untersuchung verschiedener Variationen von Typen und ihrer Anwendungen in der Programmierung Jan 13, 2024 pm 02:54 PM

Entdecken Sie die verschiedenen Arten impliziter Typkonvertierungen und ihre Rolle bei der Programmierung. Einführung: Bei der Programmierung müssen wir häufig mit verschiedenen Datentypen umgehen. Manchmal müssen wir einen Datentyp in einen anderen Typ konvertieren, um eine bestimmte Operation auszuführen oder bestimmte Anforderungen zu erfüllen. In diesem Prozess ist die implizite Typkonvertierung ein sehr wichtiges Konzept. Unter impliziter Typkonvertierung versteht man den Prozess, bei dem die Programmiersprache automatisch eine Datentypkonvertierung durchführt, ohne den Konvertierungstyp explizit anzugeben. In diesem Artikel werden die verschiedenen Arten impliziter Typkonvertierungen und ihre Rolle bei der Programmierung untersucht.

Die Beziehung zwischen js und vue Die Beziehung zwischen js und vue Mar 11, 2024 pm 05:21 PM

Die Beziehung zwischen js und vue: 1. JS als Eckpfeiler der Webentwicklung; 2. Der Aufstieg von Vue.js als Front-End-Framework; 3. Die komplementäre Beziehung zwischen JS und Vue; Vue.

Die KI-Ära von JS ist da! Die KI-Ära von JS ist da! Apr 08, 2024 am 09:10 AM

Einführung in JS-Torch JS-Torch ist eine Deep-Learning-JavaScript-Bibliothek, deren Syntax PyTorch sehr ähnlich ist. Es enthält ein voll funktionsfähiges Tensorobjekt (kann mit verfolgten Farbverläufen verwendet werden), Deep-Learning-Ebenen und -Funktionen sowie eine automatische Differenzierungs-Engine. JS-Torch eignet sich für die Deep-Learning-Forschung in JavaScript und bietet viele praktische Tools und Funktionen zur Beschleunigung der Deep-Learning-Entwicklung. Image PyTorch ist ein Open-Source-Deep-Learning-Framework, das vom Meta-Forschungsteam entwickelt und gepflegt wird. Es bietet einen umfangreichen Satz an Tools und Bibliotheken zum Erstellen und Trainieren neuronaler Netzwerkmodelle. PyTorch ist einfach, flexibel und benutzerfreundlich konzipiert und verfügt über dynamische Berechnungsdiagrammfunktionen

See all articles