在JavaScript中,如何返回指示JSON对象中是否存在键的布尔值?
我有一个相当简单的问题:在Javascript中,如何返回布尔值(如果在JSON中找到布尔值)而不是实际值 例如:在JavaScript中,如何返回指示JSON对象中是否存在键的布尔值?,javascript,json,Javascript,Json,我有一个相当简单的问题:在Javascript中,如何返回布尔值(如果在JSON中找到布尔值)而不是实际值 例如: var myJSON = { "foo" : "bar", "bar" : "foo" }; var keyToLookFor = "foo"; var found = myJSON[keyToLookFor]; if (found) { // I know I
var myJSON = {
"foo" : "bar",
"bar" : "foo"
};
var keyToLookFor = "foo";
var found = myJSON[keyToLookFor];
if (found) {
// I know I can test if the string exists in the if
}
// but is there a way I could just return something like:
return found;
// instead of testing found in the if statement and then returning true?
您必须使用“in”关键字进行检查:
if (keyToLookFor in myJSON) {
}
因此,要简化它,您可以使用:
return keyToLookFor in myJSON;
在您的示例中,如果属性的值为
false
,found
将为false。。即使它被找到了,你也不会知道它在那里:)
如果您想继续使用您的示例(针对上述问题),可以使用以下小技巧:
return !!found;
将找到的转换为布尔值
我会选择做:
return keyToLookFor in myJSON;
中的
操作符可以告诉您对象或其原型链中的任何对象中是否存在键。hasOwnProperty
函数可以告诉您该键是否存在于对象本身中(不存在于其原型链上的任何对象中)
在您的示例中,使用哪一个并不重要,因为您的对象只是一个对象
({}
=>新对象()
),所以它没有太多的原型链。但它可能是相关的,例如,如果您正在查看添加到其他对象的自定义特性,例如:
var a = [1, 2, 3, 4];
a.foo = "testing";
alert("push" in a); // 1. alerts "true"
alert(a.hasOwnProperty("push")); // 2. alerts "false"
alert("foo" in a); // 3. alerts "true"
alert(a.hasOwnProperty("foo")); // 4. alerts "true"
#1以上警告为真,因为所有数组都从Array.prototype
继承push
属性(它指的是将值推送到数组末尾的函数)#2警报为false,因为push
属性来自原型,而不是对象本身#3和#4警报为true,因为对象本身存在foo
属性
旁注
这里没有JSON,而是Javascript对象文字符号,JSON是其中的一个子集。您已经使用了一个文本(就像“字符串文本”)来创建一个对象,并将其分配给了一个变量。我之所以提到这一点,是因为对象文字可以包含更多内容(包括函数)和更广泛的语法。在您的示例中,{}
中的部分是有效的JSON,但是,因为您在键和值上都使用了双引号,所以在任何地方都不包含“undefined”,也不包含任何函数。:-) 这可能看起来很奇怪,但我有一种情况,我只需要返回字符串是否存在于JSON中。不是键的实际值。一点也不奇怪,这类事情一直在发生——需要测试属性是否存在,不需要找到它的值(如果它的值是false
或undefined
,等等:-),这将是一个棘手的问题。或者也可以是if('foo'在myJSON中)
如果您想确保foo
确实在对象上(不在其原型链中)myJSON.hasOwnProperty('foo')
它可以被限定为JSON,不是吗?它只使用了JSON允许的对象文字符号子集?@Paul:只有{}
中的位(开头没有var myJSON=
,结尾没有;
)可以称为JSON,当然。我要回去编辑,因为我认为我根本没有表达我的观点(更不用说好了)。:-)当然-通过将该位赋给名为myJSON
的变量,我认为他称之为JSON;)
var a = [1, 2, 3, 4];
a.foo = "testing";
alert("push" in a); // 1. alerts "true"
alert(a.hasOwnProperty("push")); // 2. alerts "false"
alert("foo" in a); // 3. alerts "true"
alert(a.hasOwnProperty("foo")); // 4. alerts "true"