关于JS字符串比较

来源:互联网 发布:植物奶油 知乎 编辑:程序博客网 时间:2024/06/02 13:31

From:http://bbs.51js.com/thread-77786-1-1.html

Aiming 发表于 2008-4-28 15:13

JSW 发送 2008-4-28 14:58:
在不,有个javascript的问题不明白,可以问你不?
var str1=new String("");
var str2=new String("");
alert(str1==str2);
这两个结果为什么不一样呢

JSW 发送 2008-4-28 14:58:
我总觉得该是一样的

Aimingoo 说:
好象我在书里是讲过这个的吧。

JSW 说:
嗯,有的,但是没怎么明白==,和===的区别,我的理解,上面这样应该true的,但是还是false

Aimingoo 说:
是在P45页(就是《JavaScript语言精髓与编程实践》啦)。

Aimingoo 说:
我的意思是说,引用类型作比较的时候,并不会逐字符的进行check,而是检查它们的引用地址。也就是说,只要不是“同一个对象”的不同引用,就不会等值,也不会全等

Aimingoo 说:
显然,你的代码中用new String()两次,生成了两个引用。所以……

JSW 说:
有没有一个==和===执行出来结果不一样的情况呢?我发觉好像都是一致的

Aimingoo 说:
把其中任意一个转换成值类型就可以了

Aimingoo 说:
例如:
alert(str1.valueOf() == str2);

Aimingoo 说:
或者:
alert(str1+'' == str2)

JSW 说:
呵呵,明白了,谢谢哈
不好意思打扰您工作了

Aimingoo 说:
我把这个贴到51js里去吧。挺有趣的一个问题。

----------------------------------------------------------------------
编程浪子 发表于 2008-4-29 09:53

同理

1
2
3
4
5
6
<script type="text/javascript">
var arr1=[1,2,3,4];
var arr2=[1,2,3,4];
alert(arr1==arr2);
alert(arr1.toString()==arr2);
</script>


----------------------------------------------------------------------
Aiming 发表于 2008-4-29 10:22
哈哈,楼上的意思是说如何比较两个数组是否相等。当然,这是个好点子。不过更完整的做法是这样:

1
2
3
var arr1=[2,1,4,3];
var arr2=[1,3,2,4];
alert( arr1.length==arr2.length && (arr1.sort(), arr2.sort(), arr1.toString() == arr2) );

前提条件是这两个数组只包含值类型的数据,对引用类型的数据做上述的处理可能结果会不可预期。



http://www.cnlei.com/blog/article.asp?id=508
原创粉丝点击