javascript - 既然alert(new String("A")=="A"),为甚会这样???
本文介绍了javascript - 既然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
这篇关于javascript - 既然alert(new String("A")=="A"),为甚会这样???的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文