为什么b ['x'] || 0评估x ||时的情况0不...并且两者都未定义?

时间:2014-02-27 17:58:37

标签: javascript node.js

: a = {a: 1, b: 2}
    Object {a: 1, b: 2}

: b = {a: 0, b: a['c'] || 0}
    Object {a: 0, b: 0}

: c = {a: 0, b: d || 0}
    ReferenceError: d is not defined

: a['c']
    undefined

我想我在问not definedundefined之间有什么区别?

这是处理这种情况的正确方法吗?

return {
            resLength : retRes.length,
            id : (typeof browser.id === 'undefined') ? 0 : browser.id,
       }

1 个答案:

答案 0 :(得分:4)

这只是语言语义的问题。访问不存在的对象属性的计算结果为undefined。访问不存在的变量会引发ReferenceError

可以设计语言,以便访问不存在的变量的计算结果为undefined,但不是,感谢上帝。

它也可以设计为访问不存在的对象属性会引发PropertyReferenceError或其他东西,但事实并非如此。


另外,要检查变量是否已定义,您可以检查是否typeof varname === 'undefined'。这是另一个惯例 - 您可以在typeof中粘贴不存在的变量,typeof将评估为'undefined'而不是抛出ReferenceError

如果您在全球范围内,您还可以检查是否this.varname === undefined,从那时起适用了属性访问规则。