Why does JavaScript split() produce different output with different variable names?

javascript

Solution

`name` is a property of `window`. It appears that when you try to set that property to an array, the keys are joined with a comma (the result of calling `toString` on an array). So you are actually setting the `window.name` property to the concatenation of each element of `document.location.hostname.split(".")`, separated by commas.

Here's a screenshot from my Chrome console demonstrating what happens:

The reason `name[0]` then results in `p` is that you can access the characters of strings using square brackets:

name = "hello,world";
console.log(name[0]); //"h"

Edit

As others have mentioned, this will only be the case in the global scope. You are free to declare a variable named `name` inside a descendant scope. Although, obviously, omitting the `var` keyword in this case would still result in you accessing `window.name`:

function example() {
    var name = ["hello", "world"];
    console.log(name); //["hello", "world"]
}

Problem

Following is some codes and output from the Chrome Developers' Console Case 1: ``` var myarr = document.location.hostname.split("."); //typed undefined //output myarr[0] //typed "ptamz" //output: ONE ``` Case 2: ``` var name = document.location.hostname.split("."); //typed undefined //output name[0] //typed "p" //output: TWO ``` Why are the two outputs (commented Output: ONE, and Output: TWO) different? Screenshot:

Original source

Related problems