有没有办法让对象在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.
She*_*epy 10
从ES8开始,不,你不能在JavaScript中使对象的计算结果为false.
在规范中,所有布尔检查(? ! if等)都依赖于ToBoolean,
这非常非常简单:
如果输入的类型是object,则结果为true.没问题.没有的valueOf,无特殊情况.
无法在JavaScript中创建虚假对象.只有非对象可以是假的.
有时您可能会遇到返回false的类似对象的"东西".例如,空字符串一直像对象一样使用. document.all是另一个虚假的"对象".
然而,这些不是真实的对象.它们不能具有自定义属性,不能用作原型,并且不总是像对象那样行为,例如typeof或strict equal.
此行为最有可能保持向后兼容性.
不,但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"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)