Есть ли способ различать свойство unset и свойство, установленное в undefined?

Скажем, у меня есть объект testObject = {a: undefined}. Если я тогда console.log(testObject.a), я получаю undefined. Но то же самое происходит, если я console.log(testObject.b), которого не существует. Есть ли способ в JavaScript различать a и b здесь? Я прошу в основном из любопытства, я не имею никакого смысла.

Ответ 1

hasOwnProperty() метод возвращает логическое значение, указывающее, имеет ли объект указанное свойство как собственное (не наследуемое) свойство.

В данном случае -

  testObject = {a: undefined};

  testObject.hasOwnProperty('a') //true
  testObject.hasOwnProperty('b') //false

Ответ 2

Фактически вы можете отличить дополнительное условие перед проверкой с помощью оператора in

if(a in testObject) {
  //yes .. now check whether it is undefined or not
}

Ответ 3

testObject.hasOwnProperty('a')

Обратите внимание, что это будет работать только для таких объектов, как вы показываете; унаследованные свойства от прототипа не пройдут этот тест (который является точкой hasOwnProperty).