在JavaScript中投射到string

我发现了三种方法在JavaScript中将一个variables转换为String
我在jQuery源代码中search了这三个选项, 它们都在使用中
我想知道他们之间是否有区别:

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

DEMO

他们都产生相同的产出,但是其中一个比另外一个好?
我会说+ ""有一个优点,它可以节省一些字符,但这不是什么大的好处,还有其他什么?

value null时,它们的行为会有所不同。

  • null.toString()抛出一个错误 – 无法调用null的方法'toString'
  • String(null)返回 – “null”
  • null + ""也返回 – “null”

如果valueundefined则会出现非常类似的行为(请参阅jbabey的答案 )。

除此之外,还有一个可以忽略不计的性能差异,除非你在巨大的循环中使用它们,否则不值得担心。

有差异,但它们可能与您的问题无关。 例如,未定义的variables上不存在toString原型,但是您可以使用其他两种方法将undefined转换为string:

 ​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/

它们的行为相同,但toString也提供了一种转换数字二进制,八进制或hexstring的方法:

例:

 var a = (50274).toString(16) // "c462" var b = (76).toString(8) // "114" var c = (7623).toString(36) // "5vr" var d = (100).toString(2) // "1100100" 

根据这个JSPerftesting ,他们在速度上有所不同。 但是,除非你要大量使用它们,否则它们应该performance良好。

为了完整性, asawyer已经提到,你也可以使用.toString()方法。

如果你确定null,undefined,NaN,0和false,则全部转换为“'then (s ? s+'' : '')会更快。

请参阅http://jsperf.com/cast-to-string/8

请注意 – 目前各浏览器之间存在显着差异。

除了以上所述之外,还应该注意的是,对于定义的值v

  • String(v)调用v.toString()
  • '' + v在任何其他types转换之前调用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.10testing

真实世界的例子:我有一个可以用任意数量的参数调用的日志函数: log("foo is {} and bar is {}", param1, param2) 。 如果一个DEBUG标志被设置为true ,那么括号会被给定的参数replace,并且string被传递给console.log(msg) 。 参数可以是,也可以是string,数字和可能由JSON / AJAX调用返回的内容,甚至可能为null

  • arguments[i].toString()不是一个选项,因为可能的null值(参见Connell Watkins的答案)
  • JSLint会抱怨arguments[i] + "" 。 这可能会也可能不会影响决定使用什么。 有些人严格遵守JSLint。
  • 在某些浏览器中,连接空string比使用string函数或string构造函数要快一些(请参阅Sammys S.答案中的JSPerftesting)。 在Opera 12和Firefox 19中,连接空string的速度明显更快(在Firefox 19中为95%) ,或者至lessJSPerf这样说。

在这个页面上你可以testing每个方法的性能:)

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

在这里,在所有机器和浏览器上, “”+ str “是最快的,(String)str是最慢的