关于javascript对象的问题,此处为什么不能用user.key?

img

这里的key没有引号啊,为什么用user[key]啊?用user.key就是undefined

在JS中,有两种方式访问对象属性:

  • 通过"."
  • 通过"[]"

在述说区别:

  • "."表示法一般作为静态对象使用时来存取属性
  • “[ ]”表示法在动态存取属性时就非常有用

再说通俗点,就是用"[]"可以用变量,而"."只能用属性名
例如定义一个对象:`

obj = {name="Test"}

console.log(obj.name);
console.log(obj["name"]);
// 也可以
var t = "name";
console.log(obj[t]);

回到你的问题:

  • 你直接用user.key,那么它会去找user对象的key属性,显然它没有,所以结果就是undefined
  • 用user[key],因为key是变量,等于"name","age"这些字符串,而这些就是user的属性名,当然存在

另外要说一点,用"[]"的好处是当对象的属性比较特殊的时候,也可以取到,比如包含了特殊字符:

obj = {"com.abc":"Test"}

如果用"."取值,obj.com.abc就会报undefined,但是用obj["com.abc"]就可以访问!

因为你的key是变量,所以不能使用".",这个只能是在常量属性下才能使用的,你上面那个是使用了循环,使用了变量,所以只能使用user[key],而不能用user.key