2014-12-05 52 views
2

我正在评估在今天控制台的东西,当我输入,并成为好奇以下是瞎搞:傻JS比较

1 === 1 === 1评估为false

1 == 1 == 1评估为true

是第一次比较试图评估整体的1 === 1类型?

什么是这种现象的原因?

+0

第1'说1 =布尔值true,但 第二转换Boolean如果1 – MatthewMartin 2014-12-05 15:48:21

+1

[1 === 1 === 1 => true === 1 => false]和[x = true; X == 1 =>真] http://www.w3schools.com/js/js_comparisons.asp – SilentTremor 2014-12-05 16:08:27

+0

肯定,这是很有意义的。这也意味着'0 == 0 == 1'将是真实的,以及随后。 – 2014-12-05 16:11:08

回答

1

简单的答案是,==尝试类型转换而===没有。

的两个实施例中评价的顺序是相同的,并且是这样的:

(1 === 1) === 1 
(1 == 1) == 1 

所以第=====比较完成,其结果被用作操作数的第二===== 。就像这样:

(1 === 1) === 1 
// v   v 
    (true) === 1 


(1 == 1) == 1 
// v  v 
    (true) == 1 

所以你可以看到,我们现在真的在谈论:

true === 1 

true == 1 

所以不同的结果,从这样一个事实正如我上面提到,该===不会尝试转换任何类型,而==会尝试将它们转换为匹配的类型。

所以无需转换,则显然true === 1将是false因为他们是不一样的价值,但在true == 1的情况下,true被转换为数字,和值true的数字转换始终最终成为数1,所以现在这样:

true == 1 

被转换成这样的:

1 == 1 

这是清楚没错。

,所以该完整演练是这样的:

(1 == 1) == 1 
// v  v 
    (true) == 1 
// v  v 
    1 == 1