Все объекты Javascript являются ассоциативными массивами, поэтому это очень просто. На самом деле у вас есть несколько опций, потому что объект может иметь собственные свойства, свойства, которые он наследует от своего объекта-прототипа, свойства с неопределенными значениями и свойства со значениями «falsey» (undefined
, , 0
, ""
, или, конечно, false
). (Там разница между объектом не имеющим свойства и имеющим один с неопределенным значением.)
Проверки, чтобы увидеть, если объект имеет сам свойство: Вы используете obj.hasOwnProperty
:
function someName(obj) {
if (!obj ||
!obj.hasOwnProperty('myOneKey') ||
!obj.hasOwnProperty('myOtherKey'))
return false;
}
// Do other stuff
}
Проверку на см, если объект имеет свойство самого или через свой прототип: Вы используете propName in obj
:
function someName(obj) {
if (!obj ||
!('myOneKey' in obj) ||
!('myOtherKey' in obj))
return false;
}
// Do other stuff
}
Проверку, если объект обладает свойством (непосредственно или через прототип), и это не определено: Смотришь на неопределенное значение:
function someName(obj) {
if (!obj ||
typeof obj.myOneKey === "undefined" ||
typeof obj.myOtherKey === "undefined")
return false;
}
// Do other stuff
}
Проверка, чтобы увидеть, если свойство falsey (undefined
, null
, 0
, ""
, или, конечно, , false
), независимо от того, почему: Просто используйте !
:
function someName(obj) {
if (!obj ||
!obj.myOneKey ||
!obj.myOtherKey)
return false;
}
// Do other stuff
}
несмотря на это, использование:
var obj = {
myOneKey: 'fred',
myOtherKey: 'barney'
};
someName(obj);
И как я могу назвать эту функцию такими аргументами? –
И не могу ли я использовать оператор in вместо hasOwnProperty? –
@dfjhdfjhdf: Я добавлял обсуждение этого и различие между ними, поскольку вы задавали вопрос, по-видимому. :-) –