205

StringJavaScriptで変数をキャストする 3 つの方法を見つけました。
これら 3 つのオプションを jQuery ソース コードで検索したところ、すべて使用中です。
それらの間に違いがあるかどうか知りたいです:

value.toString()
String(value)
value + ""

デモ

それらはすべて同じ出力を生成しますが、そのうちの 1 つが他のものより優れているでしょうか?
一部のキャラクターを節約できるという利点があると思いますが+ ""、それはそれほど大きな利点ではありません。他に何かありますか?

4

8 に答える 8

241

valueの場合、動作は異なりnullます。

  • null.toString()エラーをスローします-nullのメソッド'toString'を呼び出すことはできません
  • String(null)戻り値- 「null」
  • null + ""また、- "null"を返します

の場合、非常によく似た動作が発生しvalueますundefinedjbabeyの回答を参照)。

それ以外は、パフォーマンスの違いはごくわずかであり、巨大なループで使用しない限り、心配する価値はありません。

于 2012-06-18T12:58:31.530 に答える
31

違いはありますが、おそらくあなたの質問には関係ありません。たとえば、toStringプロトタイプは未定義の変数には存在しませんが、他の2つの方法を使用して未定義を文字列にキャストできます。

​var foo;

​var myString1 = String(foo); // "undefined" as a string

var myString2 = foo + ''; // "undefined" as a string

var myString3 = foo.toString(); // throws an exception

http://jsfiddle.net/f8YwA/

于 2012-06-18T13:01:05.623 に答える
19

これらは同じように動作しますが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"
于 2012-06-18T13:06:52.220 に答える
11

上記のすべてに加えて、定義された値について次のことに注意する必要がありますv

  • String(v)通話v.toString()
  • '' + vv.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 および Node 0.10 でテスト済み

于 2015-01-13T11:33:02.157 に答える
9

この JSPerf testによると、速度が異なります。しかし、それらを大量に使用しない限り、どれでも問題なく動作するはずです.

完全を期すために: asawyerが既に述べたように、.toString()メソッドを使用することもできます。

于 2012-06-18T12:55:27.900 に答える
8

null、undefined、NaN、0、および false をすべて '' にキャストしても問題ない場合は、(s ? s+'' : '')より高速です。

http://jsperf.com/cast-to-string/8を参照してください

注 - 現時点では、ブラウザによって大きな違いがあります。

于 2013-12-20T15:45:16.743 に答える
5

実際の例: 任意の数のパラメーターで呼び出すことができるログ関数があります: log("foo is {} and bar is {}", param1, param2). DEBUGフラグが に設定されている場合true、ブラケットは指定されたパラメータに置き換えられ、文字列が に渡されconsole.log(msg)ます。パラメーターは、文字列、数値、および JSON / AJAX 呼び出しによって返される可能性のあるものであれば何でもかまいませんnull

  • arguments[i].toString()可能な値のため、オプションではありませんnull(Connell Watkinsの回答を参照)
  • JSLint は について不平を言いarguments[i] + ""ます。これは、何を使用するかの決定に影響する場合としない場合があります。JSLint に厳密に従っている人もいます。
  • 一部のブラウザーでは、空の文字列を連結する方が、文字列関数または文字列コンストラクターを使用するよりも少し高速です (Sammys S. answer の JSPerf テストを参照)。Opera 12 と Firefox 19 では、空の文字列の連結が非常に高速です (Firefox 19 では 95%) - または、少なくともJSPerfはそう言っています。
于 2013-03-11T01:54:19.080 に答える
1

このページでは、各メソッドのパフォーマンスを自分でテストできます:)

http://jsperf.com/cast-to-string/2

ここでは、すべてのマシンとブラウザで、' "" + str ' が最も速く、(String)str が最も遅くなります。

于 2012-06-18T13:03:43.390 に答える