Как проверить, был ли создан анонимный объект как таковой:
var myObj = {
prop1: 'no',
prop2: function () { return false; }
}
действительно ли определен prop2?
prop2
всегда будет определяться как функция, но для некоторых объектов это не требуется и не будет определено.
Я попробовал то, что было предложено здесь: Как определить, есть ли у нативного объекта JavaScript свойство/метод?, но я не думаю, что это работает для анонимных объектов.
Ответ 1
typeof myObj.prop2 === 'function';
сообщит вам, определена ли функция.
if(typeof myObj.prop2 === 'function') {
alert("It a function");
} else if (typeof myObj.prop2 === 'undefined') {
alert("It undefined");
} else {
alert("It neither undefined nor a function. It a " + typeof myObj.prop2);
}
Ответ 2
Вы хотите hasOwnProperty()
:
var myObj1 = {
prop1: 'no',
prop2: function () { return false; }
}
var myObj2 = {
prop1: 'no'
}
console.log(myObj1.hasOwnProperty('prop2')); // returns true
console.log(myObj2.hasOwnProperty('prop2')); // returns false
Ответ 3
3 Опции
-
typeof myObj.prop2 === 'function'
, если имя свойства не является динамическим/сгенерированным
-
myObj.hasOwnProperty('prop2')
, если имя свойства является динамическим и проверяет, является ли оно прямым свойством (а не цепочкой прототипов).
-
'prop2' in myObj
, если имя свойства является динамическим, и проверьте цепочку прототипов
Ответ 4
Что вы подразумеваете под "анонимным объектом"? myObj
не является анонимным, поскольку вы назначили литерал объекта переменной. Вы можете просто проверить это:
if (typeof myObj.prop2 === 'function')
{
// do whatever
}
Ответ 5
Один из способов сделать это должен быть if (typeof myObj.prop1 != "undefined") {...}
Ответ 6
Я знаю, что это старый вопрос, но я удивлен, что все ответы гарантируют, что метод существует, и это функция, когда OP только хочет проверить на существование. Чтобы узнать, что это функция (как уже говорили многие), вы можете использовать:
typeof myObj.prop2 === 'function'
Но вы также можете использовать как условие:
typeof myObj.prop2
Или даже:
myObj.prop2
Это так, потому что функция оценивается как true
, а undefined
- как false
. Поэтому, если вы знаете, что если член существует, то это может быть только функция, вы можете использовать:
if(myObj.prop2) {
<we have prop2>
}
Или в выражении:
myObj.prop2 ? <exists computation> : <no prop2 computation>