我不太明白为什么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">
答案 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
if (true)
if ({})
if ([])
if (42)
if ("foo")
if (new Date())
if (-42)
if (3.14)
if (-3.14)
if (Infinity)
if (-Infinity)
&#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);
检查真相。例如
!!value
&#13;
同样,我们可以检查上面所有的真相如下:
var test = {};
console.log(!!test === true);
&#13;
答案 1 :(得分:0)
{}
在JavaScript中很简单,这就是if块被执行的原因。
但是,它不是严格true
所以三重相等比较会给你错误。
更多信息:
答案 2 :(得分:0)
===
是strict equality。它首先检查其操作数的类型是否相同,然后检查它们是否具有相同的值。
在{} === true
中,左侧的类型为object
,而右侧的类型为boolean
,因此评估为false
。
许多值不等于true
,但仍然是真实的。同样,有些值是假的,但不等于false
。