: 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 defined
和undefined
之间有什么区别?
这是处理这种情况的正确方法吗?
return {
resLength : retRes.length,
id : (typeof browser.id === 'undefined') ? 0 : browser.id,
}
答案 0 :(得分:4)
这只是语言语义的问题。访问不存在的对象属性的计算结果为undefined
。访问不存在的变量会引发ReferenceError
。
可以设计语言,以便访问不存在的变量的计算结果为undefined
,但不是,感谢上帝。
它也可以设计为访问不存在的对象属性会引发PropertyReferenceError
或其他东西,但事实并非如此。
另外,要检查变量是否已定义,您可以检查是否typeof varname === 'undefined'
。这是另一个惯例 - 您可以在typeof
中粘贴不存在的变量,typeof
将评估为'undefined'
而不是抛出ReferenceError
。
如果您在全球范围内,您还可以检查是否this.varname === undefined
,从那时起适用了属性访问规则。