[英]What does the object[foo] term mean?
我很困惑object[foo]
术语指的是什么。 任何提示? 我知道bar['unique_prop']
和bar.unique_prop
指的是2
var foo = {unique_prop: 1};
var bar = {unique_prop: 2};
var object = {};
object[foo] = 'value';
alert(object[bar]);
这个:
var foo = 'abc';
object[foo]
相当于:
object.abc
不过这个:
var foo = {unique_prop: 1};
object[foo] = 'value';
没有多大意义(对象属性名称不能是对象文字)。 JS引擎将使用foo.toString()
(返回例如"[object Object]"
),所以实际上你这样做:
var foo = {unique_prop: 1};
object["[object Object]"] = 'value';
这显然是一个错误或误解。 MDN上的成员操作员解释了此行为:
属性名称必须是字符串。 这意味着非字符串对象不能用作对象中的键 。 任何非字符串对象(包括数字)都通过toString方法进行类型转换为字符串 。
但是你可以使用:
object[foo.unique_prop] = 'value';
这相当于:
object[1] = 'value';
它与object.whatever_x_is
相同,其中x
是foo.toString()
,它与bar.toString()
相同,因为(除非被覆盖)在泛型对象上调用toString
将生成泛型“is a object”字符串,如"[object Object]"
object[foo] = 'value';
尝试使用对象作为成员名称,这会导致.toString()
调用;
当你试图读取alert(object[bar]);
'value'
被赋值给object["[object Object]"]
alert(object[bar]);
同样的toString()
发生,因为bar
也是一个对象,所以再次引用object["[object Object]"]
并返回'value
'。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.