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
使用的是全等比较===
,而不是相等比较==