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

use*_*637 3 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]);
Run Code Online (Sandbox Code Playgroud)

关于jsfiddle的代码

Tom*_*icz 5

这个:

var foo = 'abc';
object[foo]
Run Code Online (Sandbox Code Playgroud)

相当于:

object.abc
Run Code Online (Sandbox Code Playgroud)

不过这个:

var foo = {unique_prop: 1};
object[foo] = 'value';
Run Code Online (Sandbox Code Playgroud)

没有多大意义(对象属性名称不能是对象文字).JS引擎将使用foo.toString()(返回eg "[object Object]"),所以实际上你是这样做的:

var foo = {unique_prop: 1};
object["[object Object]"] = 'value';
Run Code Online (Sandbox Code Playgroud)

这显然是一个错误或误解.MDN上的成员操作员解释了此行为:

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

但是你可以使用:

object[foo.unique_prop] = 'value';
Run Code Online (Sandbox Code Playgroud)

这相当于:

object[1] = 'value';
Run Code Online (Sandbox Code Playgroud)