我的理解是,使用"==="比较的类型,所以运行以下代码结果在"不平等",因为这是比较数字类型字符串的类型。

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 characters50和第48(0110010和0110000在二)和20存储为实际的二进制数0010100?

编辑:谢谢大家!我认为所有的答复是巨大的,已经帮助了我明白这好得多。

有帮助吗?

解决方案

== 运算符仅比较变量的值。如果类型不同,则进行转换。因此,数字20被转换为字符串“20”。并将结果进行比较。

=== 运算符不仅会比较值,还会比较类型,因此不会运行强制转换。在这种情况下," 20" !== 20

其他提示

当类型的转变是需要的,JavaScript串转换、数量、布尔,或对象的操作数如下。

  • 当比较数字、字符串转换为数值。JavaScript试图把这串数字要一些类型的价值。第一,一个数学价值是从串数字文本。接下来,这个数值是四舍五入到最近的数类型的价值。
  • 如果一个操作数是布尔,布尔的操作数转换为1如果这是真的,并+0如果它是错误的。
  • 如果目的是比较数字或字符串,JavaScript试图返回的默认值的对象。经营者试图转换对象的原始价值,一串或数值时,使用的值和toString方法的对象。如果这种试图转换对象的失败,一个运行错误而产生的。

该问题与==比较是,JavaScript1.2版本没有执行类型的转换,而版本1.1和1.3起做的。

该===比已经提供,因为1.3版,并且是最好的方式来检查的两个变量相匹配。

如果你需要你们的代码可以兼容的版本1.1,1.2和1.3版本的JavaScript code,你应该确保所有匹配的变量,如果它是一===比较,是正在进行的。

JavaScript引擎将a视为数字,并在估值之前将b转换为数字。

“==”的定义的一部分是在可能的情况下,在比较之前将值转换为相同的类型。许多松散类型的语言都是如此。

Javascript被设计成包含数字的字符串被认为是“相等”的。那个数字。原因是用户在输入字段中输入数字并且网站在JS中验证它的情况下使用简单 - 您不必在比较之前将输入的字符串强制转换为数字。

它简化了一个常见的用例,===运算符仍允许您与所考虑的类型进行比较。

据我所知,JavaScript会自动进行自动数据类型转换 - 因此可能会自动将变量转换为等效类型。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top