有没有办法让对象在javascript中返回false?
var obj = new Object();
console.log(!!obj) // prints "true" even if it's empty
答案 0 :(得分:24)
没有。未分配任何属性的对象不被视为“空”。
当表达式需要布尔值时,变量保存对象实例的事实足以导致javascript将变量视为true
的值。
修改强>
显然有一些细微差别要在这里查看其他答案。
null
不是 对象,它是对象的明显缺失。该问题涉及一个Object,即刚刚创建的Object。
答案 1 :(得分:10)
从ES8开始,不,您无法在JavaScript中将对象评估为false。
在规范中,所有布尔检查(? ! if等)取决于ToBoolean,
这非常非常简单:
如果输入的类型是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。
因为对象或空对象总是很简单。