字符串和数字之间的Javascript比较

字符串和数字之间的Javascript比较,javascript,Javascript,嗨,我正在复习一些基本的javascript,我发现了这段代码 if('3'!=3) { document.write("Hello"); } 这会将hello写入屏幕,但是当我将其更改为: if('3'==3) { document.write("Hello"); } 这也会将Hello写入屏幕 有人知道这其中的原因吗?我读到javascript在比较中将字符串转换为数字,我只是不理解当我更改条件时的不同行为 谢谢 之所以会发生这种情况,是因为==运算符在比较之前试图将两个操作

嗨,我正在复习一些基本的javascript,我发现了这段代码

if('3'!=3)
{
   document.write("Hello");
}
这会将hello写入屏幕,但是当我将其更改为:

if('3'==3)
{
   document.write("Hello");
}
这也会将Hello写入屏幕

有人知道这其中的原因吗?我读到javascript在比较中将字符串转换为数字,我只是不理解当我更改条件时的不同行为

谢谢

之所以会发生这种情况,是因为==运算符在比较之前试图将两个操作数转换为同一类型。换句话说,它看到字符串“3”与数字3相同,并表示它们相等。使用===运算符可以避免这种情况,因为它不会尝试转换操作数,而是执行严格的相等性检查

这不会写Hello:

if('3'===3)
{
   document.write("Hello");
}
下面是另一个有趣的例子:

if(false == 0) {
    document.write("Hello");
}
它会写你好!这是因为0被视为可以转换为false的值。与前面一样,使用===运算符将解决此问题:

if(false === 0) {
    document.write("Hello"); // won't write hello
}

这是因为==不关心类型


使用===替换。

如果要进行严格比较,请使用===运算符或==

同样,对我来说最令人震惊的例子是著名的与false、0、0和undefined的比较。所有的都是==但当然没有一个是===第一个没有向屏幕写入hello。无法复制。3 != '对我来说,3'的计算结果为false。是的,因为3='3'有意义:pwin7,chrome16:if'3'=3{警报…;/*从未输入过*/}