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也是沒有逗號的。
给我你的怀抱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]
})()
或使用 ES6
的 let
關鍵字定義變數
曾经蜡笔没有小新2017-05-18 10:58:27
因為name是js的屬性名,屬於保留字段,for in循壞該字段的時候,是將其作為String來處理的,因此String裡的每個字符都會輸出