wayofthefuture
wayofthefuture

Reputation: 9405

Is there a difference between String(x) and ''

Is there a difference? Will string 2 inherit different object prototypes?

var s1 = 1234 + '';
var s2 = String(1234);

//s1.someNewFunc();   error?
//s2.someNewFunc();

Thanks

Upvotes: 2

Views: 86

Answers (4)

chiliNUT
chiliNUT

Reputation: 19573

Javascript allows you to treat primitive values as though they were objects. It does so by doing an on-the-fly coercion of the primitive to an object. That's why, even though primitives have no properties, something like this is perfectly fine:

"abcde".substr(1,3); //bcd
true.valueOf(); //true

Upvotes: 0

pdenes
pdenes

Reputation: 802

Both will behave the same way.

Also, there is a nice explanation about string primitives vs. objects here:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String

Distinction between string primitives and String objects

[...] String literals (denoted by double or single quotes) and strings returned from String calls in a non-constructor context (i.e., without using the new keyword) are primitive strings. JavaScript automatically converts primitives to String objects, so that it's possible to use String object methods for primitive strings. [...]

Upvotes: 1

bhspencer
bhspencer

Reputation: 13560

var s1 = 1234 + '';

Creates a string literal. This is a javascript language primitive.

var s2 = String(1234);

The String() function also returns a primitive string literal. s2 will have the same members as s1 because they are both the same type.

However

var s3 = new String("1234");

Will create an object of type String rather than a primitive string literal. This does have different members and is of type object.

Upvotes: 4

Alon
Alon

Reputation: 2929

Same thing!

var s1 = 1234 + '';
var s2 = String(1234);

typeof s1   //string
typeof s2   //string

Upvotes: 2

Related Questions