console.log(typeof {}.hasOwnProperty); // function
Единственными значениями фальши в JS являются 0, false, null, undefined, пустая строка и NaN.
Вы можете быть смущены возвращаемым значением операторов var =. Они всегда будут отображаться как undefined в консоли Chrome:
> var obj = {}
undefined
> var x = 100
undefined
> var y = "potato"
undefined
Просто потому, что оператор var = возвращает undefined, не означает, что значение было undefined. Хотя без var присваивания возвращают присваиваемое значение:
> obj = {}
{}
> x = 100
100
> y = "potato"
"potato"
Ответ 2
Пустым объектом не является undefined, только объекты типа undefined 1 равны undefined:
1 Можно переопределить undefined, если не использовать строгий режим. Проверка с помощью typeof или против void 0 безопаснее.
Ответ 3
Вы определили empty_obj как объект, который, как оказалось, не имеет никаких определенных свойств, но он определен. По этой причине empty_obj приводит к истинному значению и возвращает в присваивании.
var myobj = {}; //defined
var myobj2; //undefined
if(myobj == undefined)
{
console.log("myobj is undefined");
}
if(myobj2 == undefined)
{
console.log("the 2nd one is undefined");
}
if(myobj)
{
console.log("myobj isn't falsy");
}
if(myobj2)
{
console.log("myobj2 isn't false");
}