Javascript中valueOf与toString区别浅析_javascript技巧
前言
基本上,所有JS数据类型都拥有这两个方法,null除外。它们俩解决javascript值运算与显示的问题,重写会加大它们调用的优化。
测试分析
先看一例:
var aaa = {
i: 10,
valueOf: function() { return this.i+30; },
toString: function() { return this.valueOf()+10; }
}
alert(aaa > 20); // true
alert(+aaa); // 40
alert(aaa); // 50
之所以有这样的结果,因为它们偷偷地调用valueOf或toString方法。
但如何区分什么情况下是调用了哪个方法呢,我们可以通过另一个方法测试一下。
由于用到console.log,请在装有firebug的FF中实验!
var bbb = {
i: 10,
toString: function() {
console.log('toString');
return this.i;
},
valueOf: function() {
console.log('valueOf');
return this.i;
}
}
alert(bbb);// 10 toString
alert(+bbb); // 10 valueOf
alert(''+bbb); // 10 valueOf
alert(String(bbb)); // 10 toString
alert(Number(bbb)); // 10 valueOf
alert(bbb == '10'); // true valueOf
alert(bbb === '10'); // false
结果给人的感觉是,如果转换为字符串时调用toString方法,如果是转换为数值时则调用valueOf方法,但其中有两个很不和谐。一个是alert(''+bbb),字符串合拼应该是调用toString方法……另一个我们暂时可以理解为===操作符不进行隐式转换,因此不调用它们。为了追究真相,我们需要更严谨的实验。
var aa = {
i: 10,
toString: function() {
console.log('toString');
return this.i;
}
}
alert(aa);// 10 toString
alert(+aa); // 10 toString
alert(''+aa); // 10 toString
alert(String(aa)); // 10 toString
alert(Number(aa)); // 10 toString
alert(aa == '10'); // true toString
再看valueOf。
var bb = {
i: 10,
valueOf: function() {
console.log('valueOf');
return this.i;
}
}
alert(bb);// [object Object]
alert(+bb); // 10 valueOf
alert(''+bb); // 10 valueOf
alert(String(bb)); // [object Object]
alert(Number(bb)); // 10 valueOf
alert(bb == '10'); // true valueOf
发现有点不同吧?!它没有像上面toString那样统一规整。
对于那个[object Object],我估计是从Object那里继承过来的,我们再去掉它看看。
Object.prototype.toString = null;
var cc = {
i: 10,
valueOf: function() {
console.log('valueOf');
return this.i;
}
}
alert(cc);// 10 valueOf
alert(+cc); // 10 valueOf
alert(''+cc); // 10 valueOf
alert(String(cc)); // 10 valueOf
alert(Number(cc)); // 10 valueOf
alert(cc == '10'); // true valueOf
总结:valueOf偏向于运算,toString偏向于显示。
1、 在进行对象转换时(例如:alert(a)),将优先调用toString方法,如若没有重写toString将调用valueOf方法,如果两方法都不没有重写,但按Object的toString输出。
2、 在进行强转字符串类型时将优先调用toString方法,强转为数字时优先调用valueOf。
3、 在有运算操作符的情况下,valueOf的优先级高于toString。

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Convertir les types de données de base en chaînes à l'aide de la fonction String.valueOf() de Java Dans le développement Java, lorsque nous devons convertir les types de données de base en chaînes, une méthode courante consiste à utiliser la fonction valueOf() de la classe String. Cette fonction peut accepter les paramètres des types de données de base et renvoyer la représentation sous forme de chaîne correspondante. Dans cet article, nous explorerons comment utiliser la fonction String.valueOf() pour les conversions de types de données de base et fournirons quelques exemples de code pour

Utilisez la fonction Boolean.valueOf() de Java pour convertir une chaîne en valeur booléenne. En programmation Java, vous rencontrez souvent des situations dans lesquelles vous devez convertir une chaîne en valeur booléenne. Java fournit un moyen pratique de répondre à cette exigence, en utilisant la fonction Boolean.valueOf(). Cette fonction peut convertir une valeur booléenne représentée par une chaîne en type booléen correspondant. Examinons de plus près l'utilisation de Boolean.valueOf(). Étant donné une chaîne, nous

1. Le concept est d'obtenir un seul objet d'énumération via une chaîne. Il existe trois formes de syntaxe. 2. Paramètre i, l'entier de l'objet Integer. s, une chaîne d'objets Integer. radix, le numéro de base utilisé lors de l'analyse de la chaîne s, est utilisé pour spécifier le numéro de base utilisé. 3. La valeur de retour est une exception d'objet entier représentée par un paramètre de chaîne. Si la chaîne ne peut pas être analysée, une exception NumberFormatException est levée. 4. Instance publicenumSignal{//Définissez un type d'énumération GREEN, YELLOW, RED; ]args ){Signalgreen=Sig

Convertissez un StringBuffer en chaîne à l'aide de la méthode toString() de la classe StringBuffer. En Java, la classe StringBuffer est une classe utilisée pour gérer les chaînes mutables. Elle fournit de nombreuses méthodes pratiques pour modifier et manipuler des chaînes. Lorsque nous devons convertir un objet StringBuffer en chaîne, nous pouvons utiliser la méthode toString() pour y parvenir. La méthode toString() de la classe StringBuffer renvoie un

Convertir un tableau de caractères en chaîne à l'aide de la fonction String.valueOf() de Java En programmation Java, nous avons souvent besoin de convertir un tableau de caractères en chaîne. Heureusement, Java fournit une méthode pratique String.valueOf() pour réaliser cette fonction. Dans cet article, nous expliquerons comment convertir un tableau de caractères en chaîne à l'aide de la fonction String.valueOf() et fournirons des exemples de code correspondants. La fonction String.valueOf() est

Utilisez la fonction String.valueOf() de Java pour convertir d'autres types en chaînes. Dans le développement Java, vous rencontrez souvent le besoin de convertir d'autres types de données en chaînes. Pour répondre à ce besoin, Java fournit la fonction String.valueOf() pour implémenter la conversion de type. Cet article explique comment utiliser la fonction String.valueOf() pour convertir d'autres types en chaînes et fournit des exemples de code. Convertir un type de données de base en chaîne Voyons d'abord comment convertir un type de données de base en chaîne

Simuler l'implémentation de la fonction tostring publicstaticStringmyToString(int[]array){Stringstr="[";for(inti=0;i

1. Description La fonction 1 peut être convertie en chaîne La fonction 2 peut convertir la valeur en une chaîne de différents nombres de base (octal décimal, etc.) 2. Syntaxe StringtoString() staticStringtoString(inti) 3. Paramètre i--l'entier à être converti. 4. Valeur de retour toString() : renvoie un objet String représentant une valeur entière. toString(inti) : renvoie un objet String représentant l'int spécifié. 5. Exemple importjava.util.Arrays;publicclassArrayPrint{publicstaticvoidmain(Str
