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

查看:136
本文介绍了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屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆