JavaScript - 从对象获取属性或在未定义时抛出错误

时间:2018-05-31 21:46:01

标签: javascript properties

我想知道是否有一个标准库或外部库(例如lodash)功能基本上遵循:

defer

我在lodash文档中搜索了各种关键词,但还没有找到类似的东西。

2 个答案:

答案 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;
&#13;
&#13;