首页 > 代码库 > js String坑爹的==

js String坑爹的==

js的String类型与java的String类型不同,比较的时候不用equals,可以直接用"==".

测试了下,这个"=="好像比较坑爹

 

<script type="text/javascript">    var a=new String("hehe");    var b=new String("hehe");    var c="hehe";    alert("a==c: "+(a==c));//true    alert("b==c: "+(b==c));//true    alert("a==b: "+(a==b));//false    alert("hehe"=="hehe");//true</script>

怎么能有这么没道理的事情?a=c,b=c,但是a竟然不等于b!!!

我的结论是js中的String类型虽然没有equals方法,但是当String类型对象与另一个String类型的变量相比较的时候,使用的方法与java的equals方法相类似。而当两个String类型相比较的时候,"=="才与java中的"=="相类似,即比较两个对象是否是同一个对象。

与之相对应的java代码,则没有这种让人纠结的地方

String a=new String("hehe");        String b=new String("hehe");        String c="hehe";        String d="hehe";        System.out.println("a==b: "+(a==b));//false        System.out.println("a==c: "+(a==c));//false        System.out.println("c==b: "+(c==b));//false        System.out.println("c==d: "+(c==d));//true        System.out.println("a.equals(b): "+(a.equals(b)));//true

java中通过new创建的String对象用"=="相比较的时候,比较的是对象的地址值,而js中,只有当两个对象都是用new创建的时候,才比较地址值。

js String坑爹的==