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. 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.
var obj = { age:23, toString:function(){ return this.age; } } obj.toString();//23
Es gibt zwei Hauptsituationen, in denen
in Zahlen umgewandelt werden muss: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 == '1');//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。
相关推荐:
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!