如何检查JavaScript对象或数组中是否存在特定键?

如果密钥不存在,并且我试图访问它,它会返回false吗?或者抛出错误?


当前回答

在我的例子中,我想检查LUIS返回的NLP元数据,它是一个对象。我想检查一个字符串“FinancialRiskIntent”的键是否作为元数据对象中的键存在。

我试图将需要检查的嵌套对象作为目标->data.meta.precision.intents(仅出于我自己的目的,您的对象可以是任何对象)我使用以下代码检查密钥是否存在:

const hasKey=data.meta.prprediction.intents中的“财务风险意图”;if(hasKey){console.log('密钥存在。');}其他{console.log('密钥不存在。');}

这是在检查我最初寻找的特定密钥。

希望这一点对某人有所帮助。

其他回答

"key" in obj

可能只测试与数组键非常不同的对象属性值

yourArray.indexOf(yourArrayKeyName)>-1

fruit = ['apple', 'grapes', 'banana']

fruit.indexOf('apple') > -1

true


fruit = ['apple', 'grapes', 'banana']

fruit.indexOf('apple1') > -1

假的


对于严格的对象键检查:

const object1 = {};
object1.stackoverflow = 51; 
console.log(object1.hasOwnProperty('stackoverflow')); 



output: true 

检查未定义性不是测试密钥是否存在的准确方法。如果键存在但值实际上未定义怎么办?

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未定义的方法之间的性能比较,请参阅以下基准:

答覆:

if ("key" in myObj)
{
    console.log("key exists!");
}
else
{
    console.log("key doesn't exist!");
}

说明:

in运算符将检查对象中是否存在密钥。如果检查值是否未定义:如果(myObj[“key”]==“undefined”),则可能会遇到问题,因为对象中可能存在具有未定义值的键。

出于这个原因,最好先使用in运算符,然后在知道键存在后比较键内的值。

要查找对象中是否存在键,请使用

对象.keys(obj).includes(key)

ES7包括检查数组是否包含项的方法,这是indexOf的一种更简单的替代方法。