为什么我的空对象文字记录为false?

时间:2018-06-03 22:55:03

标签: javascript

我不太明白为什么if语句会评估true,但console.log语句不会评估{}

我仔细检查了MDN documentation,他们说console.log是一个真正的值。那么为什么我的==声明不同意?

我确实尝试使用===代替var test = {}; console.log(test); console.log(test === true); console.log({} === true); if ({}) { console.log('What the ?'); } 作为最后一个沟渠。

<img src="image/cache/catalog/<dir>/<file-name>" alt="<name>" class="img-thumbnail">

3 个答案:

答案 0 :(得分:7)

function slice2D(arr) { let store = []; for (let i = 0; i < arr.length; i++) { store.push(arr[i].slice()); } return store; } let pasteArr = slice2D(copyArr); 不是检查某个值是否与您检查的方式相同的方法。 例如,以下所有都是真实的。但是,如果您尝试使用===执行===,则会产生true而不是真实值false

true

&#13;
&#13;
if (true)
if ({})
if ([])
if (42)
if ("foo")
if (new Date())
if (-42)
if (3.14)
if (-3.14)
if (Infinity)
if (-Infinity)
&#13;
&#13;
&#13;

您可以使用console.log(true === true); console.log({} === true); console.log([] === true); console.log(42 === true); console.log("foo" === true); console.log((new Date()) === true); console.log(-42 === true); console.log(3.14 === true); console.log(-3.14 === true); console.log(Infinity === true); console.log(-Infinity === true);检查真相。例如

&#13;
&#13;
!!value
&#13;
&#13;
&#13;

同样,我们可以检查上面所有的真相如下:

&#13;
&#13;
var test = {};
console.log(!!test === true);
&#13;
&#13;
&#13;

答案 1 :(得分:0)

{}在JavaScript中很简单,这就是if块被执行的原因。

但是,它不是严格true所以三重相等比较会给你错误。

更多信息:

答案 2 :(得分:0)

===strict equality。它首先检查其操作数的类型是否相同,然后检查它们是否具有相同的值。

{} === true中,左侧的类型为object,而右侧的类型为boolean,因此评估为false

许多值不等于true,但仍然是真实的。同样,有些值是假的,但不等于false