【问题标题】:Checking definedness of nested object's fields in Javascript检查 Javascript 中嵌套对象字段的定义性
【发布时间】:2016-10-04 03:21:49
【问题描述】:

拿一个像这样的对象

book.chapter.paragraph.sentence.word

假设您要检索某个单词

book[6][3][15][3]

为了确定引用一个现有的词,你真的需要进行这样的检查吗...

if(typeof book[6] !== "undefined" && typeof book[6][3] !== "undefined" && typeof book [6][3][15] !== "undefined" && typeof book[6][3][15][3] !== "undefined") ...

...或者有更好的方法吗?

【问题讨论】:

    标签: javascript arrays javascript-objects


    【解决方案1】:

    通常,对于嵌套属性的动态访问,您需要进行迭代检查。但是,您也可以使用 try catch 并解析错误消息 ugliness 以访问未定义的属性。比如

    try{
    var book = {page111: {paragraph2:{sentence4:{word12:"test"}}}};
        list = ["page112","paragraph2","sentence4","word12"],
        word = book[list[0]][list[1]][list[2]][list[3]];
        console.log(word);
    }catch(e){console.log(list[list.indexOf(e.message.match(/\'(.*)\'/)[1])-1], "is undefined")}

    我不得不承认它很丑。

    【讨论】:

    • 您说需要进行迭代检查:事实上,这是我的第一个想法。我认为这将是一个残暴的解决方案,但如果这是你暗示的规范,我会这样做。我认为这种迭代检查可能有一个内置函数,但我不知何故错过了......
    猜你喜欢
    • 1970-01-01
    • 2016-08-29
    • 1970-01-01
    • 2011-08-15
    • 2013-02-26
    • 1970-01-01
    • 2022-01-15
    • 2014-07-11
    • 1970-01-01
    相关资源
    最近更新 更多