在JavaScript中投射到string
我发现了三种方法在JavaScript中将一个variables转换为String
。
我在jQuery源代码中search了这三个选项, 它们都在使用中 。
我想知道他们之间是否有区别:
value.toString() String(value) value + ""
DEMO
他们都产生相同的产出,但是其中一个比另外一个好?
我会说+ ""
有一个优点,它可以节省一些字符,但这不是什么大的好处,还有其他什么?
当value
null
时,它们的行为会有所不同。
-
null.toString()
抛出一个错误 – 无法调用null的方法'toString' -
String(null)
返回 – “null” -
null + ""
也返回 – “null”
如果value
是undefined
则会出现非常类似的行为(请参阅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
它们的行为相同,但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是最慢的