【问题标题】:What does the object[foo] term mean?object[foo] 术语是什么意思?
【发布时间】:2012-02-01 12:26:34
【问题描述】:

我对@9​​87654322@ 一词的含义感到困惑。有什么提示吗?我知道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

【问题讨论】:

  • 对不起,我没有完全理解这个问题,而且无法撤消。
  • @ÁlvaroG.Vicario 如果问题已关闭,则可以撤消它。它可以重新打开。 :)
  • 大声笑,不用担心我什至不知道是你

标签: javascript


【解决方案1】:

这个:

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 OperatorsMDN 中进行了解释:

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

但是你可以使用:

object[foo.unique_prop] = 'value';

相当于:

object[1] = 'value';

【讨论】:

【解决方案2】:

它与object.whatever_x_is 相同,其中xfoo.toString(),这将与bar.toString() 相同,因为(除非被覆盖)在通用对象上调用toString 将生成通用“是对象”字符串如"[object Object]"

【讨论】:

    【解决方案3】:
    object[foo] = 'value';
    

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

    'value' 被分配给object["[object Object]"],当您尝试读取alert(object[bar]); 时,同样的toString() 发生,因为bar 也是一个对象,所以您再次引用object["[object Object]"] 并返回'value '。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-17
      • 1970-01-01
      • 1970-01-01
      • 2014-05-06
      • 1970-01-01
      相关资源
      最近更新 更多