Maison  >  Article  >  interface Web  >  Introduction aux méthodes de conversion d'objets en chaînes, nombres et valeurs booléennes en js (exemple)

Introduction aux méthodes de conversion d'objets en chaînes, nombres et valeurs booléennes en js (exemple)

不言
不言original
2018-09-15 17:30:282205parcourir

Le contenu de cet article concerne l'introduction (exemples) de la conversion d'objets en chaînes, nombres et valeurs booléennes en js. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. pour vous.

1. Convertissez l'objet en chaîne :

Règles :

1 Si l'objet a une méthode toString, appelez la méthode et retournez le résultat correspondant ; le code est généralement Il sera exécuté jusqu'à ce point, car il y a une méthode toString dans tous les objets)

2 Si l'objet a une méthode valueOf, appelez la méthode et renvoyez le résultat correspondant ; 🎜>3. Sinon, une exception s'est produite.

Habituellement, tous les objets ont une méthode toString et les objets intégrés ont leur propre implémentation de la méthode toString

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

alert( [1,2] ) // "1,2"

alert( new Date() ) // "Sam 15 septembre 2018 15:58:01 GMT+0800 (heure standard de Chine)"

Dans la sortie de l'interface, telle que alert() et document.write(), toString sera appelé en premier Si un scalaire ou un défini ou null ne peut pas être obtenu, valueOf sera réessayé si l'objet est toujours renvoyé. , une erreur sera signalée.

En fait, dans les appels de fonctions telles que parseInt(), alert() et document.write(), la conversion de type des paramètres doit être considérée comme "passive". C'est l'implémentation de la fonction qui appelle. toString en premier, et les objets non-données appellent automatiquement toString.


Vous pouvez personnaliser toString()

2. Convertir des objets en nombres
var obj = {
    age:23,
    toString:function(){        
    return this.age;
    }
}
obj.toString();//23

Il existe deux situations principales dans lesquelles

doit être converti en nombres :

fonction Les paramètres à l'intérieur doivent être des nombres, tels que : Math.sin(obj) / isNaN(obj) et des opérateurs arithmétiques :

est utilisé pour la comparaison, tels que : obj; == 'John'

PS : La conversion de type n'aura pas lieu dans les deux comparaisons suivantes,

a) En comparaison stricte (===), aucune conversion de type n'aura lieu,

b) En comparaison non stricte, si les paramètres sont tous deux des objets, aucune conversion de type ne se produira. Habituellement, si deux objets font référence au même objet, true sera renvoyé.

Règles de conversion. en nombres :

1. Si l'objet a une méthode valueOf, appelez la méthode et retournez le résultat correspondant

2. Lorsque valueOf est appelé et que la valeur renvoyée n'est toujours pas un nombre, la méthode toString de l'objet sera appelée et le résultat correspondant sera renvoyé

3. Sinon une exception sera levée ;

La méthode valueOf d'un objet renvoie l'objet lui-même, pas une chaîne (comme les tableaux et les fonctions, leur méthode valueOf est héritée de Object.prototype, et le comportement par défaut est de renvoyer l'objet lui-même), donc Utilisera toString

pour la participation de type d'objet Les opérations arithmétiques et les opérations "==" ne sont pas égales aux opérations de comparaison (>, 95ec6993dc754240360e28e0de8de30a=, <=). La conversion du type de données se produit automatiquement en premier. , si valueOf ne peut pas renvoyer un scalaire (nombre, chaîne, booléen) et undefined, null,

continuera à appeler toString S'il renvoie toujours des données de type objet, une erreur sera signalée.


Exception pour le type Date : dans les opérations + et ==, toString est prioritaire, ce qui devrait être le traitement spécial de la spécification pour ce type de données.


Supplément : Le résultat de l'appel de 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对象和字符串相互转化操作实例

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn