Heim  >  Artikel  >  Web-Frontend  >  Einführung in Methoden zum Konvertieren von Objekten in Zeichenfolgen, Zahlen und boolesche Werte in js (Beispiel)

Einführung in Methoden zum Konvertieren von Objekten in Zeichenfolgen, Zahlen und boolesche Werte in js (Beispiel)

不言
不言Original
2018-09-15 17:30:282228Durchsuche

Der Inhalt dieses Artikels befasst sich mit der Einführung (Beispiele) der Konvertierung von Objekten in Zeichenfolgen, Zahlen und booleschen Werten. Ich hoffe, dass er für Freunde in Not hilfreich ist dir geholfen.

1. Konvertieren Sie das Objekt in einen String:

1. Wenn das Objekt eine toString-Methode hat, rufen Sie die Methode auf und geben Sie das entsprechende Ergebnis zurück Code wird normalerweise bis zu diesem Punkt ausgeführt, da es in allen Objekten eine toString-Methode gibt)

2. Wenn das Objekt eine valueOf-Methode hat, rufen Sie die Methode auf und geben Sie das entsprechende Ergebnis zurück 🎜>3. Andernfalls ist eine Ausnahme aufgetreten.

Normalerweise haben alle Objekte eine toString-Methode und integrierte Objekte haben ihre eigene Implementierung der toString-Methode

alert( {key: 'value'} ) // [object Object]

alert( [1,2] ) // „1,2“

alert( new Date() ) // „Sat 15. September 2018 15:58:01 GMT+0800 (China Standard Time)“

Bei Schnittstellenausgaben wie Alert() und document.write() wird toString zuerst aufgerufen. Wenn kein Skalar oder Undefinierter Wert oder Null ermittelt werden kann, wird valueOf erneut versucht , wird ein Fehler gemeldet.
Tatsächlich sollte bei Aufrufen von Funktionen wie parseInt(), warning() und document.write() die Typkonvertierung von Parametern als „passiv“ betrachtet werden Priorität hat der Aufruf von toString, und Nichtdatenobjekte rufen automatisch toString auf.

Sie können toString() anpassen

var obj = {
    age:23,
    toString:function(){        
    return this.age;
    }
}
obj.toString();//23

2. Objekte in Zahlen umwandeln

Es gibt zwei Hauptsituationen, in denen

in Zahlen umgewandelt werden muss:

innerhalb der Funktion Parameter müssen Zahlen sein, wie zum Beispiel: Math.sin(obj) / isNaN(obj) und arithmetische Operatoren: +obj

wird zum Vergleich verwendet, wie zum Beispiel: obj == 'John'

PS: In den folgenden beiden Vergleichen findet keine Typkonvertierung statt,

a) Im strengen Vergleich (===) findet keine Typkonvertierung statt,

b) Wenn es sich bei allen Parametern um Objekte handelt, erfolgt normalerweise keine Typkonvertierung, wenn sich zwei Objekte auf dasselbe Objekt beziehen.

Regeln für die Konvertierung in Zahlen:

1. Wenn das Objekt eine valueOf-Methode hat, rufen Sie die Methode auf und geben Sie das entsprechende Ergebnis zurück.

2. Wenn valueOf aufgerufen wird und der zurückgegebene Wert immer noch keine Zahl ist, wird die Methode zurückgegeben Die toString-Methode des Objekts wird aufgerufen und das entsprechende Ergebnis zurückgegeben.

3. Andernfalls wird eine Ausnahme ausgelöst.

Die valueOf-Methode eines Objekts gibt das Objekt selbst zurück, keine Zeichenfolge (z. B. Arrays und Funktionen, deren valueOf-Methode wird von Object.prototype geerbt und das Standardverhalten besteht darin, das Objekt selbst zurückzugeben). Wird toString

für die Teilnahme am Objekttyp verwenden Arithmetische Operationen und „==“-Operationen sind nicht gleichbedeutend mit Vergleichsoperationen (>, <, <=). Die Datentypkonvertierung erfolgt automatisch. , wenn valueOf keinen Skalar (Zahl, Zeichenfolge, Boolescher Wert) zurückgeben kann und undefiniert, null ist, ruft

weiterhin toString auf. Wenn weiterhin Objekttypdaten zurückgegeben werden, wird ein Fehler gemeldet.

Ausnahme für den Datumstyp: Bei +- und ==-Operationen hat toString Vorrang, was die spezielle Behandlung dieses Datentyps in der Spezifikation sein sollte.

Ergänzung: Das Ergebnis des Aufrufs von valueOf():

 

 

 

 

 

 


可以重写对象的valueOf()方法(百度一道面试题,定义一个对象,使obj == '1' ,结果为true):

var obj = {
    valueOf: function(){       
    return 1;
    }
};
console.log(obj == &#39;1&#39;);//true

三、对象转化成布尔值:

对象在JS中总是返回true

根据上述,对象在相等性判断中如何转变?

在布尔上下文中, a是true , b是false,a == b,这是可能的 。

 [] == ![] //true

内部的转化步骤:

1、右边是![],将会被转换成一个布尔值,[]为true,取非为false,此时表达式变成:

[]==false;

2、按照规则,右边是布尔值,将false转换成0,左边是数组,数组也将进行数字转换,先调用valueOf(),不能转化成原始值,再用toString(),转换为0

0 == 0

 3、结果为true

补充 == 和!=判断规则(注意: ===!==  和 对象==对象 这三种情况不会进行类型转换):

如果有一个操作数是布尔值,则在比较相等性之前先将其转换为数值----false转化为0,true转化为1;

如果有一个数是字符串,另一个操作数是数值,将字符串转化成数值;

如果一个操作数是对象,另一个操作数不是对象,将对象转化为基本操作类型(先valueOf()再toString(),均不能得到基本类型的值则会报错),再比较。

所以,对象在相等性判断中:

若两边都是对象,不会进行类型转换,为同一个引用才会返回true

若只有一边为对象,则会先调用对象的valueOf()方法,不能返回基本类型,再调用对象的toString()方法,还是不能就会报错,否则用转化后的基本类型值继续进行判断

举例,感受下~:
[]==[]//false
[]==false//true
!![]//true
[]==![]//true

总结:

在JavaScript中,对象有三个转换,这取决于具体情况:

字符串输出,使用toString 。

数字:数学函数,操作符,使用valueOf 后使用 toString 。

布尔值:转化为true。

 相关推荐:

js中json字符串和json对象互相转化的方法实现

js中json对象和字符串相互转化操作实例

Das obige ist der detaillierte Inhalt vonEinführung in Methoden zum Konvertieren von Objekten in Zeichenfolgen, Zahlen und boolesche Werte in js (Beispiel). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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