javascriptで強制実行toString()を具体的に実現します.

1958 ワード

Eforcing toString()
訳文:javascript中強制実行toString()
singleseeker
Javascriptは通常、方法または演算子の必要に応じて自動的に値を必要なタイプに変換します.これは様々なエラーを引き起こす可能性があります.Brian McKenna(@puffnfresh)suggaestsは以下のテストコードを提供しています.
 
  
Object.prototype.valueOf = function () {
throw new Error('Use an explicit toString');
};
[\s\S ]*

? :
[code]
> var obj = {};
> 'Hello '+obj
Error:Use an explicit toString
 
  
> String(obj)
'[object Object]'
> obj.toString()
'[object Object]'
> 'Hello '+String(obj)
ハロー[object Object]これはまたどういうことですか?オブジェクトを特定の基本タイプTに変換するには、まずその値が基本タイプに変換され、次にTに変換されます.前の変換は2ステップで行われます.
1.valueOf()メソッドを呼び出し、基本タイプを返したら終了します.
2.そうでなければ、呼び出し方法toString()です.基本タイプを返したら終了します.
3.またそうでないと、ミスを投げ出します.
最後の変換が数値であれば、上記valueOf()とtoStringを呼び出すこの順序です.
最後の変換が文字列である場合、Stringは先に呼び出されます.プラス記号の演算子は数値または文字列に変換されることがありますが、通常は数値演算に基づいて基本的なタイプが生成されます.
文章から送られたコードの断片を使わずに、Object.prototype.valueOf()はこの対象自体に戻ります.これは元のオブジェクトから続けてきた書き換えられない方法です.
 
  
> var obj = {};
> obj.valueOf() === obj
trueプラス記号演算子は最終的にtoString()を呼び出します.上のコードセグメントは呼び出しを停止し、そのメソッドを呼び出すことができる前にエラーを投げました.
このエラー情報は常に正確ではないことに注意してください.
 
  
> Number(obj)
Error:Use an explicit toStringですが、この手は確かに役に立ちます.
もし一つの対象が本当に数字に転化したいなら、それはどうしても自分のvalueOf方法を呼び出さなければなりません.
この文章は翻訳すると本当にツッコミを入れたいです.知識点のまとめはいいですが、英語を母国語としない外国人が書いた英語の技術文章として、母国語が英語ではない初心者の通訳に任せています.簡単にまとめます.
1.通常valuOf()は、変換されていないオブジェクトを返すということを示しています.つまり、その自身です.
2.プラス記号の演算子は、Dateオブジェクト以外はほとんどすべて最初にvalueof()を呼び出す方法です.
3.明確な基本値タイプをvalueof()に返すと、オブジェクトが文字列に加算されると、toString()は起動されなくなります.
参照
1.強制変換対象(object)は元の値(prmitives)です.
2.JavaScriptの中で、{}+{}はいくらですか?