无意中看到了这样的一段代码:
<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,在嵌套循环中这么写容易状态失控。所以还是声明比较好
对象和数组(其实数组也可以看做对象)都可以通过 obj.property或者 obj[property]的方式访问内部属性,或者元素。
同意@AlexChen的观点,写不写var都一样。不过我习惯写上。说不定哪天js就支持块级作用于了,嘿嘿。
其实循环时写不写那个var
没有区别。原因是 js木有块级作用域
PS:es6(es2015) 中有了let。
所以你写循环时有木有 var
都一样。 不写var
少3个键盘键入而已。当然如果你用了emmet之类的就根本不存在了。
建议还是写上。好看点。
我日这个代码太误导人了 如果写成for(var key in obj)你懂了么?