Пустой объект не определен, как этот var empty_obj = {}
.
Неопределенное будет ложным. Но я замечаю, что empty_obj || 3
empty_obj || 3
вернет empty_obj
не 3
.
Это почему?
Пустой объект не определен, как этот var empty_obj = {}
.
Неопределенное будет ложным. Но я замечаю, что empty_obj || 3
empty_obj || 3
вернет empty_obj
не 3
.
Это почему?
Пустой объект не undefined.
console.log({} === undefined); // false
console.log(typeof {}); // object
Это истинное значение:
if ({}) console.log('truthy'); // truthy
Он даже имеет некоторые свойства:
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"
Пустым объектом не является undefined, только объекты типа undefined
1 равны undefined:
[[email protected]~]node
> undefined == {}
false
> typeof {}
'object'
> typeof undefined
'undefined'
1 Можно переопределить undefined
, если не использовать строгий режим. Проверка с помощью typeof
или против void 0
безопаснее.
Вы определили 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");
}