Genau wie der Titel. . . Finden Sie heraus, warum
原因是name特殊,在赋值的时候浏览器强制转成了string。
name
var name = [0, 1, 2] console.log(name) // 输出 "0,1,2"
因为window有内置属性name,所以你在全局下声明name其实就是在给window.name赋值。关于window.name。类似的属性还有status等
status
所以你用name1就没有问题。其实你在非全局下用name,或者在node环境的全局下用name也是没有逗号的。
name1
朋友,name是关键字,不要用这个命名变量,你可以typeof一下,会发现name是string,name1是object
因为你都作用域是全局的 所以你定义的 name 变量相当于 window.name 它是一个特殊的全局变量 任何值赋值给它都会进行 toString 操作这里你将数组给 window.name 实际你可以输出看一下会发现它并不是数组而是字符串而恰好字符串是可以用循环遍历的 所以输出了逗号
window.name
toString
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 关键字定义变量
ES6
let
因为在控制台直接输出把数组当成string了吧
试了一下,好像是变量名的问题,只要是 name 就会输出每一个字符。具体原因不详
因为name是js的属性名,属于保留字段,for in循坏该字段的时候,是将其作为String来处理的,因此String里的每个字符都会输出
原因是
name
特殊,在赋值的时候浏览器强制转成了string。因为window有内置属性
name
,所以你在全局下声明name其实就是在给window.name赋值。关于window.name。类似的属性还有status
等所以你用
name1
就没有问题。其实你在非全局下用name,或者在node环境的全局下用name也是没有逗号的。朋友,name是关键字,不要用这个命名变量,
你可以typeof一下,会发现name是string,name1是object
因为你都作用域是全局的 所以你定义的
name
变量相当于window.name
它是一个特殊的全局变量 任何值赋值给它都会进行
toString
操作这里你将数组给
window.name
实际你可以输出看一下会发现它并不是数组而是字符串而恰好字符串是可以用循环遍历的 所以输出了逗号
解决方法:不使用全局作用域 加一层自执行函数
或者使用
ES6
的let
关键字定义变量因为在控制台直接输出把数组当成string了吧
试了一下,好像是变量名的问题,只要是 name 就会输出每一个字符。具体原因不详
因为name是js的属性名,属于保留字段,for in循坏该字段的时候,是将其作为String来处理的,因此String里的每个字符都会输出