为什么1 == 1 == 1返回true,“1”==“1”==“1”返回true,“a”==“a”==“a”返回false?
function a() { return (1 == 1 == 1); } function b() { return ("1" == "1" == "1"); } function c() { return ("a" == "a" == "a"); }  我在Chrome的控制台中testing了上面的代码,出于某种原因, a()返回true, b()返回true, c()返回false。 
这是为什么?
因为您正在比较第一个相等的(布尔)结果和(非布尔)第三个值。
 在代码中, 1 == 1 == 1相当于(1 == 1) == 1相当于true == 1 。 
这意味着三种方法可以更简单地写成:
 function a() { return (true == 1); } function b() { return (true == "1"); } function c() { return (true == "a"); } 
这些比较按照这些规则工作(重点是我的):
如果两个操作数的types不同,JavaScript将转换操作数,然后进行严格的比较。 如果任一操作数是一个数字或一个布尔值,操作数将尽可能转换为数字 。 否则,如果任一操作数是一个string,则string操作数将尽可能转换为数字。 如果两个操作数都是对象,那么当操作数引用内存中的同一个对象时,JavaScript比较内部引用。
 那么在c发生了什么是"a"被转换为一个数字(给NaN ),结果是严格比较 true转换为一个数字(给1 )。 
 由于1 === NaN为false ,所以第三个函数返回false 。 很容易看出为什么前两个函数会返回true 。 
 因为1 == true 
 但"a" != true 
所以基本上会发生什么
  1 == 1 , "1" == "1"和"a" == "a"都被评估为true ,然后与下一个值进行比较。 
 string"1"在被比较为true之前被转换为数字( 1 ),因此也被认为等于true 。 
 现在,“为什么?!?!” 问题的解释是Javascript源于C语言家族。 其中任何数字,而不是0被认为是一个有效的true布尔值。  : –  / 
因为1和“1”都被转换为真,如数字。 “a”不是这种情况。 因此:
 ("1" == "1" == "1") 
评估
 (("1" == "1") == "1") 
评估为
 (true == "1") 
同样的,
 ("1" == 1 == "1") 
也是如此,或其任何组合。 实际上,转换为布尔值的任何非零数字都是正确的。
而“a”并不是真的。
这是因为JavaScript是一种弱types的语言。 这意味着它没有足够的expression能力来谈论types,而实际上却强迫价值属于它们没有语义关系的types。 因此,(1 == 1)== 1的计算结果为true,因为(1 == 1)正确计算结果为true,所以JavaScript计算结果为(true)= 1.特别是将1转换为布尔值(或者为true一个号码 – 我忘了哪个,但结果是有效的)。
关键在于JavaScript 将背后的一种价值转化为另一种价值。
你的问题显示了为什么这是一个问题:('a'=='a')=='a'是错误的,因为('a'=='a')是真的,JavaScript结束比较(真)= ='a'。 由于没有明智的方法将布尔转换为字母(或将字母转换为布尔值),该语句是错误的。 当然,这违背了(==)的引用透明。
  (1 == 1) == 1 。 那么这将是true == 1 ,但不是在a == a == a 。 
布尔值作为位处理,每一位代表真或假(1代表真,0代表假)
所以1代表真,0代表假
和1 == 1 == 1会像(1 == 1)== 1,true == 1,true
而'a'=='a'=='a'将会是('a'=='a')=='a',true =='a',false
奖金:0 == 1 == 0,1 == 0 == 0和0 == 0 == 1返回true
- 如何将onload事件添加到div元素?
- 我不断收到“Uncaught SyntaxError:Unexpected token o”
- 使用Ajax请求将图像上载到Amazon S3,使用JavaScript和jQuery(不使用PHP)
- 链接并执行GitHub上托pipe的外部JavaScript文件
- 将JavaScriptdate格式设置为yyyy-mm-dd
- 插入数字到有序数组中的有效方法?
- RegisterStartupScript和RegisterClientScriptBlock之间的区别?
- 如何使用JavaScript HTML5canvas通过N点绘制平滑曲线?
- 如何取消选中单选button?