我理解使用“===”比较类型,因此运行以下代码会导致“不相等”,因为它将数字类型与字符串类型进行比较。
var a = 20;
var b = "20";
if (a === b) {
alert("They are equal");
} else {
alert("They are not equal");
}
但是我不明白如何使用“==”来比较“他们是平等的”消息中的值结果。
var a = 20;
var b = "20";
if (a == b) {
alert("They are equal");
} else {
alert("They are not equal");
}
价值如何相等?是不是字符串“20”存储为ASCII字符50和48(二进制为0110010和0110000),20存储为实际二进制数0010100?
编辑:谢谢大家!我认为所有的回复都很棒,并帮助我更好地理解这一点。答案 0 :(得分:19)
==
运算符仅比较变量的值。如果类型不同,则进行转换。因此,数字20被转换为字符串“20”并且比较结果。
===
运算符不仅会比较值,还会比较类型,因此不会运行强制转换。在这种情况下"20" !== 20
答案 1 :(得分:3)
当需要进行类型转换时,JavaScript会按如下方式转换String,Number,Boolean或Object操作数。
==比较的问题是JavaScript版本1.2不执行类型转换,而版本1.1和1.3版本执行。
自版本1.3以来,===比较已经可用,并且是检查两个变量匹配的最佳方法。
如果您需要将代码与版本1.1,1.2和1.3版本的JavaScript代码兼容,则应确保所有变量都匹配,就像正在执行的===比较一样。
答案 2 :(得分:2)
JavaScript引擎将a视为数字,并在估值之前将b转换为数字。
答案 3 :(得分:1)
“==”的部分定义是在可能的情况下,在比较之前将值转换为相同的类型。许多松散类型的语言都是如此。
答案 4 :(得分:1)
Javascript的设计使得包含数字的字符串被认为与该数字“相等”。原因是用户在输入字段中输入数字并且网站在JS中验证它的情况下使用简单 - 您不必在比较之前将输入的字符串强制转换为数字。
它简化了一个常见的用例,===运算符仍允许您与所考虑的类型进行比较。
答案 5 :(得分:0)
据我所知,JavaScript会自动进行自动数据类型转换 - 因此可能会自动将变量转换为等效类型。