Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Javascript weird behavior with new String() object reference [duplicate]

The behaviour can be seen in this little snippet (execute it as a global script):

var name = {};
name.FirstName = 'Tom';
alert(name.FirstName);

The alert yields undefined in Chrome but works in IE and Firefox. I also get a weird value when I do

alert(name);
like image 720
Pialy Tapaswi Avatar asked May 25 '26 20:05

Pialy Tapaswi


2 Answers

window.name has a special purpose, and is supposed to be a string. Chrome seems to explicitly cast it to a string, so var name = {}; actually ends up giving the global variable name (i.e. window.name) a value of "[object Object]". Since it's a primitive, properties (name.FirstName) won't "stick."

To get around this issue, don't use name as a global variable.

like image 50
Dagg Nabbit Avatar answered May 28 '26 10:05

Dagg Nabbit


Your name variable is actually window.name, because top-level variables declared with var are attached to the global object.

The HTML5 spec requires that window.name is a DOMString. This means that the value of window.name can only be a sequence of characters, not an object.

In Chrome, an attempt to use window.name to store anything except a primitive string will coerce the value to a primitive string. For example:

window.name = {};
window.name === "[object Object]"; // true

You can avoid this problem by using a name variable that is not in the top-level scope:

(function() {
    var name = {};
    // this `name` is not `window.name`
    // because we're not in the top-level scope

    console.log(name);
})();
like image 23
apsillers Avatar answered May 28 '26 08:05

apsillers



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!