对象可以是假的吗?

Dav*_*ing 22 javascript

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

var obj = new Object();

console.log(!!obj) // prints "true" even if it's empty
Run Code Online (Sandbox Code Playgroud)

Ant*_*nes 26

否.未分配任何属性的对象不被视为"空".

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

编辑

在这里查看其他答案显然有一些细微差别需要澄清.

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

  • 请注意,即使`new Boolean(false)`也被认为是'true`.所以不,所有对象都是真的. (3认同)

She*_*epy 10

从ES8开始,不,你不能在JavaScript中使对象的计算结果为false.

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

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

如果输入的类型是object,则结果为true.没问题.没有的valueOf,无特殊情况.

无法在JavaScript中创建虚假对象.只有非对象可以是假的.

有时您可能会遇到返回false的类似对象的"东西".例如,空字符串一直对象一样使用. document.all是另一个虚假的"对象".

然而,这些不是真实的对象.它们不能具有自定义属性,不能用作原型,并且不总是像对象那样行为,例如typeof或strict equal.

此行为最有可能保持向后兼容性.

  • 哦,“document.all”这个东西很有趣。虽然,它看起来确实是一个真实的物体。您*可以*向它添加自定义属性,它*可以*用作原型,并且它*行为*就像一个严格相等的对象。它仅在与“typeof”、loose equal 或“ToBoolean”一起使用时假装“未定义”。尽管如此,除非您在需要一个虚假对象时牺牲一个新的“document.implementation.createHTMLDocument().all”,否则这可能根本没有帮助。 (2认同)

ken*_*ytm 5

不,但null会转换为false.

> typeof(null)
"object"
> null instanceof Object
false
> !!null
false
Run Code Online (Sandbox Code Playgroud)

要查看对象是否包含任何属性,请使用(从如何计算JavaScript对象的属性中无耻地复制):

function isEmpty (obj) {
    for (var k in obj) 
       if (obj.hasOwnProperty(k))
           return false;
    return true;
}
Run Code Online (Sandbox Code Playgroud)

  • 澄清事情:`null`是'Null'类型的原始值而不是对象; 这只是'typeof`有点破碎 (3认同)

tva*_*son 5

null"object"(真值)将返回false.

var obj = null;

console.log(!!obj);
Run Code Online (Sandbox Code Playgroud)

如果您想检查它是否没有属性,您可以尝试:

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