Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JavaScript中,如何返回指示JSON对象中是否存在键的布尔值?_Javascript_Json - Fatal编程技术网

在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

我有一个相当简单的问题:在Javascript中,如何返回布尔值(如果在JSON中找到布尔值)而不是实际值

例如:

 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"