JS如何判断key是否存在于JSON KVP结构中?

JS how to determine if key exists in JSON KVP structure?

对于 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

对吗?

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

Object.prototype.hasOwnProperty

如果 属性 存在并且值为 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

您的代码无效 - 您有 [ ] 个方括号,它们分隔了一个数组,但您似乎正试图将一个对象放入其中。你需要这个。

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]);