: 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
我想我是在问未定义
和未定义
之间有什么区别?
这是处理这种情况的正确方法吗?
return {
resLength : retRes.length,
id : (typeof browser.id === 'undefined') ? 0 : browser.id,
}
最佳答案
这只是语言语义的问题。访问不存在的对象属性的计算结果为未定义
。访问不存在的变量会引发ReferenceError
。
该语言可以设计为访问不存在的变量,其计算结果为未定义
,但谢天谢地,事实并非如此。
它也可以被设计为访问不存在的对象属性会引发 PropertyReferenceError
或其他错误,但事实并非如此。
顺便说一句,要检查变量是否已定义,可以检查是否typeof varname === 'undefined'
。这是另一个约定 - 您可以将不存在的变量粘贴在 typeof
中,并且 typeof
将计算为 'undefined'
而不是抛出 ReferenceError
。
如果您位于全局范围内,您还可以检查是否 this.varname === undefined
,因为此时属性访问规则适用。
关于javascript - 为什么 b ['x' ] || 0 当 x || 时求值0 没有...并且两者都是未定义的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22076575/