【问题标题】:Using dot notation with number passed into function使用点表示法将数字传递给函数
【发布时间】:2017-04-26 00:10:11
【问题描述】:

如果我有一个对象和函数

var obj {
    "1234": {"example": "sample"},
    "5678": {"example": "sample"}
}    

function example(num, str) {
    if obj[num].hasOwnProperty(str) {
        //manipulate property
    }
    return obj;
}

然后调用函数,

obj(1234, "example")

为什么我必须写 obj[num] 而不是 obj.num?不应该接受点表示法,因为传递的值将始终是一个整数并且没有引号,即 obj.1234 可以工作,但不能 obj."string"?

【问题讨论】:

  • 旁注:如果需要,您可以在对象初始化程序中删除属性名称的引号。数字文字在那里有效:var obj = { 1234: {"example": "sample"} ...

标签: javascript


【解决方案1】:

为什么我必须写 obj[num] 而不是 obj.num?

因为obj[num] 采用num(例如1234)并将该值用作属性名称,但obj.num 使用"num"(字面意思)作为属性名称。括号与点是 JavaScript 解析器如何知道您是按字面意思给出属性名称(点表示法)还是使用要使用结果的表达式(括号表示法)。


(旁注:当然,当我们使用foo[1] 时,我们的字面意思是foo 中的属性1。但从解析器的角度来看,我们实际上是在其中使用了一个表达式。)

【讨论】:

    猜你喜欢
    • 2015-09-16
    • 2018-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-20
    相关资源
    最近更新 更多