如何在jQuery中检查未定义的值-无法读取属性错误

时间:2019-03-17 18:30:50

标签: jquery

我试图设置一个值,如果它存在于json feed中。由于有时并非如此,因此我确实收到以下错误:

(index):703 Uncaught TypeError: Cannot read property 'price_min' of null
    at Object.success ((index):703)
    at i (jquery-1.12.0.min.js:2)
    at Object.fireWith [as resolveWith] (jquery-1.12.0.min.js:2)
    at y (jquery-1.12.0.min.js:4)
    at XMLHttpRequest.c (jquery-1.12.0.min.js:4)

我的代码如下:

 if (obj.stats.price_min !== undefined){
      $('#price_from').val(obj.stats.price_min);
 }

这不是测试未定义的正确方法吗?

1 个答案:

答案 0 :(得分:0)

仅尝试访问不存在的属性将引发错误,您应该使用onpointer{something}检查其存在:

obj.hasOwnProperty
var obj = {stats: null};

if (obj.hasOwnProperty('stats') && obj.stats && obj.stats.hasOwnProperty('price_min')) {
  $('#price_from').val(obj.stats.price_min);
}

obj = {stats: {price_min: '200'}}

if (obj.hasOwnProperty('stats') && obj.stats && obj.stats.hasOwnProperty('price_min')) {
  $('#price_from').val(obj.stats.price_min);
}

您也可以通过检查<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <input id="price_from" />来做到这一点,但首先应确保它不是undefined

null
var obj = {stats: null};

if (obj.stats !== undefined && obj.stats && obj.stats.price_min !== undefined) {
  $('#price_from').val(obj.stats.price_min);
}

obj = {stats: {price_min: '200'}}

if (obj.stats !== undefined && obj.stats && obj.stats.price_min !== undefined) {
  $('#price_from').val(obj.stats.price_min);
}