簡體   English   中英

在JavaScript中,如何返回一個布爾值,指示一個鍵是否存在於JSON對象中?

[英]In JavaScript, how can I return a boolean value indicating whether a key is present in a JSON object?

我有一個相當簡單的問題:在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;

in運算符可以告訴您對象或其原​​型鏈中的任何對象是否存在鍵。 hasOwnProperty函數可以告訴您該對象本身是否存在該鍵(而不是其原型鏈中的任何對象)。

if ("foo" in obj) {
   // `obj` or an ancestor has a key called "foo"
}

if (obj.hasOwnProperty("foo")) {
   // `obj` has a key called "foo"
}

在你的例子中,你使用哪一個並不重要,因為你的對象只是一個Object{} => new Object() ),所以它沒有太多的原型鏈。 但它可能是相關的,例如,如果您正在查看已添加到其他對象的自定義屬性,例如:

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警告為true,因為所有數組都從Array.prototype繼承push屬性(它指的是將值推送到數組末尾的函數)。 #2警告錯誤,因為push屬性來自原型,而不是實際上是對象本身。 #3和#4警告為true,因為foo屬性存在於對象本身上。

邊注

你所擁有的不是JSON,它是Javascript Object Literal Notation,其中JSON是一個子集。 您已使用文字(就像“字符串文字”)來創建對象並將其分配給變量。 我只提到這一點,因為對象文字可以包含更多內容(包括函數)並具有更廣泛的語法。 但是,示例中{}內的部分有效的JSON,因為您在鍵和值上都使用了雙引號,在任何地方都沒有包含“undefined”,並且不包含任何函數。 :-)

在您的示例中,如果屬性的值為false ,則found將為false ..即使找到它,所以您不會知道它在那里:)

如果你想繼續使用你的例子(上面提到的問題),你可以使用一個小技巧:

return !!found;

哪個會將找到的轉換為布爾值。

我會選擇這樣做:

return keyToLookFor in myJSON;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM