如何检查JavaScript对象或数组中是否存在特定键?
如果密钥不存在,并且我试图访问它,它会返回false吗?或者抛出错误?
如何检查JavaScript对象或数组中是否存在特定键?
如果密钥不存在,并且我试图访问它,它会返回false吗?或者抛出错误?
当前回答
值得注意的是,自从引入ES11以来,您可以使用零合并运算符,这大大简化了事情:
const obj = {foo: 'one', bar: 'two'};
const result = obj.foo ?? "Not found";
上面的代码将为foo中的任何“falsy”值返回“Not found”。否则将返回obj.foo。
请参见与零合并运算符组合
其他回答
我们可以使用-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);
};
虽然这不一定检查键是否存在,但它确实检查值的真实性。其中未定义和空值属于。
布尔(obj.foo)
这个解决方案最适合我,因为我使用了typescript,并且在obj或obj.hasOwnProperty('fo')中使用了像so'foo'这样的字符串检查密钥是否存在并不能为我提供智能感知。
在“array”世界中,我们可以将索引视为某种键。令人惊讶的是,in运算符(这是对象的好选择)也适用于数组。不存在键的返回值未定义
设arr=[“a”,“b”,“c”];//我们有索引:0,1,2删除arr[1];//在索引1处设置“空”arr.pop();//删除最后一项console.log(arr中的0,arr[0]);console.log(arr中的1,arr[1]);console.log(arr中的2,arr[2]);
要查找对象中是否存在键,请使用
对象.keys(obj).includes(key)
ES7包括检查数组是否包含项的方法,这是indexOf的一种更简单的替代方法。
答覆:
if ("key" in myObj)
{
console.log("key exists!");
}
else
{
console.log("key doesn't exist!");
}
说明:
in运算符将检查对象中是否存在密钥。如果检查值是否未定义:如果(myObj[“key”]==“undefined”),则可能会遇到问题,因为对象中可能存在具有未定义值的键。
出于这个原因,最好先使用in运算符,然后在知道键存在后比较键内的值。