Inhaltsverzeichnis
Fremde Dinge
Wenn eine Zahl zu einer Zeichenfolge wird
Was bedeutet [Objekt Objekt] in JavaScript?
等于还是不等于?
Heim Web-Frontend js-Tutorial Einführung in die erzwungene Typkonvertierung in JavaScript

Einführung in die erzwungene Typkonvertierung in JavaScript

Apr 12, 2019 am 10:55 AM
javascript 前端 类型转换

Dieser Artikel bietet Ihnen eine Einführung in die Methode der erzwungenen Typkonvertierung in JavaScript. Ich hoffe, dass er für Freunde hilfreich ist.

JavaScript-Grundelemente

JavaScript basiert auf einer Reihe von Grundeinheiten. Einige davon sollten Ihnen bereits bekannt sein, wie zum Beispiel Zeichenfolgen und Zahlen:

var greet = "Hello";
var year = 89;
Nach dem Login kopieren
Nach dem Login kopieren

Zeichenfolgen und Zahlen gehören zu den sogenannten „Primitiven“ der Sprache. Die vollständige Liste lautet:

  • String
  • Zahl
  • Boolescher Wert
  • Null
  • Undefiniertes
  • Objekt
  • Symbol (in ES6 hinzugefügt, hier nicht eingeführt)

Boolesche Werte werden verwendet, um Werte darzustellen, die wahr oder falsch sein können. null wird absichtlich nicht einer Variablen zugewiesen, um anzuzeigen, dass die Bindung abgeschlossen ist und später mit aussagekräftigem Inhalt gefüllt wird.

var maybe = null;
Nach dem Login kopieren

und dann undefiniert, was bedeutet, dass die Variable immer noch nicht angehängt ist:

var name;
console.log(name)
undefined
Nach dem Login kopieren

null und undefiniert sehen sehr ähnlich aus, aber es handelt sich um zwei völlig unterschiedliche Dinge, viele Entitäten Entwickler sind sich immer noch nicht sicher, welches sie verwenden sollen.

Wenn Sie den Typ einer JavaScript-Instanz bestimmen möchten, können Sie den Operator typeof verwenden. Versuchen wir es mit Zeichenfolgen:

typeof "alex"
> "string"
Nach dem Login kopieren

und Zahlen:

typeof 9
> "number"
Nach dem Login kopieren

Für Boolesche Werte:

typeof false
> "boolean"
Nach dem Login kopieren

undefiniert:

typeof undefined
> "undefined"
Nach dem Login kopieren

und null:

typeof null
> "object"
Nach dem Login kopieren

Die Ergebnisse sind überraschend! null sieht aus wie ein Objekt, ist aber tatsächlich ein historischer Fehler in JavaScript, der seit der Geburt der Sprache vorhanden ist. JavaScript hat aufgrund dieser Probleme einen schlechten Ruf bekommen. Aber das ist erst der Anfang.

Fremde Dinge

In JavaScript gibt es einige seltsame Regeln beim Konvertieren zwischen zwei Typen. Lassen Sie mich Ihnen einige Hintergrundinformationen geben. Lassen Sie uns zunächst ein Beispiel mit Python geben. Wenn Sie den folgenden Befehl in Python ausführen:

'hello' + 89
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

, erhalten Sie einen eindeutigen Fehler:

TypeError: can only concatenate str (**not** "int") to str
Nach dem Login kopieren

In JavaScript sind keine Grenzen gesetzt:

'hello' + 89
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Oben angegebene Fakten:

"hello89"
Nach dem Login kopieren
Nach dem Login kopieren

Wenn wir versuchen, dem String ein Array hinzuzufügen, sieht es noch seltsamer aus:

'hello' + []
Nach dem Login kopieren

erhält

1. 'hello'
Nach dem Login kopieren

und

1. 'hello' + [89]
Nach dem Login kopieren

Hier ist eine Überraschung für Sie:

1. "hello89"
Nach dem Login kopieren

Sieht so aus, als ob hinter diesem Wechsel eine gewisse Logik steckt. Es funktioniert sogar für Arrays, in denen es mehr Elemente gibt:

1. 'hello' + [89, 150.156, 'mike']
Nach dem Login kopieren

Get:

1. "hello89,150.156,mike"
Nach dem Login kopieren

Diese beiden Zeilen JavaScript reichen aus, um Java-Programmierer in die Flucht zu schlagen. Aber dieses Verhalten macht in JavaScript zu 100 % Sinn . Daher ist diese implizite Konvertierung, auch bekannt als Cast , eine Erkundung wert.

Wenn eine Zahl zu einer Zeichenfolge wird

Einige Programmiersprachen haben ein Konzept namens Typkonvertierung, was bedeutet: Wenn ich eine Zahl oder Instanz in eine andere konvertieren möchte Typ, dann muss ich explizit in konvertieren. Es funktioniert auch mit JavaScript. Siehe das folgende Beispiel:

var greet = "Hello";
var year = 89;
Nach dem Login kopieren
Nach dem Login kopieren

Wenn ich explizit konvertieren möchte, kann ich die Absicht im Code angeben:

var greet = "Hello";
var year = 89;

var yearString = year.toString()
Nach dem Login kopieren

Oder tun Sie dies:

var greet = "Hello";
var year = 89;

var yearString = String(year)
Nach dem Login kopieren

Dann kann ich verketten die beiden Variablen:

greet + yearString;
Nach dem Login kopieren

Aber in JavaScript gibt es einen subtilen Mechanismus namens implizite Konvertierung, der von der JavaScript-Engine bereitgestellt wird. Die Sprache hindert uns nicht daran, Zahlen und Zeichenfolgen hinzuzufügen:

'hello' + 89
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

würde erhalten:

"hello89"
Nach dem Login kopieren
Nach dem Login kopieren

Aber was ist die Logik hinter dieser Konvertierung? Sie werden vielleicht überrascht sein zu erfahren, dass der Additionsoperator in JavaScript + automatisch einen seiner beiden Operanden in eine Zeichenfolge konvertiert, wenn mindestens einer von ihnen eine Zeichenfolge ist!

Was Sie noch überraschender finden werden, ist, dass diese Regel in der ECMAScript-Spezifikation konsistent ist. Abschnitt 11.6.1 definiert das Verhalten des Additionsoperators. Ich habe es hier für Sie zusammengefasst:

Wenn x ein String oder y ein String ist, geben Sie ToString(x) und dann ToString(y) zurück.

Funktioniert dieser Trick nur mit Zahlen? Nicht wirklich. Arrays und Objekte durchlaufen ebenfalls die gleiche Konvertierung :

'hello' + [89, 150.156, 'mike']
Nach dem Login kopieren

erhalten:

"hello89,150.156,mike"
Nach dem Login kopieren

Was erhält also der folgende Code:

'hello' + { name: "Jacopo" }
Nach dem Login kopieren

Zu finden Wenn Sie dies herausfinden, können Sie einen schnellen Test durchführen, indem Sie das Objekt in einen String konvertieren:

String({ name: "Jacopo" })
Nach dem Login kopieren

wird Folgendes erhalten:

"[object Object]"
Nach dem Login kopieren

Ich habe also das Gefühl:

1. 'hello' + { name: "Jacopo" }
Nach dem Login kopieren

wird Folgendes erhalten:

1. "hello[object Object]"
Nach dem Login kopieren

Hör auf damit! Was ist das?

Was bedeutet [Objekt Objekt] in JavaScript?

„[object Object]“ ist eine der häufigsten JavaScript-„Macken“.

Fast jede JavaScript-Instanz hat eine Methode namens toString(), und einige Methoden werden von Object.prototype.toString bereitgestellt.
Einige Typen, wie z. B. Arrays, implementieren eine benutzerdefinierte Version von toString(), um den Wert beim Aufruf der Methode in eine Zeichenfolge umzuwandeln. Beispielsweise überschreibt Array.prototype.toString Object.toString() (auch bekannt als Methodenschatten).

但是当你在普通的 JavaScript 对象上调用 toString() 时,引擎会给出“[object Object]”,因为 Object.toString()默认行为是由实体类型(在这种情况下为Object)返回字符串 object

现在让我们把注意力集中在 JavaScript 比较运算符上,它们与算术运算符一样奇怪。

等于还是不等于?

JavaScript 中有两个主要的比较运算符。

第一个我们称之为“弱比较”。这是抽象比较运算符(双等号):==

另一个是“强比较”,可以通过三等号进行识别:=== 也称为严格比较运算符。它们两者的行为方式完全不同。

来看一些例子。首先,如果我们将两个字符串与两个运算符进行比较,我们得到相同的结果

"hello" == "hello"
> true

"hello" === "hello"
> true
Nach dem Login kopieren

看上去一切都还好。

现在尝试比较两种不同的类型,数字和字符串。首先是“强比较”:

1. "1" === 1
2. false
Nach dem Login kopieren

这说得通!字符串“1”与数字1是不同的。但是“弱比较”会发生什么?

1. "1" == 1
2. true
Nach dem Login kopieren

居然是true!它没有任何意义,除非这种行为与我们之前看到的隐式转换有关。

如果适用相同的规则怎么办?没错! ECMAScript spec 再次罢工。结果抽象比较运算符在比较它们之前在类型之间进行自动转换。这是规范的摘要:

比较 x == y 执行如下:

如果 x 是 String 且 y 是Number,则返回比较结果 ToNumber(x)== y

规范说:如果第一个操作数是一个字符串,第二个操作数是一个数字,那么将第一个操作数转换为数字。有趣。

JavaScript 规范充满了这个疯狂的规则,我强烈鼓励大家对它深入挖掘。

在此期间除非你有充分的理由否则在 JavaScript 代码中避免使用抽象比较运算符。你以后会感谢自己的。

那么“强势比较”怎么样?规范中的说 严格相等比较在把值与三等 === 进行比较之前没有进行自动转换。在代码中使用严格相等比较可以避免愚蠢的 bug。

总结

JavaScript 中有七个构建块,即 StringNumberBooleanNullUndefinedObjectSymbol。这些类型被称为基元

JavaScript 开发人员可以使用算术和比较运算符来操作这些类型。但是我们要特别注意加法运算符 +抽象比较运算符 ==,它本质上倾向于在类型之间进行转换。

JavaScript 中的隐式转换称为强制类型转换,并在 ECMAScript 规范中定义。无论什么时候你的代码都要使用严格的比较运算符 === 而不是 ==

作为最佳实践,当你打算在两种类型之间进行转换时,请务必明确操作。JavaScript 有一堆内置对象,它们反映了原始类型:StringNumberBoolean。这些内置类型可用于在不同类型之间进行显式转换。

Das obige ist der detaillierte Inhalt vonEinführung in die erzwungene Typkonvertierung in JavaScript. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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)
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
1 Monate 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)

PHP und Vue: eine perfekte Kombination von Front-End-Entwicklungstools PHP und Vue: eine perfekte Kombination von Front-End-Entwicklungstools Mar 16, 2024 pm 12:09 PM

PHP und Vue: eine perfekte Kombination von Front-End-Entwicklungstools In der heutigen Zeit der rasanten Entwicklung des Internets ist die Front-End-Entwicklung immer wichtiger geworden. Da Benutzer immer höhere Anforderungen an das Erlebnis von Websites und Anwendungen stellen, müssen Frontend-Entwickler effizientere und flexiblere Tools verwenden, um reaktionsfähige und interaktive Schnittstellen zu erstellen. Als zwei wichtige Technologien im Bereich der Front-End-Entwicklung können PHP und Vue.js in Kombination als perfekte Waffe bezeichnet werden. In diesem Artikel geht es um die Kombination von PHP und Vue sowie um detaillierte Codebeispiele, die den Lesern helfen sollen, diese beiden besser zu verstehen und anzuwenden

Häufig gestellte Fragen von Front-End-Interviewern Häufig gestellte Fragen von Front-End-Interviewern Mar 19, 2024 pm 02:24 PM

In Front-End-Entwicklungsinterviews decken häufige Fragen ein breites Themenspektrum ab, darunter HTML/CSS-Grundlagen, JavaScript-Grundlagen, Frameworks und Bibliotheken, Projekterfahrung, Algorithmen und Datenstrukturen, Leistungsoptimierung, domänenübergreifende Anfragen, Front-End-Engineering, Designmuster sowie neue Technologien und Trends. Interviewerfragen sollen die technischen Fähigkeiten, die Projekterfahrung und das Verständnis des Kandidaten für Branchentrends beurteilen. Daher sollten Kandidaten in diesen Bereichen umfassend vorbereitet sein, um ihre Fähigkeiten und Fachkenntnisse unter Beweis zu stellen.

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.

Einfaches JavaScript-Tutorial: So erhalten Sie den HTTP-Statuscode Einfaches JavaScript-Tutorial: So erhalten Sie den HTTP-Statuscode Jan 05, 2024 pm 06:08 PM

JavaScript-Tutorial: So erhalten Sie HTTP-Statuscode. Es sind spezifische Codebeispiele erforderlich. Vorwort: Bei der Webentwicklung ist häufig die Dateninteraktion mit dem Server erforderlich. Bei der Kommunikation mit dem Server müssen wir häufig den zurückgegebenen HTTP-Statuscode abrufen, um festzustellen, ob der Vorgang erfolgreich ist, und die entsprechende Verarbeitung basierend auf verschiedenen Statuscodes durchführen. In diesem Artikel erfahren Sie, wie Sie mit JavaScript HTTP-Statuscodes abrufen und einige praktische Codebeispiele bereitstellen. Verwenden von XMLHttpRequest

Ist Django Front-End oder Back-End? Hör zu! Ist Django Front-End oder Back-End? Hör zu! Jan 19, 2024 am 08:37 AM

Django ist ein in Python geschriebenes Webanwendungs-Framework, das Wert auf schnelle Entwicklung und saubere Methoden legt. Obwohl Django ein Web-Framework ist, müssen Sie zur Beantwortung der Frage, ob Django ein Front-End oder ein Back-End ist, ein tiefes Verständnis der Konzepte von Front-End und Back-End haben. Das Front-End bezieht sich auf die Schnittstelle, mit der Benutzer direkt interagieren, und das Back-End bezieht sich auf serverseitige Programme. Sie interagieren mit Daten über das HTTP-Protokoll. Wenn das Front-End und das Back-End getrennt sind, können die Front-End- und Back-End-Programme unabhängig voneinander entwickelt werden, um Geschäftslogik bzw. interaktive Effekte sowie den Datenaustausch zu implementieren.

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.

Erkundung der Front-End-Technologie der Go-Sprache: eine neue Vision für die Front-End-Entwicklung Erkundung der Front-End-Technologie der Go-Sprache: eine neue Vision für die Front-End-Entwicklung Mar 28, 2024 pm 01:06 PM

Als schnelle und effiziente Programmiersprache erfreut sich Go im Bereich der Backend-Entwicklung großer Beliebtheit. Allerdings assoziieren nur wenige Menschen die Go-Sprache mit der Front-End-Entwicklung. Tatsächlich kann die Verwendung der Go-Sprache für die Front-End-Entwicklung nicht nur die Effizienz verbessern, sondern Entwicklern auch neue Horizonte eröffnen. In diesem Artikel wird die Möglichkeit der Verwendung der Go-Sprache für die Front-End-Entwicklung untersucht und spezifische Codebeispiele bereitgestellt, um den Lesern ein besseres Verständnis dieses Bereichs zu erleichtern. In der traditionellen Frontend-Entwicklung werden häufig JavaScript, HTML und CSS zum Erstellen von Benutzeroberflächen verwendet

Kombination von Golang- und Front-End-Technologie: Entdecken Sie, welche Rolle Golang im Front-End-Bereich spielt Kombination von Golang- und Front-End-Technologie: Entdecken Sie, welche Rolle Golang im Front-End-Bereich spielt Mar 19, 2024 pm 06:15 PM

Kombination von Golang und Front-End-Technologie: Um zu untersuchen, welche Rolle Golang im Front-End-Bereich spielt, sind spezifische Codebeispiele erforderlich. Mit der rasanten Entwicklung des Internets und mobiler Anwendungen ist die Front-End-Technologie immer wichtiger geworden. Auch in diesem Bereich kann Golang als leistungsstarke Back-End-Programmiersprache eine wichtige Rolle spielen. In diesem Artikel wird untersucht, wie Golang mit Front-End-Technologie kombiniert wird, und sein Potenzial im Front-End-Bereich anhand spezifischer Codebeispiele demonstriert. Die Rolle von Golang im Front-End-Bereich ist effizient, prägnant und leicht zu erlernen

See all articles