有标题党的嫌疑,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);
网友评论