PHP中文网2017-05-18 10:58:27
原因是name
特殊,在赋值的时候浏览器强制转成了string。
var name = [0, 1, 2]
console.log(name) // 输出 "0,1,2"
因为window有内置属性name
,所以你在全局下声明name其实就是在给window.name赋值。关于window.name。类似的属性还有status
,所以你在全局下声明name其实就是在给window.name赋值。关于window.name。类似的属性还有status
等
所以你用name1
就没有问题。其实你在非全局下用name,或者在node环境的全局下用name也是没有逗号的。
给我你的怀抱2017-05-18 10:58:27
因为你都作用域是全局的 所以你定义的 name
变量相当于 window.name
它是一个特殊的全局变量 任何值赋值给它都会进行 toString
操作
这里你将数组给 window.name
实际你可以输出看一下会发现它并不是数组而是字符串
而恰好字符串是可以用循环遍历的 所以输出了逗号
var name = [0, 1, 2]
console.log(name) // 0,1,2
console.log(typeof name === 'string') // true
解决方法:不使用全局作用域 加一层自执行函数
(function() {
var name = [0, 1, 2]
console.log(name) // [0, 1, 2]
console.log(Object.prototype.toString.call(name)) // [object Array]
})()
或者使用 ES6
的 let
关键字定义变量
曾经蜡笔没有小新2017-05-18 10:58:27
因为name是js的属性名,属于保留字段,for in循坏该字段的时候,是将其作为String来处理的,因此String里的每个字符都会输出