对象[foo]术语是什么意思?

时间:2012-02-01 12:26:34

标签: javascript

我很困惑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]);

code on jsfiddle

3 个答案:

答案 0 :(得分:5)

此:

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';

这显然是一个错误或误解。 Member Operators上的MDN中解释了此行为:

  

属性名称必须是字符串。这意味着非字符串对象不能用作对象中的键。任何非字符串对象(包括数字)都通过toString方法进行类型转换为字符串。

但您可以使用:

object[foo.unique_prop] = 'value';

相当于:

object[1] = 'value';

答案 1 :(得分:2)

object.whatever_x_is x相同,foo.toString()bar.toString()相同,因为(除非被覆盖)在通用名称上调用toString object将生成一个通用的“is a object”字符串,例如"[object Object]"

答案 2 :(得分:1)

object[foo] = 'value';

尝试将对象用作成员名称,这会导致.toString()调用;

'value'被分配到object["[object Object]"],当您尝试阅读alert(object[bar]);同一toString()时,bar也是一个对象,因此您引用{ {1}}再次返回object["[object Object]"]'。