如何检查对象中是否存在对象

Ste*_*eve 8 javascript object member literals

似乎以下用于检查对象成员是否存在的技术会产生错误,因为在检查之前尚未声明'bar'父对象,这意味着我要么必须在检查之前声明它,要么使用两个'typeof'表达式,其中任何一个都是多余的代码:

var foo = {},
    newVal = (typeof foo.bar.myVal !== 'undefined' ? foo.bar.myVal : null );

Error: foo.bar is undefined
Run Code Online (Sandbox Code Playgroud)

那么,如何检查未声明对象中的成员是否存在而不会产生错误?

我喜欢javascript,但有时......

Din*_*one 10

只需使用以下代码即可完成:

var newVal = (foo && foo.bar && typeof foo.bar.myVal !== 'undefined') ? foo.bar.myVal : foo.bar.myVal
Run Code Online (Sandbox Code Playgroud)

属性为null或未定义,它将被评估为false,因此上面的代码将只处理第一个'false'语句.

  • 这似乎是JavaScripts失败之一.我们应该能够在不首先检查父对象是否存在的情况下检查对象子的存在. (3认同)

dav*_*vin 6

var newVal = ('foo' in window && // could be typeof foo !== 'undefined' if you want all scopes
             'bar' in foo &&
             'myVal' in foo.bar) ? foo.bar.myVal : null;
Run Code Online (Sandbox Code Playgroud)

为了公平对待javascript,它几乎就像自然语言一样.