name也是JavaScript的关键保留字

有标题党的嫌疑,name不是关键字,是window下自有的属性。

最近看《学习JavaScript数据结构与算法》一书,在看到第4章数组,有一个击鼓传花的代码,如下:

var name = ['John', 'Jack', 'Camila', 'Ingrid', 'Carl'];
console.log(name);

在Chrome、Firefox中输入这段代码。看看输出的是什么?
和我们期望的完全不同,结果是: 字符串类型的'John,Jack,Camila,Ingrid,Carl'。

这是为什么呢?猜想控制台输入var name,也许会访问或操作window.name,所以用谷歌搜索 JavaScript保留字window.name
看到菜鸟教程(http://www.runoob.com/js/js-reserved.html) 的说明:

JavaScript 对象、属性和方法
您也应该避免使用 JavaScript 内置的对象、属性和方法的名称作为 Javascript 的变量或函数名
Array   Date    eval    function    hasOwnProperty
Infinity    isFinite    isNaN   isPrototypeOf   length
Math    NaN     name    Number  Object
prototype   String  toString    undefined   valueOf

name是JavaScript内置的对象,这句话我猜测意思是想表达全局变量window中具有如上的属性(各种W3C教程虽引导新手,也有误人子弟的嫌疑),所以在全局下声明name,会造成name访问不正常。
为了证实猜想,验证代码如下:

window.name = ['John', 'Jack', 'Camila', 'Ingrid', 'Carl'];
["John", "Jack", "Camila", "Ingrid", "Carl"]
window.name
"John,Jack,Camila,Ingrid,Carl"

所以改成下面这样就好了

var nameList = ['John', 'Jack', 'Camila', 'Ingrid', 'Carl'];
console.log(nameList);

你可能感兴趣的:(name也是JavaScript的关键保留字)