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创建的时候,才比较地址值。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。