JavaScriptで変数をString
にキャストする方法は3つあります。
jQueryのソースコードでこれら3つのオプションを検索しましたが、すべて使用されています。
違いがあるかどうかを知りたいです。
value.toString()
String(value)
value + ""
それらはすべて同じ出力を生成しますが、それらの1つは他のものよりも優れていますか?+ ""
には文字を節約できるという利点があると思いますが、それほど大きな利点ではありません。
value
がnull
の場合は、動作が異なります。
null.toString()
はエラーをスローします - nullのメソッド 'toString'を呼び出すことはできませんString(null)
は - "null"を返しますnull + ""
は - "null"も返します。value
がundefined
の場合も、非常によく似た動作が起こります( jbabeyの答え を参照)。
それ以外に、ごくわずかなパフォーマンスの違いがあります、あなたがそれらを巨大なループの中で使っていない限り、心配する価値はありません。
違いはありますが、おそらくあなたの質問には関係ありません。たとえば、toStringプロトタイプは未定義の変数には存在しませんが、他の2つの方法を使用してundefinedを文字列にキャストできます。
var foo;
var myString1 = String(foo); // "undefined" as a string
var myString2 = foo + ''; // "undefined" as a string
var myString3 = foo.toString(); // throws an exception
これらは同じように動作しますが、toString
は数値の2進数、8進数、または16進数の文字列を変換する方法も提供します。
例:
var a = (50274).toString(16) // "c462"
var b = (76).toString(8) // "114"
var c = (7623).toString(36) // "5vr"
var d = (100).toString(2) // "1100100"
このJSPerf test によると、速度は異なります。しかし、あなたがそれらを大量に使うつもりでない限り、それらのどれもがうまく機能するはずです。
完全を期すために: asawyer で既に述べたように、.toString()
メソッドを使うこともできます。
null、未定義、NaN、0、およびfalseですべてが ''にキャストされても問題ない場合は、(s ? s+'' : '')
の方が高速です。
http://jsperf.com/cast-to-string/8 を参照してください。
注 - 現時点ではブラウザ間で大きな違いがあります。
上記すべてに加えて、定義済みの値v
については、次の点に注意してください。
String(v)
はv.toString()
を呼び出します'' + v
は他の型キャストの前にv.valueOf()
を呼び出しますそれで、私たちは以下のようなことができるでしょう。
var mixin = {
valueOf: function () { return false },
toString: function () { return 'true' }
};
mixin === false; // false
mixin == false; // true
'' + mixin; // "false"
String(mixin) // "true"
FF 34.0およびノード0.10でテスト済み
実世界の例:私は、任意の数のパラメータで呼び出すことができる対数関数を持っています:log("foo is {} and bar is {}", param1, param2)
。 DEBUG
フラグがtrue
に設定されている場合、大括弧は指定されたパラメーターに置き換えられ、ストリングはconsole.log(msg)
に渡されます。パラメータは、文字列、数値、そしてJSON/AJAX呼び出しによって返される可能性があるものなら何でも、おそらくnull
でもかまいません。
null
値のため、arguments[i].toString()
はオプションではありません(Connell Watkinsの回答を参照)arguments[i] + ""
について文句を言います。これは何を使うべきかの決定に影響を与えるかもしれないし、しないかもしれません。 JSLintを厳守する人もいます。このページでは各メソッドのパフォーマンスを自分でテストできます:)
http://jsperf.com/cast-to-string/2
ここでは、すべてのマシンとブラウザで、 ' "" + str'が最も速く、(String)strが最も遅いです。