object[key]和object.key在JavaScript中的行为不同。为什么?

object[key]和object.key在JavaScript中的行为不同。为什么?,javascript,object,Javascript,Object,我有这段代码,但当我运行它时,“typeof object[key]”显示为数字,但“typeof object.key”显示为未定义。这种奇怪行为的原因是什么 var object = {a:3,b:4}; for (var key in object){ console.log(typeof object[key], typeof object.key); } 在循环中,变量键将先计算为“a”,然后计算为“b” 在括号表示法中,key是该局部变量的名称,并对其进行计算 因此,当您计

我有这段代码,但当我运行它时,“typeof object[key]”显示为数字,但“typeof object.key”显示为未定义。这种奇怪行为的原因是什么

var object = {a:3,b:4};
for (var key in object){
    console.log(typeof object[key], typeof object.key);
}

在循环中,变量
将先计算为“a”,然后计算为“b”

在括号表示法中,
key
是该局部变量的名称,并对其进行计算

因此,当您计算
object[key]
时,您将得到
object[“a”]
,然后是
object[“b”]


但是,点符号使用名称(“键”)本身,而不是
key
的值。因此,当您编写
object.key
时,您通常会查找名为“key”的属性。而
对象
没有,因此它是
未定义的

正确的等价物是
对象。key
==
对象[“key”]
。括号表示法需要一个字符串。但为什么object.key显示为未定义?因为您尚未为其赋值。var对象={a:3,b:4,键:???};我假设key是在迭代过程中保持“a”和“b”的var你是对的,key在迭代过程中保持“a”和“b”,但是object.key是不同的变量来证明它使用这个var对象={a:3,b:4,key:'object'的key变量};然后在console.log(object[key]、'-',object.key)中,您将看到:“3-对象的键变量”和“4-对象的键变量”