ホームページ > ウェブフロントエンド > jsチュートリアル > Javascript_javascript スキルにおける valueOf と toString の違いの簡単な分析

Javascript_javascript スキルにおける valueOf と toString の違いの簡単な分析

WBOY
リリース: 2016-05-16 17:40:03
オリジナル
864 人が閲覧しました

はじめに

基本的に、null を除くすべての JS データ型にはこれら 2 つのメソッドがあります。どちらも JavaScript 値の計算と表示の問題を解決し、書き換えることで呼び出しの最適化が向上します。

テスト分析

まず例を見てみましょう:

コードをコピー コードは次のとおりです:

var aaa = {
i: 10,
valueOf: function() { return this.i 30; },
toString: function() { return this.valueOf() }
}

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() {
コンソール。 log(' valueOf');
return this.i;
}
}

alert(bbb); // 10 toString
alert(bbb); // 10 valueOf
alert(bbb); / 10 toString
alert(Number(bbb)) // 10 valueOf
alert(bbb == '10') // true valueOf
alert(bbb === '10'); / false

この結果は、文字列に変換するときに toString メソッドが呼び出され、数値に変換するときに valueOf メソッドが呼び出されるような印象を与えますが、そのうち 2 つは非常に矛盾しています。 1 つは、alert('' bbb) です。文字列の連結では toString メソッドを呼び出す必要があります。もう 1 つは、=== 演算子が暗黙的な変換を実行しないため、呼び出されないということです。真実を知るには、より厳密な実験が必要です。

コードをコピー コードは次のとおりです:
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(aa == '10'); // true toString


もう一度 valueOf を見てください。


var bb = {
i: 10、
valueOf: function() {
console.log('valueOf')
return this.i; }
}

alert(bb);// [オブジェクト オブジェクト]
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.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(Number(cc)); // 10 valueOf alert(cc == '10'); // true valueOf


概要: valueOfこれは操作に偏っており、toString は表示に偏っています。
1. オブジェクト (alert(a) など) を変換する場合、toString メソッドが最初に呼び出されます。どちらのメソッドもオーバーライドされていない場合は、toString の出力が呼び出されます。オブジェクトは です。
2.文字列型に強制変換する場合はtoStringメソッドが、数値型に強制変換する場合はvalueOfメソッドが最初に呼び出されます。
3. 演算演算子がある場合、valueOf は toString よりも優先されます。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート