javascript - js 数组循环 怎么会输出逗号来了呢。。。
習慣沉默
習慣沉默 2017-05-18 10:56:27
0
6
797

如题吧。。。求解为何

習慣沉默
習慣沉默

全部回复(6)
Ty80

原因是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也是没有逗号的。

为情所困

朋友,name是关键字,不要用这个命名变量,
你可以typeof一下,会发现name是string,name1是object

给我你的怀抱

因为你都作用域是全局的 所以你定义的 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]
})()

或者使用 ES6let 关键字定义变量

仅有的幸福

因为在控制台直接输出把数组当成string了吧

左手右手慢动作

试了一下,好像是变量名的问题,只要是 name 就会输出每一个字符。具体原因不详

曾经蜡笔没有小新

因为name是js的属性名,属于保留字段,for in循坏该字段的时候,是将其作为String来处理的,因此String里的每个字符都会输出

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!