首頁  >  問答  >  主體

javascript - js 陣列循環 怎麼會輸出逗號來了呢。 。 。

#如題吧。 。 。求解為何

習慣沉默習慣沉默2735 天前799

全部回覆(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
  • 取消回覆