Heim  >  Artikel  >  Web-Frontend  >  Beispiel für eine Javascript-Typkonvertierungsregel: Analyse_Javascript-Kenntnisse

Beispiel für eine Javascript-Typkonvertierungsregel: Analyse_Javascript-Kenntnisse

WBOY
WBOYOriginal
2016-05-16 15:13:581167Durchsuche

Typkonvertierung kann in implizite Konvertierung und explizite Konvertierung unterteilt werden. Die sogenannte implizite Konvertierung ist die vom Programm zur Laufzeit durchgeführte automatische Konvertierung, während die explizite Konvertierung die künstliche erzwungene Konvertierung des Typs ist. Javascript-Variablen sind lose typisiert und können jeden von Javascript unterstützten Datentyp speichern. Der Typ seiner Variablen kann zur Laufzeit dynamisch geändert werden. Bitte beachten Sie die Anweisungen

Beispiel:

var n = 10;
n = "hello CSSer!";
n = {};

Deklarieren Sie im obigen Beispiel zuerst die Variable n und initialisieren Sie ihren Wert auf 10 (ganzzahliger Typ), weisen Sie dann n die Zeichenfolge „Hallo CSSer!“ zu, weisen Sie ihr dann ein Objekt zu und schließlich ist der Typ von n ein Objekttyp. Es ist ersichtlich, dass der Typ der Variablen n dynamisch ist. Bei der tatsächlichen Programmierung empfehlen wir, den Typ der Variablen nicht häufig zu ändern, da dies für das Debuggen nicht gut ist.

Da Variablentypen in Javascript dynamisch sind, muss das Konzept der Typkonvertierung während der tatsächlichen Ausführung des Programms verwendet werden. Die Typkonvertierung kann in implizite Konvertierung und explizite Konvertierung unterteilt werden. Die sogenannte implizite Konvertierung ist die vom Programm zur Laufzeit durchgeführte automatische Konvertierung, während die explizite Konvertierung die künstliche erzwungene Konvertierung des Typs ist. In diesem Artikel wird die Konvertierung des Javascript-Typs zusammengefasst.

Explizite Konvertierung

Durch die manuelle Typkonvertierung stellt Javascript die folgenden Transformationsfunktionen bereit:

In numerischen Typ konvertieren: Number(mix), parseInt(string,radix), parseFloat(string)
In String-Typ konvertieren: toString(radix), String(mix)
In booleschen Typ konvertieren: Boolean(mix)

1. Die Funktion „Number(mix)“ kann jede Art von Parametermischung in einen numerischen Typ umwandeln. Die Regeln sind:

1. Wenn es sich um einen booleschen Wert handelt, werden wahr und falsch in 1 bzw. 0 umgewandelt

2. Wenn es sich um einen numerischen Wert handelt, wird er selbst zurückgegeben.

3. Wenn es null ist, geben Sie 0 zurück.

4. Wenn es undefiniert ist, geben Sie NaN zurück.

5. Wenn es sich um eine Zeichenfolge handelt, befolgen Sie die folgenden Regeln:

6.

1. Wenn die Zeichenfolge nur Zahlen enthält, konvertieren Sie sie in eine Dezimalzahl (ohne Berücksichtigung der führenden 0)

2. Wenn die Zeichenfolge ein gültiges Gleitkommaformat enthält, konvertieren Sie sie in einen Gleitkommawert (ohne führende Nullen)

3. Wenn es sich um eine leere Zeichenfolge handelt, konvertieren Sie sie in 0

4. Wenn die Zeichenfolge ein anderes als das oben genannte Format enthält, konvertieren Sie sie in NaN

7. Wenn es sich um ein Objekt handelt, rufen Sie die Methode valueOf() des Objekts auf und konvertieren Sie dann den zurückgegebenen Wert gemäß den vorherigen Regeln. Wenn das Ergebnis der Konvertierung NaN ist, rufen Sie die toString()-Methode des Objekts auf und konvertieren Sie den zurückgegebenen String-Wert erneut gemäß den vorherigen Regeln.

Die folgende Tabelle listet den Rückgabewert von valueOf() des Objekts auf:

对象 返回值
Array 数组的元素被转换为字符串,这些字符串由逗号分隔,连接在一起。其操作与 Array.toString 和 Array.join 方法相同。
Boolean Boolean 值。
Date 存储的时间是从 1970 年 1 月 1 日午夜开始计的毫秒数 UTC。
Function 函数本身。
Number 数字值。
Object 对象本身。这是默认情况。
String 字符串值。

下面提供几个例子,你能写出它的正确结果吗:

Number("hello CSSer!");//NaN
Number("0x8");//8
Number("");//0
Number("020dd");//NaN
Number("070");//70
Number(true);//1

2、parseInt(string, radix)函数,将字符串转换为整数类型的数值。它也有一定的规则:

1.忽略字符串前面的空格,直至找到第一个非空字符

2.如果第一个字符不是数字符号或者负号,返回NaN

3.如果第一个字符是数字,则继续解析直至字符串解析完毕或者遇到一个非数字符号为止

4.如果上步解析的结果以0开头,则将其当作八进制来解析;如果以0x开头,则将其当作十六进制来解析

对象 操作
Array 将 Array 的元素转换为字符串。结果字符串由逗号分隔,且连接起来。
Boolean 如果 Boolean 值是 true,则返回 “true”。否则,返回 “false”。
Date 返回日期的文字表示法。
Error 返回一个包含相关错误信息的字符串。
Function 返回如下格式的字符串,其中 functionname 是被调用 toString 方法函数的名称:

function functionname( ) { [native code] }

Number 返回数字的文字表示。
String 返回 String 对象的值。
默认 返回 “[object objectname]”,其中 objectname 是对象类型的名称。

5.如果指定radix参数,则以radix为基数进行解析

小测验:

parseInt("hello CSSer!");//NaN
parseInt("0x8");//8
parseInt("");//NaN
parseInt("020dd");//20
parseInt("070");//70
parseInt("22.5");//22

3. Die Funktion parseFloat(string) konvertiert einen String in einen Gleitkommawert.

Die Regeln sind im Grunde die gleichen wie bei parseInt, es gibt jedoch einige Unterschiede: Das erste Dezimalpunktsymbol in der Zeichenfolge ist gültig und parseFloat ignoriert alle führenden Nullen, wenn die Zeichenfolge eine Zahl enthält, die als Ganzzahl analysiert werden kann , es wird ein Ganzzahlwert anstelle eines Gleitkommawerts zurückgegeben.

4. toString(radix)-Methode. Alle Wertetypen außer undefiniert und null verfügen über eine toString()-Methode, die eine String-Darstellung des Objekts zurückgibt.

5. Die String(mix)-Funktion wandelt jede Art von Wert in einen String um. Die Regeln sind:

1. Wenn es eine toString()-Methode gibt, rufen Sie diese Methode auf (ohne den Basisparameter zu übergeben) und geben Sie das Ergebnis zurück

2. Wenn es null ist, geben Sie „null“ zurück

3. Wenn es undefiniert ist, geben Sie „undefiniert“ zurück

6. Boolesche (Misch-)Funktion, wandelt jede Art von Wert in einen booleschen Wert um.

Die folgenden Werte werden in „false“ konvertiert: false, „“, 0, NaN, null, undefiniert und alle anderen Werte werden in true konvertiert.

Implizite Konvertierung

In einigen Fällen führt Javascript eine automatische Typkonvertierung durch, auch wenn wir keine explizite Konvertierung anbieten. Die Hauptsituationen sind:

1. Funktion zur Erkennung, ob es sich um einen nicht numerischen Wert handelt: isNaN(mix)

isNaN()-Funktion, nach dem Testen wurde festgestellt, dass diese Funktion versucht, den Parameterwert mit Number() umzuwandeln. Wenn das Ergebnis „nicht numerisch“ ist, wird es „true“ zurückgeben, andernfalls wird es „false“ zurückgeben.

2. Inkrement- und Dekrementoperatoren (einschließlich Präfix und Postfix), unäre positive und negative Vorzeichenoperatoren

Diese Operatoren sind auf Werte jedes Datentyps anwendbar. Für verschiedene Wertetypen folgt der Operator den folgenden Regeln (nach dem Vergleich stellt sich heraus, dass seine Regeln im Wesentlichen mit den Number()-Regeln identisch sind):

1. Wenn es sich um eine Zeichenfolge handelt, die gültige numerische Zeichen enthält, konvertieren Sie sie zunächst in einen numerischen Wert (die Konvertierungsregeln sind die gleichen wie bei Number(). Nachdem Sie die Operation zum Addieren und Subtrahieren von 1 ausgeführt haben, wird die Zeichenfolgenvariable zu a). numerische Variable.

2. Wenn es sich um eine Zeichenfolge handelt, die keine gültigen numerischen Zeichen enthält, setzen Sie den Wert der Variablen auf NaN, und die Zeichenfolgenvariable wird zu einer numerischen Variablen.

3. Wenn es sich um einen booleschen Wert handelt, konvertieren Sie ihn zuerst in 0 und führen Sie dann die Operation des Addierens oder Subtrahierens von 1 durch. Die boolesche Wertvariable wird als numerische Variable programmiert.

4. Wenn es sich um einen booleschen Wert handelt, konvertieren Sie ihn zuerst in 1 und führen Sie dann die Operation des Addierens oder Subtrahierens von 1 durch. Die boolesche Wertvariable wird zu einer numerischen Variablen.

5. Wenn es sich um einen Gleitkommawert handelt, führen Sie die Operation des Addierens oder Subtrahierens von 1 durch.

6. Wenn es sich um ein Objekt handelt, rufen Sie zuerst die valueOf()-Methode des Objekts auf und wenden Sie dann die vorherigen Regeln auf den Rückgabewert an. Wenn das Ergebnis NaN ist, wird die Methode toString() aufgerufen, bevor die vorherigen Regeln angewendet werden. Objektvariablen werden zu numerischen Variablen.

Quiz:

Führen Sie Post-Inkrementierungsoperationen für die folgenden Wertetypen aus. Was ist das Ergebnis?

„2″, „02dd“, „“, false, 22.5, „“, -false, neues Datum()

3. Additionsoperator

Der Pluszeichen-Operator wird in Javascript auch als String-Verkettungsoperator verwendet, daher sind die Regeln für den Pluszeichen-Operator in zwei Situationen unterteilt:

•Wenn beide Operandenwerte numerisch sind, gelten folgende Regeln:

1. Wenn ein Operand NaN ist, ist das Ergebnis NaN

2. Wenn es Unendlichkeit ist, ist das Ergebnis Unendlichkeit

3. Wenn es -Infinity (-Infinity) ist, ist das Ergebnis -Infinity

4. Wenn es Infinity (-Infinity) ist, ist das Ergebnis NaN

5. Wenn es 0 (0) ist, ist das Ergebnis 0

6. Wenn es (-0) (-0) ist, ist das Ergebnis -0

7. Wenn es (0) (-0) ist, ist das Ergebnis 0

•Wenn einer der Operandenwerte eine Zeichenfolge ist, dann:

1. Wenn beide Operationswerte Zeichenfolgen sind, verketten Sie sie

2. Wenn nur ein Operationswert eine Zeichenfolge ist, konvertieren Sie die anderen Operationswerte in Zeichenfolgen und verketten Sie sie dann

3. Wenn ein Operand ein Objekt, ein numerischer Wert oder ein boolescher Wert ist, rufen Sie die Methode toString() auf, um den Zeichenfolgenwert zu erhalten, und wenden Sie dann die vorherigen Zeichenfolgenregeln an. Für

undefiniert und null, rufen Sie jeweils String() auf, um sie explizit in Strings umzuwandeln.

Es ist ersichtlich, dass bei der Additionsoperation, wenn ein Operationswert vom Typ Zeichenfolge ist, der andere Operationswert in eine Zeichenfolge umgewandelt und schließlich verkettet wird.

4. Multiplikation und Division, Minusoperator, Modulooperator

Diese Operatoren dienen Operationen und haben daher etwas gemeinsam: Wenn einer der Operandenwerte kein numerischer Wert ist, wird implizit die Funktion Number() zur Konvertierung aufgerufen. Detaillierte Regeln für jede Operation finden Sie in der Definition in ECMAScript.

5. Logische Operatoren (!, &&, ||)

Der logische NOT (!)-Operator wandelt seinen Operationswert zunächst über die Funktion Boolean() in einen booleschen Wert um und negiert ihn dann.

Logischer UND-Operator (&&). Wenn ein Operationswert kein boolescher Wert ist, befolgen Sie die folgenden Regeln für die Konvertierung:

1. Wenn der erste Operand nach der Konvertierung durch Boolean() wahr ist, wird der zweite Operationswert zurückgegeben, andernfalls wird der erste Wert (nicht der Wert nach der Konvertierung durch Boolean()) zurückgegeben

2. Wenn ein Operationswert null ist, geben Sie null zurück

3. Wenn ein Operationswert NaN ist, geben Sie NaN zurück

4. Wenn ein Operationswert undefiniert ist, geben Sie undefiniert zurück

Logischer ODER-Operator (||). Wenn ein Operationswert kein boolescher Wert ist, befolgen Sie die folgenden Regeln:

1. Wenn der erste Operationswert nach der Konvertierung durch Boolean() falsch ist, wird der zweite Operationswert zurückgegeben, andernfalls wird der erste Operationswert (nicht der durch Boolean() konvertierte Wert) zurückgegeben

2. Die Verarbeitungsregeln für undefiniert, null und NaN sind die gleichen wie für logisches UND (&&)


6. Vergleichsoperatoren (95ec6993dc754240360e28e0de8de30a, d2e24fbfa3a7d998970671c0359d3643=)


Wie die oben genannten Operatoren können auch die Operandenwerte von Vergleichsoperatoren von beliebigem Typ sein. Wenn also nicht numerische Typen zur Teilnahme an Vergleichen verwendet werden, erfordert das System auch eine implizite Typkonvertierung:


1. Wenn beide Operationswerte numerische Werte sind, führen Sie einen numerischen Vergleich durch


2. Wenn beide Operationswerte Zeichenfolgen sind, vergleichen Sie die Zeichenkodierungswerte, die den Zeichenfolgen entsprechen


3. Wenn nur ein Operationswert ein numerischer Wert ist, konvertieren Sie den anderen Operationswert in einen numerischen Wert und führen Sie einen numerischen Vergleich durch


4. Wenn ein Operand ein Objekt ist, rufen Sie die Methode valueOf() auf (wenn das Objekt keine Methode valueOf() hat, rufen Sie die Methode toString() auf), und das Ergebnis ist wie im vorherigen

Vergleich der Regelausführung


5. Wenn ein Operationswert ein boolescher Wert ist, konvertieren Sie ihn in einen numerischen Wert und vergleichen Sie ihn dann


Hinweis: NaN ist ein ganz besonderer Wert. Er ist mit keiner Art von Wert gleich, auch nicht mit sich selbst. Gleichzeitig gibt er beim Vergleich mit jeder Art von Wert „falsch“ zurück.


7. Gleichheitsoperator (==)


Der Gleichheitsoperator führt vor dem Vergleich eine implizite Konvertierung der Operationswerte durch:


1. Wenn ein Operationswert ein boolescher Wert ist, konvertieren Sie ihn vor dem Vergleich in einen numerischen Wert


2. Wenn ein Operationswert eine Zeichenfolge und der andere Operationswert ein numerischer Wert ist, konvertieren Sie die Zeichenfolge mithilfe der Number()-Funktion

in einen numerischen Wert

3. Wenn ein Operationswert ein Objekt ist und der andere nicht, wird die valueOf()-Methode des Objekts aufgerufen und die Ergebnisse werden gemäß den vorherigen Regeln verglichen


4.null und undefiniert sind gleich


5. Wenn ein Operationswert NaN ist, gibt der Gleichheitsvergleich „falsch“ zurück


6. Wenn beide Operationswerte Objekte sind, vergleichen Sie, ob sie auf dasselbe Objekt verweisen


Stellungnahme:
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