JS如何确定JSON KVP结构中是否存在密钥?

时间:2016-01-31 20:00:00

标签: javascript arrays json keyvaluepair

对于像这样结构的JSON:

descriptors =   {"key1" :    { "propertyA": "propertyA-value1",
                               "propertyB": "propertyB-value1" },
                 "key2" :    { "propertyA": "propertyA-value2",
                               "propertyB": "propertyB-value2" }}

如何确定给定密钥是否存在?

# argKey is function arg supplied by caller
descriptor = descriptors[argKey]

if descriptor != undefined
  # do something with descriptor

是吗?

3 个答案:

答案 0 :(得分:1)

您的代码无效 - 您有[ ]括号,用于分隔数组,但您似乎正在尝试将对象放入其中。你需要这个。

descriptors =   {"key1" :    { "propertyA": "propertyA-value1",
                               "propertyB": "propertyB-value1" },
                 "key2" :    { "propertyA": "propertyA-value2",
                               "propertyB": "propertyB-value2" }};

除此之外,要测试是否存在属性,您可以使用in运算符。

'key1' in descriptors;
>> true

由于测试键只是一个字符串,如果事先不知道它,你可以将它存储在一个变量中。

var keyName = 'key1';
if (keyName in descriptors) {
    // do something
}

根据您在评论中的问题,要访问该属性的值,您可以说

descriptors[keyName];

// More deeply nested example
var keyName = 'key1';
var propName = 'propertyA';
console.log(descriptors[keyName][propName]);

答案 1 :(得分:0)

这不是一个有效的JavaScript对象。如果要测试对象上是否存在属性,请使用:

Object.prototype.hasOwnProperty

答案 2 :(得分:0)

如果该属性存在且值为undefined,则您的解决方案将无效。请使用typeofhasOwnProperty进行检查:

var obj = {
    prop: undefined
};

console.log(obj.prop === undefined); // true
console.log(typeof obj.prop === undefined); // false
console.log(!obj.hasOwnProperty("prop")); // false