首页  >  问答  >  正文

javascript - js 数组循环 怎么会输出逗号来了呢。。。

如题吧。。。求解为何

習慣沉默習慣沉默2732 天前798

全部回复(6)我来回复

  • PHP中文网

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

    回复
    0
  • 为情所困

    为情所困2017-05-18 10:58:27

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

    回复
    0
  • 给我你的怀抱

    给我你的怀抱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]
    })()

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

    回复
    0
  • 仅有的幸福

    仅有的幸福2017-05-18 10:58:27

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

    回复
    0
  • ringa_lee

    ringa_lee2017-05-18 10:58:27

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

    回复
    0
  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-05-18 10:58:27

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

    回复
    0
  • 取消回复