首頁>Program>source

有没有比使用 ___ in object更簡單的方法 檢查物件的每个級別的存在以檢查單个成員的存在?

更簡潔:如何檢查 someObject.member.member.member.value 存在吗?

最新回復
  • 5月前
    1 #

    通常,您可以使用 if(property in object) ,但對於巢狀成員而言仍然很麻煩。

    您可以編寫一个函式:

    function test(obj, prop) {
        var parts = prop.split('.');
        for(var i = 0, l = parts.length; i < l; i++) {
            var part = parts[i];
            if(obj !== null && typeof obj === "object" && part in obj) {
                obj = obj[part];
            }
            else {
                return false;
            }
        }
        return true;
    }
    test(someObject, 'member.member.member.value');
    

    DEMO

  • 5月前
    2 #

    您還可以尝試/捕获TypeError吗?

    try {
      console.log(someObject.member.member.member.value);
    } catch(e) {
      if (e instanceof TypeError) {
        console.log("Couldn't access someObject.member.member.member.value");
        console.log(someObject);
      }
    }
    

  • 5月前
    3 #

    這是一種方法:http://jsfiddle.net/9McHq/

    var result = ((((someObject || {}).member || {}).member || {}).member || {}).value;
    alert( result );
    

  • 5月前
    4 #

    查看lodash-deep的 deepHas https://github.com/marklagendijk/lodash-deep#_deephascollection-propertypath

    這也是https://github.com/danielstjules/hoops

  • 5月前
    5 #

    if (someObject.member && someObject.member.member &&
        someObject.member.member.member && someObject.member.member.member.value) ...
    

    或類似地:

    var val = foo.bar && foo.bar.jim && foo.bar.jim.jam && foo.bar.jim.jam.value;
    

    如果任何特定值恰好是 null,則這將不会"起作用" , false0"" (一个空字元串),但最终值可能会例外,這似乎不太可能。

    另外,請註意 typeof ____ !== "undefined" 不是查看物件是否具有屬性的正確測試.相反,您應该使用 ___ in object ,例如 if ("member" in someObject) .這是因為您可以將屬性設置為 undefined的顯式值 ,這与使用 delete someObject.member删除它不同

  • php:如何對UTF-8字元串陣列进行排序?
  • winforms:如何在C#中向UserControl添加事件?