javascript - 依赖对象类型检查 Javascript 似乎是多余的

标签 javascript object if-statement typeof

有更好的方法吗?

如果我这样做:

    if(typeof someObject[bar][foo] == "function"){
        // Do something
    }

我收到一个 someObject[bar][foo] is not an object 错误,如果 bar 确实引用了 someObject[bar]不存在。这意味着代码假定您知道已定义 someObj[bar]。所以我的解决方案是这样的:

if(typeof someObj[bar] === "object"){
      if(typeof someObject[bar][foo] == "function"){
        // Do something
    }
}

如果我们想努力减少代码行数并编写良好、干净、可读的代码,那么代码就会显得多余且丑陋。有没有更好的方法来做到这一点而不必经过两个 if 点?我意识到这没什么大不了的,但我想知道是否有更好的方法。

最佳答案

恐怕没有简单的解释。

您期望对象在什么情况/情况下有条件地表现?给你一个我使用的例子......走向先进......并试图同时尽可能简单......

  • 您是否正在循环访问一整套类似数组的对象?
  • 您可以信任该对象,以便您已经知道会发生什么吗?
  • 不同数据类型的对象比较?

.[我需要一些编辑:s]

/**
  * @description Get an object from a list of objects by searching for a key:value pair
  * @param {Object} obj : -literal, json
  * @param {String} val : the value you seek
  * @param {String} key : the key
  * @param {Boolean} isTypeComparison : if set to true, the key and value will be checked against it's type as well
  */
  getObjectProperty: function (obj, val, key, isTypeComparison) {
      var property, o;

      for (property in obj) {
          if (obj.hasOwnProperty(property)) {
              if (typeof obj[property] === 'object') {
                  o = this.getObjectProperty(obj[property], val, key);
                  if (o) {
                      break;
                  }
              } else {
                  // found a property which is not an object
                  if (isTypeComparison) {
                      if (property === key && obj[property] === val) {
                          // we got a match
                          o = obj;
                          break;
                      }
                  } else {
                      if (property == key && obj[property] == val) {
                          // we got a match
                          o = obj;
                          break;
                      }
                  }
              }
          }
      }

      return o || undefined;
  },

为了给你的问题增加某种值(value),在上面的所有这些循环中,你会看到与期望的斗争。我使用此代码来搜索附加到列表的 ajax 联系人列表。因此,您肯定需要编写更多代码来满足深度和信任要求。

关于javascript - 依赖对象类型检查 Javascript 似乎是多余的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28487894/

相关文章:

javascript - jQuery data-* 与类选择器 - 性能?

javascript - 更改值时 Vue v-show 不呈现

javascript - 我们可以将类型分配给变量中声明的对象吗(模块化编程)

javascript - 如何同时从同一个构造函数调用所有对象?

javascript - 在 NetSuite 的 SuiteScript 中创建 Excel 文件

javascript - React 中的路由匹配

object - XRM/Dynamics CRM 2011 中 OrganizationServiceProxy 的连接/对象池

java - 有条件地添加额外的 else if 语句

python - Python 中如果变量小于或等于 0,则结​​束 while 循环

javascript - 如何使 <input type ="text"/> 的字符串/内容为其值?