JavaScript String对象 ‘==’ 比较问题:(内部机制分析)
来源:互联网 发布:北京握奇数据系统待遇 编辑:程序博客网 时间:2024/05/18 17:03
例子:
var str1 = “abc”;
alert(typeof str1); // string
var str2 = new String(“abc”);
alert(typeof str2) // object
var str3 = new String(“abc”);
alert(str1 == str2); // true
alert(str1 == str3); // true
alert(str2 == str3); // false;
为什么前两个比较是true,而最后比较是false ?
因为前两个比较值,而最后是比较地址(new 会在堆里分配一新存储空间存放值,而str2是这空间的引用,存放的是这内存空间的地址)
那为什么前两个是比较值,而不是比较地址?
因为Js运行==,如果对象(str2)跟string(str1)比较时,会先调用对象的valueOf取值, 如果没有valueOf, 则调用toString, 然后跟string对比。(注:Date对象是先toString, 然后才是valueOf)
显然:alert(str2.valueOf() == str3) 结果是:true
事例验证:
var A=function(n){
this.name=n;
}
A.prototype.valueOf=function(){return this.name;}
A.prototype.toString=function(){return "A: "+this.name;}
var B=function(n){
this.name=n;
}
B.prototype.valueOf=function(){return this.name;}
B.prototype.toString=function(){return "B: "+this.name;}
var str1="abc";
var str2=new A("abc");
var str3=new B(str1);
alert(str1==str2); // true
alert(str1==str3); // true
alert(str2==str3); // false
- JavaScript String对象 ‘==’ 比较问题:(内部机制分析)
- JavaScript创建对象的内部机制
- 字符串比较问题的内部分析
- JavaScript内部对象(一)
- Javascript内部对象(二)
- JSP(JavaScript的内部对象)
- JavaScript 内部对象结构
- javascript 对象比较(hashcode)
- JavaScript 字符串(String) 对象
- String(字符串)对象javascript
- JavaScript 字符串(String)对象
- String对象真的可以用==比较吗?
- Python内部机制-PyObject对象
- Python内部机制-PyTypeObject对象
- Python内部机制-PyIntObject对象
- String s = new String("xyz")创建几个对象问题
- string对象的比较
- string对象的比较
- zoj 3353 Chess Board 高斯消元
- 如何给 eclipse 设置快捷键
- android模拟器的快捷键
- DNW下USB驱动故障的解决
- checkbox,js验证必须选择一个
- JavaScript String对象 ‘==’ 比较问题:(内部机制分析)
- adf中的boolean存值(1,0=y,n=yes,no)
- Java中的native关键字浅析(Java+Native+Interface)
- 代码实现邮件中的flash
- cvsnt 服务器及客户端配置(上)
- cvsnt 服务器及客户端配置(下)
- 函数指针的应用
- 某人推荐的Linux 编程好书
- Java加密技术(一)——BASE64与单向加密算法MD5&SHA&MAC