我想知道是否有一个标准库或外部库(例如lodash)功能基本上遵循:
defer
我在lodash文档中搜索了各种关键词,但还没有找到类似的东西。
答案 0 :(得分:1)
要检查属性是否存在,您只需编写if(x in options)...
存在库以使繁琐或困难的操作变得简单,这是一个简单的操作,不需要库,您不可能找到它加入了一个图书馆。
虽然.hasOwnProperty()
可以工作,但它只会测试直接附加到问题对象的属性,而in
方法也会测试继承属性。
但是,要小心抛出错误。由于性能原因,您通常不希望这样做。返回代码或消息会更好。
var options = {
foo:42,
bar:"doesn't matter"
};
function propTest(propName, obj){
// Instead of throwing an error, return a value that indicates success or not
return (propName in obj) ? true : false;
}
console.log(propTest("foo", options));
console.log(propTest("bar", options));
console.log(propTest("baz", options));

答案 1 :(得分:0)
您可以编写一个迭代对象键的函数,并查找未定义的函数
function CheckObjectProperties(obj)
{
for (var key in obj)
{
if(!obj[key])
{
throw new Error('Object has one or more undefined members');
}
}
}

或者如果你想检查一个未知物体是否可以沿着这条线做某事。这种方法更具动态性和可重用性:D
function CheckObjectForProperties(obj, arraryOfStringProperties)
{
for(let i = 0; i < arraryOfStringProperties.length; i++)
{
let key = arraryOfStringProperties[i];
if(!obj[key])
{
throw new Error('Member not Found in Given Object.');
}
}
}
let myObject = {
x : 1,
y : 2,
z : undefined
}
let requiredProperties = ['x', 'y', 'z'];
CheckObjectForProperties(myObject, requiredProperties);
&#13;