如何检查JavaScript对象或数组中是否存在特定键?
如果密钥不存在,并且我试图访问它,它会返回false吗?或者抛出错误?
如何检查JavaScript对象或数组中是否存在特定键?
如果密钥不存在,并且我试图访问它,它会返回false吗?或者抛出错误?
当前回答
如果您使用的是underscore.js库,那么对象/数组操作就变得简单了。
在您的情况下,可以使用_.has方法。例子:
yourArray = {age: "10"}
_.has(yourArray, "age")
返回true
But,
_.has(yourArray, "invalidKey")
返回false
其他回答
可选链接运算符:
常量发票={客户:{地址:{城市:“foo”}}console.log(发票?.客户?.地址?.城市)console.log(发票?.客户?.地址?.街道)console.log(发票?.xyz?.address?.city)
查看支持的浏览器列表
对于那些在项目中包含lodash的人:有一个lodash_.get方法,它试图获取“深层”键:
获取对象路径处的值。如果解析值未定义,在其位置返回defaultValue。
var对象={‘a’:〔{‘b’:{‘c’:3}}〕};控制台日志(_.get(对象,'a[0].b.c'),//=>3_.get(对象,['a','0','b','c']),//=>3_.get(对象,'a.b.c'),//=>未定义_.get(对象,'a.b.c','default')//=>'default')<script src=“https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js“></script>
这将有效地检查是否定义了该键,无论该键有多深,如果未定义该键,则不会引发可能会损害程序流的错误。
接受的答案指的是对象。小心使用Array上的in运算符查找数据而不是键:
("true" in ["true", "false"])
// -> false (Because the keys of the above Array are actually 0 and 1)
测试数组中的现有元素:查找项目是否在JavaScript数组中的最佳方法?
检查未定义性不是测试密钥是否存在的准确方法。如果键存在但值实际上未定义怎么办?
var obj={key:undefined};console.log(obj[“key”]!==未定义);//false,但密钥存在!
您应该改用in运算符:
var obj={key:undefined};console.log(obj中的“key”);//true,无论实际值如何
如果要检查键是否不存在,请记住使用括号:
var obj={not_key:undefined};console.log(!(obj中的“key”));//如果对象中不存在“key”,则为trueconsole.log(obj中的!“key”);//不要这样做!它相当于“obj中的false”
或者,如果要特别测试对象实例的财产(而不是继承的财产),请使用hasOwnProperty:
var obj={key:undefined};console.log(obj.hasOwnProperty(“key”));//真的
有关hasOwnProperty和key未定义的方法之间的性能比较,请参阅以下基准:
"key" in obj
可能只测试与数组键非常不同的对象属性值
我们可以使用-hasOwnProperty.call(obj,key);
underscore.js方式-
if(_.has(this.options, 'login')){
//key 'login' exists in this.options
}
_.has = function(obj, key) {
return hasOwnProperty.call(obj, key);
};