当前位置:  开发笔记 > 编程语言 > 正文

在Javascript中,<int-value> =="<int-value>"的计算结果为true.为什么会这样?

如何解决《在Javascript中,<int-value>=="<int-value>"的计算结果为true.为什么会这样?》经验,为你挑选了3个好方法。

如果我做0 =="0"则评估为真.尝试,

if( -777 == "-777" ) alert("same");

警报发生.

并且,值得注意的是,true =="true"不会评估为true.尝试,

if( false == "false" ) alert("same");

警报不会发生.

为什么会这样?



1> Andrey Fedor..:

==的行为有点冗长,但在ecma-262规范中明确定义:

11.9.3抽象等式比较算法

比较x == y,其中x和y是值,产生真或假.这样的比较如下进行:

    如果Type(x)与Type(y)不同,请转到步骤14.

    如果Type(x)是Undefined,则返回true.

    如果Type(x)为Null,则返回true.

    如果Type(x)不是Number,请转到步骤11.

    如果x是NaN,则返回false.

    如果y是NaN,则返回false.

    如果x与y的数值相同,则返回true.

    如果x是+0且y是-0,则返回true.

    如果x是-0且y是+0,则返回true.

    返回false.

    如果Type(x)是String,则如果x和y完全相同的字符序列(相应位置的相同长度和相同字符),则返回true.否则,返回false.

    如果Type(x)是布尔值,如果x和y都为true或两者都为false,则返回true.否则,返回false.

    如果x和y引用同一个对象或它们引用彼此连接的对象,则返回true(见13.1.2).否则,返回false.

    如果x为null且y未定义,则返回true.

    如果x未定义且y为null,则返回true.

    如果Type(x)为Number且Type(y)为String,则返回比较结果x == ToNumber(y).

    如果Type(x)是String并且Type(y)是Number,则返回比较结果ToNumber(x)== y.

    如果Type(x)是布尔值,则返回比较结果ToNumber(x)== y.

    如果Type(y)是布尔值,则返回比较结果x == ToNumber(y).

    如果Type(x)是String或Number而Type(y)是Object,则返回比较结果x == ToPrimitive(y).

    如果Type(x)是Object而Type(y)是String或Number,则返回比较结果ToPrimitive(x)== y.

    返回false.

第16步适用于您以前的示例:

   0 == "0"            // apply 16
?  0 == toNumber("0")
?  0 == 0              // apply 7
?  true

步骤18,然后步骤16,适用于后者:

   true == "true"            // apply 18
?  toNumber(true) == "true"
?  1 == "true"               // apply 16
?  1 == toNumber("true")
?  1 == NaN                  // apply 6
?  false


+0.8表示最佳答案,+ 0.2表示查找≡字符
你必须喜欢编写这个规范的人如何设法使用goto如此有效地生成意大利面条代码,甚至没有编码!

2> Paolo Bergan..:

这样做:

if(5 == "5")

使javascript将前5个转换为字符串.试试这个:

if(5 === "5")

===让的Javascript评估类型为好.

这实际上是一个重复的question地方,它解释得非常好.



3> nickf..:

因为Javascript是松散类型的,它将根据操作中的操作和其他变量的类型静默地转换变量.

alert ("5" - 1);  // 4  (int)
alert ("5" + 1);  // "51" (string) "+" is a string operator, too
alert ("5" == 5); // true

你可能想看的是身份检查(===).这确保了变量是相同的,而不仅仅是相等的.

alert("5" == 5);  // true, these are equal
alert("5" === 5); // false, these are not identical.

另请参阅此问题:等式和身份比较运算符如何不同?PHP的实现与javascript非常相似.

推荐阅读
郑小蒜9299_941611_G
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有