当我想比较变量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>
答案 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]
答案 2 :(得分:0)
当你使用双等号(松散相等)时,你只比较值,但是当使用三个等号(严格相等)时你比较<强>类型。
在将两个值都转换为公共类型之后,松散相等性将两个值相等。
所以,如果
var y = 11; // number
var z = '11'; // string
var equalValues = y == z; // true
var equalValuesAndTypes = y === z; // false
您可以查看MDN docs