首页 > js变量以及对象定义问题

js变量以及对象定义问题

无意中看到了这样的一段代码:

<script>
    var obj = {
        fname: "John",
        lname: "Doe",
        age: 25
    };
    var txt = "";
    for (i in obj) {
        txt = txt + obj[i];
    }
    console.log(txt);
</script>

这里的输出是:JohnDoe25, 我就感觉有点不是很明白,为什么i没有初始化,比如var i,而且obj是一个对象,然而obj[i] 可以这样用吗?


这里的i是键呀。所以obj[i] 获取到的就是键值。例如:obj['fname']


通过var定义的变量,其变量环境就在最靠近它的作用域。
js也可以直接声明的变量,默认为全局变量。但是在严格模式中,这样定义会报错。


对于循环for(i in a)这种中的i是全局变量,因为没有声明,所以会自动定向为window.i,在嵌套循环中这么写容易状态失控。所以还是声明比较好


  1. 对象和数组(其实数组也可以看做对象)都可以通过 obj.property或者 obj[property]的方式访问内部属性,或者元素。

  2. 同意@AlexChen的观点,写不写var都一样。不过我习惯写上。说不定哪天js就支持块级作用于了,嘿嘿。


其实循环时写不写那个var 没有区别。原因是 js木有块级作用域 PS:es6(es2015) 中有了let。

所以你写循环时有木有 var 都一样。 不写var 少3个键盘键入而已。当然如果你用了emmet之类的就根本不存在了。

建议还是写上。好看点。


我日这个代码太误导人了 如果写成for(var key in obj)你懂了么?

【热门文章】
【热门文章】