对象可以是假的吗?

时间:2010-01-17 14:01:48

标签: javascript

有没有办法让对象在javascript中返回false?

var obj = new Object();

console.log(!!obj) // prints "true" even if it's empty

9 个答案:

答案 0 :(得分:24)

没有。未分配任何属性的对象不被视为“空”。

当表达式需要布尔值时,变量保存对象实例的事实足以导致javascript将变量视为true的值。

修改

显然有一些细微差别要在这里查看其他答案。

null不是 对象,它是对象的明显缺失。该问题涉及一个Object,即刚刚创建的Object。

答案 1 :(得分:10)

从ES8开始,不,您无法在JavaScript中将对象评估为false。

在规范中,所有布尔检查(? ! if等)取决于ToBoolean
这非常非常简单:

  • 如果未定义,null,false,零,NaN或空字符串,则返回false。
  • 其他一切都是真的(对象,代理,符号等)

如果输入的类型是object,则结果为true。没问题。没有valueOf,没有特例。

无法在JavaScript中创建虚假对象。 只有非物体可能是假的。

有时你可能遇到类似对象的东西"返回false。 例如,空字符串始终与对象一起使用。 document.all是另一个虚假的对象"。

然而,这些不是真实的对象。 它们不能具有自定义属性,不能用作原型,并且不总是表现得像对象,例如类型或严格相等。

此行为最有可能用于向后兼容。

答案 2 :(得分:5)

没有。但null会转换为false

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

要查看对象是否包含任何属性,请使用(从How do I count a JavaScript object's attributes?无耻地复制):

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

答案 3 :(得分:5)

null“object”(真值)将返回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);

答案 4 :(得分:3)

没有

不确定你为什么要这样,但有一种方法你可以做喜欢这个但是它有点hacky ......

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

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

答案 5 :(得分:2)

我认为,对于第一个!,您将obj强制转换为布尔值并否定其值 - 如果obj为null,则导致true,并且使用第二个!否定它试。

答案 6 :(得分:1)

强制 进入基元时,我们可以覆盖tutorials以使对象看起来是假的,例如在MPI_Bcast期间。

然而,当我们使用==将它强制为布尔值时, 不会 显示为false,因此它在一般情况下不起作用

!!

答案 7 :(得分:1)

对象到布尔值的转换很简单。所有对象(包括数组和函数) 转换为true。即使对于包装对象new Boolean(false))是对象 而不是原始值,因此它将转换为 true

答案 8 :(得分:0)

在你的情况下

console.log(!obj);将返回false。

因为对象或空对象总是很简单。