#javascript #jquery #json #node.js
#javascript #jquery #json #node.js
Вопрос:
У меня есть объект JSON, который я извлекаю с сервера, иногда это действительно просто, например:
{ "urls": ["http://google.com", "http://bing.com"] }
Однако мне нужно проверить urls['tasks']['ipv6']
, содержит ли он true, код, который я использую:
if (urls['tasks']['ipv6'] === true) {
console.log('true');
}
Но поскольку urls [‘tasks’] не существует, я получаю следующую ошибку:
Uncaught TypeError: Cannot read property 'ipv6' of undefined
Есть ли простой способ сделать это? Мне очень сложно найти решение в Интернете. Я также пробовал jQuery $.isEmptyObject и был бы доволен решением на основе jQuery. Для справки я фактически использую этот код в node.js .
Ответ №1:
Это должно помочь вам.
if (urls["tasks"] amp;amp; urls["tasks"]["ipv6"] amp;amp; urls["tasks"]["ipv6"] === true)
{
...
}
Вы также можете добавить urls
проверку слева, если вам нужно, и вы можете опустить среднюю проверку urls["tasks"]["ipv6"]
, потому что, если это undefined
так, это определенно не так true
.
Дело в том, что вы должны сначала проверить, существуют ли свойства верхнего уровня, прежде чем переходить к детализации. И поскольку Javascript (как и большинство современных языков) не использует полную логическую эволюцию, это работает.
Комментарии:
1. Я думаю, что средний
urls["tasks"]["ipv6"]
тест не нужен. FWIW, то, что вы называете полной логической эволюцией , также называется оценкой короткого замыкания .2. @FelixKling: Я отредактировал свой ответ, чтобы включить эту информацию. Спасибо.
3. @FelixKling: оценка короткого замыкания на самом деле противоположна другому термину, который использовался в качестве переключателя компилятора в Turbo Pascal много лет назад … 🙂 Но вы правы, это примерно та же парадигма.
4. Ах, хорошо, спасибо 🙂 Я знал только другой термин (и я знал, что на самом деле все наоборот). В любом случае, это ясно 🙂
5. @RobertKoritnik Большое спасибо, он отлично работает, я понятия не имел, что он будет так оцениваться.
Ответ №2:
if (urls amp;amp; urls["tasks"] amp;amp; urls["tasks"]["ipv6"] === true) {
console.log("true");
}
Ответ №3:
проверьте typeof перед проверкой на true или false…
if(typeof(urls['tasks']) != "undefined")
{
if(typeof(urls['tasks']['ipv6']) != "undefined")
{
if(urls['tasks']['ipv6'] === true)
{
console.log("I am true amp; I exist");
}
}
}
Комментарии:
1. немного подробный, но все же недопустимый…
"undefined"
должны быть литералы, а не строки… или используйтеtypeof
оператор, который возвращает строки…