Подтвердить что ты не робот

Может ли объект быть ложным?

Есть ли способ сделать объект return false в javascript?

var obj = new Object();

console.log(!!obj) // prints "true" even if it empty
4b9b3361

Ответ 1

Нет. Объект, который не имеет назначенных свойств, не считается "пустым".

Тот факт, что переменная содержит экземпляр объекта, достаточно, чтобы заставить javascript обрабатывать переменную как имеющую значение true, когда выражение требует булевского значения.

Edit

Очевидно, есть некоторые нюансы, которые нужно прояснить, глядя на другие ответы здесь.

null не является объектом, это отличная нехватка объекта. Этот вопрос относится к объекту, который только что был создан.

Ответ 2

Как и в ES8, no, , вы не можете заставить объект оценивать значение false в JavaScript.

В спецификации все логические проверки (? ! if и т.д.) зависит от ToBoolean,
который очень, очень прост:

  • False, если undefined, null, false, ноль, NaN или пустая строка.
  • Верно для всего остального (Object, Proxy, Symbol и т.д.)

Если тип ввода является объектом, результат будет истинным. Вопрос не задан. Нет valueOf, нет специального случая.

Невозможно создать объект фальсификации в JavaScript. Только не объекты могут быть ложными.

Иногда вы можете столкнуться с объектно-подобным "материалом", который возвращает false. Пустая строка, например, используется как объект все время. document.all - еще один "объект" фальшивки.

Однако это не реальные объекты. Они не могут иметь пользовательские свойства, не могут использоваться в качестве прототипа и не всегда ведут себя как объект, например. typeof или строго равный.

Такое поведение, скорее всего, останется для обратной совместимости.

Ответ 3

Нет. Но null преобразуется в false.

> typeof(null)
"object"
> null instanceof Object
false
> !!null
false

Чтобы узнать, содержит ли объект какие-либо свойства, используйте (бесстыдно скопированные из Как мне подсчитать атрибуты объекта JavaScript?):

function isEmpty (obj) {
    for (var k in obj) 
       if (obj.hasOwnProperty(k))
           return false;
    return true;
}

Ответ 4

Объект "null" (действительно значение) возвращает false.

var obj = null;

console.log(!!obj);

Если вы хотите проверить, нет ли у него свойств, вы можете попробовать:

var obj = new Object();
var empty = true;
for (var p in obj) {
    if (obj.hasOwnProperty(p)) {
       empty = false;
       break;
    }
}
console.log(empty);

Ответ 5

Нет.

Не уверен, зачем вам это нужно, но есть способ, которым вы могли бы сделать что-то вроде этого, но это вроде хакки...

var obj = {
    toString: function() { return ''; }
};

alert(!! (''+obj));

Ответ 6

Я думаю, что при первом ! вы бросаете obj в логическое и отрицаете его значение, что приводит к true, если obj равно null, а второй ! снова отрицает его.

Ответ 7

Мы можем перезаписать Object.prototype.valueOf, чтобы объект выглядел ложным, когда он принудительно в примитиве, например, во время ==.

Однако он не будет отображаться как ложный, когда мы вынуждаем его в boolean, используя !!, поэтому он не работает в общем случае.

var obj = {
    valueOf: function () {
        return false
    }
}

> obj == false
true               // Good, we fooled them!

> !!obj
true               // Not so good, we wanted false here

> Boolean(obj)
true               // Not so good, we wanted false here

Ответ 8

В вашем случае

console.log(!obj); вернет false.

потому что объект или пустой объект всегда правдивый.

Ответ 9

В консоли:

> ({})?true:false
< true

Итак, ответ - нет.