javascript中的单引号和双引号值比较 - 严格类型

时间:2017-01-18 11:34:38

标签: javascript

当我想比较变量y和z时,从下面的代码中,这里严格的比较类型是匹配的,但是y == z不匹配。任何人都可以解释原因以及严格类型的工作原理吗?

<script language="javascript" type="text/javascript">
    var x=11;
    var y="11";
    var z='11';

    if(x==y)
        alert('x==y');
    if(y==z)
        alert('y==z');
    if(x===y)
        alert('x===y');
    if(y===z)
        alert('y===z');
    if(x==z)
        alert('x==z');
    if(x===z)
        alert('x===z');
</script>

3 个答案:

答案 0 :(得分:1)

两者都是字符串,也是匹配的。

> typeof "11";
"string"
> typeof '11';
"string"
> "11" === '11'
true
> "11" == '11'
true

答案 1 :(得分:1)

  

JavaScript具有严格和类型转换相等性比较。对于严格相等,要比较的对象必须具有相同的类型和:

     

两个字符串在相应位置具有相同的字符序列,相同的长度和相同的字符时严格相等。   两个数字在数值上相等(具有相同的数值)时严格相等。 NaN不等于任何东西,包括NaN。正负零彼此相等。   如果两个布尔操作数都为真或两者都为假,则它们严格相等。   如果两个对象引用相同的对象,则它们严格相等。   Null和Undefined类型是==(但不是===)。 [即(Null == Undefined)为true但是(Null === Undefined)为false]

Check this out

答案 2 :(得分:0)

当你使用双等号(松散相等)时,你只比较,但是当使用三个等号(严格相等)时你比较<强>类型。

  

在将两个值都转换为公共类型之后,松散相等性将两个值相等。

所以,如果

var y = 11; // number
var z = '11'; // string

var equalValues = y == z; // true
var equalValuesAndTypes = y === z; // false

您可以查看MDN docs