javascript - js 陣列循環 怎麼會輸出逗號來了呢。 。 。
習慣沉默
習慣沉默 2017-05-18 10:56:27
0
6
717

#如題吧。 。 。求解為何

習慣沉默
習慣沉默

全部回覆(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學習者快速成長!