0

我有一个带有以下标记的对象:

Object {workout: Object}
   workout: Object
   1/12/2015: Array[3]
       0: "workoutTitle0"
       1: "workoutTitle1"
       2: "workoutTitle2"
    2/12/2015: Array[3]
    3/12/2015: Array[3]
    4/12/2015: Array[3]
    5/12/2015: Array[3]
    6/12/2015: Array[3]
    7/12/2015: Array[3]

我想检查例如字段 10/12/2015 是否存在 - 如果存在我想加载该字段持有的数组,如果不为该字段创建新的空数组。

我尝试了这段代码,但每次都会出错,即使字段不存在:

function isEmpty(obj) {
    var prop = '10/12/2015'
    for( prop in obj) {
        if(obj.hasOwnProperty(prop))
            return false;
    }
    return true;
}

如果 JSFiddle 在这里:

https://jsfiddle.net/x9dnwgwc/3/

4

1 回答 1

2

我想检查例如字段 10/12/2015 是否存在

你太辛苦了,只是:

if (obj.hasOwnProperty('10/12/2015')) {
    // It exists in the object itself
}

...对于“自己的”财产,或

if ('10/12/2015' in obj) {
    // It exists in the object or one of its prototypes
}

...对于它自己的属性从原型继承的属性。

我尝试了这段代码,但每次都会出错,即使字段不存在:

function isEmpty(obj) {
    var prop = '10/12/2015'
    for( prop in obj) {
        if(obj.hasOwnProperty(prop))
            return false;
    }
    return true;
}

您的

var prop = '10/12/2015';

行声明prop变量,并为其赋值'10/12/2015';但随后您立即使用以下内容覆盖该值:

for( prop in obj) {

循环要做的第一件事for-in就是覆盖prop.

你的循环真正做的是检查对象是否有任何“自己的”属性(如果有,它返回false)或只有它从原型继承的属性(如果有,它返回'true')。

于 2015-03-19T17:15:24.667 回答