如果我在jsFiddle中运行此代码,它正确地记录了typeof
,前六个是strings
,那么第七个索引是object
。但是,在我的个人本地代码中,所有七个索引都是string
,如果您将此代码复制并粘贴到控制台中,它也会将所有索引记录为string
。这是为什么?
jsFiddle:https://jsfiddle.net/xcuje23q/
JS:
var someArray = ['Mike','Brett','Kim','Steve','Amy','Tanner',{name:'Oliver'}];
for(var i = 0; i < someArray.length; i++){
var name = someArray[i];
console.log(typeof name)
}
答案 0 :(得分:8)
Javascript遵循功能级别范围,窗口对象(全局)有属性name
,在控制台中,它引用窗口的属性,因为它在global context(window.name)
中执行
使用IIFE((function(){ /*your code */ })()
)获取预期输出,name
不再属于window
。 function(){ }
有自己的scope
(function() {
var someArray = ['Mike', 'Brett', 'Kim', 'Steve', 'Amy', 'Tanner', {
name: 'Oliver'
}];
for (var i = 0; i < someArray.length; i++) {
var name = someArray[i];
console.log(typeof name)
}
})()
&#13;
<script src="http://gh-canon.github.io/stack-snippet-console/console.min.js"></script>
&#13;
修改:有关window.name
WebKit Bugzilla
答案 1 :(得分:2)
您可能还有另外一种选择。不要使用variable name
。
请检查此fiddle
var someArray = ['Mike','Brett','Kim','Steve','Amy','Tanner',{name:'Oliver'}];
for(var i = 0; i < someArray.length; i++){
console.log(typeof someArray[i])
// o/p 6 string and 1 object
}
OR
var someArray = ['Mike','Brett','Kim','Steve','Amy','Tanner',{name:'Oliver'}];
for(var i = 0; i < someArray.length; i++){
var name2 = someArray[i]; // change name of the variable.
console.log(typeof name2)
}