admin管理员组文章数量:1129451
I found three ways to cast a variable to String
in JavaScript.
I searched for those three options in the jQuery source code, and they are all in use.
I would like to know if there are any differences between them:
value.toString()
String(value)
value + ""
DEMO
They all produce the same output, but does one of them better than the others?
I would say the + ""
has an advantage that it saves some characters, but that's not that big advantage, anything else?
I found three ways to cast a variable to String
in JavaScript.
I searched for those three options in the jQuery source code, and they are all in use.
I would like to know if there are any differences between them:
value.toString()
String(value)
value + ""
DEMO
They all produce the same output, but does one of them better than the others?
I would say the + ""
has an advantage that it saves some characters, but that's not that big advantage, anything else?
9 Answers
Reset to default 288They do behave differently when the value
is null
.
null.toString()
throws an error - Cannot call method 'toString' of nullString(null)
returns - "null"null + ""
also returns - "null"
Very similar behaviour happens if value
is undefined
(see jbabey's answer).
Other than that, there is a negligible performance difference, which, unless you're using them in huge loops, isn't worth worrying about.
There are differences, but they are probably not relevant to your question. For example, the toString prototype does not exist on undefined variables, but you can cast undefined to a string using the other two methods:
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/
They behave the same but toString
also provides a way to convert a number binary, octal, or hexadecimal strings:
Example:
var a = (50274).toString(16) // "c462"
var b = (76).toString(8) // "114"
var c = (7623).toString(36) // "5vr"
var d = (100).toString(2) // "1100100"
In addition to all the above, one should note that, for a defined value v
:
String(v)
callsv.toString()
'' + v
callsv.valueOf()
prior to any other type cast
So we could do something like:
var mixin = {
valueOf: function () { return false },
toString: function () { return 'true' }
};
mixin === false; // false
mixin == false; // true
'' + mixin; // "false"
String(mixin) // "true"
Tested in FF 34.0 and Node 0.10
According to this JSPerf test, they differ in speed. But unless you're going to use them in huge amounts, any of them should perform fine.
For completeness: As asawyer already mentioned, you can also use the .toString()
method.
if you are ok with null, undefined, NaN, 0, and false all casting to '' then (s ? s+'' : '')
is faster.
see http://jsperf.com/cast-to-string/8
note - there are significant differences across browsers at this time.
Real world example: I've got a log function that can be called with an arbitrary number of parameters: log("foo is {} and bar is {}", param1, param2)
. If a DEBUG
flag is set to true
, the brackets get replaced by the given parameters and the string is passed to console.log(msg)
. Parameters can and will be Strings, Numbers and whatever may be returned by JSON / AJAX calls, maybe even null
.
arguments[i].toString()
is not an option, because of possiblenull
values (see Connell Watkins answer)- JSLint will complain about
arguments[i] + ""
. This may or may not influence a decision on what to use. Some folks strictly adhere to JSLint. - In some browsers, concatenating empty strings is a little faster than using string function or string constructor (see JSPerf test in Sammys S. answer). In Opera 12 and Firefox 19, concatenating empty strings is rediculously faster (95% in Firefox 19) - or at least JSPerf says so.
On this page you can test the performance of each method yourself :)
http://jsperf.com/cast-to-string/2
here, on all machines and browsers, ' "" + str ' is the fastest one, (String)str is the slowest
Use Backticks
so:
`${varibale}`
本文标签: Casting to string in JavaScriptStack Overflow
版权声明:本文标题:Casting to string in JavaScript - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1736744570a1950700.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
toString()
would be the way to go. – asawyer Commented Jun 18, 2012 at 12:50toString
is semantically the clearest way to self document the fact that you are trying to get a string equivalent of an object.String(...)
is a little obtuse, andvalue + ""
is a bit of a hack. It also gives you the ability to override the defaulttoString
with a custom implementation if you ever needed to I suppose, as a minor side benefit. – asawyer Commented Jun 18, 2012 at 12:54+ ""
is the fastest according to the jsperf, so... it does it ni some other way I guess. – gdoron Commented Jun 18, 2012 at 13:05+ ""
doesn't work reliably.. e.g."" + 308e65
yields"3.08e+65"
– nnyby Commented Nov 14, 2013 at 17:10