检查是否定义了JSON对象

时间:2014-04-29 09:05:55

标签: javascript jquery json

我有一个JSON对象

var values = {"220":{"287":19,"total":19},"":{"240":76,"total":76},"total":95};

我无法检查是否定义了values[item]['total']

项是从selectbox值得到的变量,基本上我正在尝试if else语句,我需要检查是否定义了values[item]['total'],我有2个场景

  1. 项目是220,或者是另一个进入“”的数字(json对象是用php生成的,在这种情况下它有220和“”,因为它没有“颜色”值,只有大小,但是通常它有正确的值)

  2. 在我的案例中,项目值是{}括号中的值 - 例如287和240

  3. 此代码:

    if ( typeof values[item]['total'] === 'undefined' ) {
        console.log('undefined');
    }
    

    抛出:Uncaught TypeError: Cannot read property 'total' of undefined.

3 个答案:

答案 0 :(得分:2)

item的值与将返回null的任何属性不匹配时,将导致该错误,然后您尝试访问它的属性,但您不能,因为该项为null。

你应该做的是检查两个部分是否未定义:

if ( typeof values[item] === 'undefined' || typeof values[item]['total'] === 'undefined') {
    console.log('undefined');
}

Here is a working example

答案 1 :(得分:1)

使用hasOwnProperty()

怎么样?
 if ( typeof values[item]!== 'undefined' && 
      values[item].hasOwnProperty('total')===false ) 
     { 
        console.log('Total undefined'); 
     }

注意:确保为项目传递字符串。所以它将被编译为项目[" 220"]而不是项目[220]。在JavaScript中,对象索引器由字符串名称

访问

答案 2 :(得分:1)

您可以使用in来检查:

if (item in values && 'total' in values[item]) {
    console.log('defined');
}