为什么typeof等于这个for循环中的字符串?

时间:2016-03-02 05:26:10

标签: javascript

如果我在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)

}

2 个答案:

答案 0 :(得分:8)

Javascript遵循功能级别范围,窗口对象(全局)有属性name,在控制台中,它引用窗口的属性,因为它在global context(window.name)中执行

使用IIFE(function(){ /*your code */ })())获取预期输出,name不再属于windowfunction(){ }有自己的scope

&#13;
&#13;
(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;
&#13;
&#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)

}