如果对象 属性 的状态检查并不总是存在,则会中断该功能

If state check for object property that is not always there breaks the function

我正在构建一个天气应用程序。用户提交邮政编码或城市名称 + 州并关闭 $.getJSON 函数。

我试图实现的功能是检查用户是否给出了错误的值。例如,如果用户输入 New York, New YorkBaltimore90210,则用户将获得预测。但是,如果用户输入了无法找到的错误内容,例如 999999999,则应提醒用户并且该函数应重置输入以供用户重试。

我认为 if 语句并不总是需要一个 else 来让我通过。问题是对于格式正确的请求,data.response.error.description 不存在,因此该函数会挂起并退出。 如果这个对象 属性 不存在,我该如何解决? 我尝试了一些 else 语句,但似乎只检查了 data.response.error.description等于其他东西。

我做错了什么?

var url = 'http://api.wunderground.com/api/7434225907cbf087/forecast/q/';
var userInput;
var end = '.json';
$(document).ready(function() {
  $('#button').on('click', function() {
    $('#myDiv').html("");
    userInput = ($('#input').val());
    $.getJSON(url + userInput + end, function(data) {
      console.log("user input: " + userInput);
      console.log(data);
      if (data.response.error.description ==
        "No cities match your search query") {
        $('#input').val("");
        alert("Your input was incorrect, try again!");
        return;
      };

      $('#userSubmission').html("");
      $('#userSubmission').html(userInput);
      //var highFahrenheit = data.forecast.simpleforecast.forecastday[0].high.fahrenheit;
      //console.log(data.forecast.simpleforecast.forecastday[0])
      //console.log(highFahrenheit);
      $('#myDiv').html("Today's high is " + highFahrenheit +
        " degrees Fahrenheit");
    });
    $('#input').val("");
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button id="button">Click Me</button>
<input type="text" placeholder="Location" id="input">
<div id="userSubmission"></div>
<div id="myDiv"></div>
<div id="verify"></div>

data.response 的情况下,data.hasOwnProperty("response") 可以告诉您 data 是否有一个名为 response 的键。

如果它有函数将 return true 否则将 return false.

向前走,确保永不中断。

data &&
data.hasOwnProperty("response") &&       
data.response.hasOwnProperty("error") &&
data.response.error.hasOwnProperty("description") &&
data.response.error.description == "No cities match your search query"

永远不会坏。

在检查子 属性 之前,检查包含的 属性 是否存在:

if (data.response && data.response.error && data.response.error.description == "No cities match your search query")