有更好的方法吗?
如果我这样做:
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/