首页 > 既然alert(new String("A")=="A"),为甚会这样???

既然alert(new String("A")=="A"),为甚会这样???

function showCase(value){
switch(value){
case 'A':
console.info('Case A');
break;
case 'B':
console.info('Case B');
break;
case undefined :
console.info('undefined');
break;
default:
console.info('Do not know!');
}
}
showCase(new String('A'));//'Do not konw'???为什么会这样?
明明alert(new String("A")=="A")为true????

“==”比较的是valueOf()的返回值。
"==="有一些特殊:

1、两个栈类型变量比较时比较的是值
2、堆变量和栈变量比较的是引用地址。
3、堆变量和堆变量比较的是引用地址。
var str=new String("A");
console.log(str.valueOf()); // => A

所以new String("A")=="A"返回的是true。

另外:switch比较像是===的比较,还有valueOf和toString的其它用法如下:

var c=new function(){};
c.valueOf=function(){return 1};
c.toString=function(){return '2'};
switch(c){
    case 1:
        console.log(1);
    break;
    case c:
        console.log(2);
    break;
    default:
        console.log(3);
    break;
}
// => 2
// 这里虽然c是一个function,但是由于重写了c的valueOf方法
console.log(1+parseInt(c)); // => 3
console.log(5+c); // => 6
console.log(c==1); // => true
console.log(c===1); // => false

switch使用的是全等比较===,而不是相等比较==

【热门文章】
【热门文章】