在《JavaScript入门经典(第4版)》第5章中介绍对象的时候曾经这么说过:
在基本数据类型中,储存的是基本数据本身;而在对象数据类型中,储存的是指向保存数据的内存地址的引用。
这二者之间到底有何区别?一个小小的代码就能看出来:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<script type="text/javascript">
var str1 = new String("hello");
var str2 = new String("hello");
var str3 = str2;
document.write("str1 == str3 ?? " + (str1 == str3));
document.write("<br />");
var str4 = "hello";
var str5 = "hello";
var str6 = str5;
document.write("str4 == str6?? " + (str4 == str6));
</script>
</body>
</html>
在浏览器中显示上面代码所写页面,得到的结果是:
str1 == str3 ?? false
str4 == str6 ?? true
原因:
str1和str2中声明了两个String类型,这两个类型虽然内容相同(“hello”),但很明显是储存在内存中不同位置的。这时再声明str3 = str2,也只是把str2的内存引用赋给了str3。str3的内存引用 == str2的内存引用 <> str1的内存引用,所以str3 == str1的逻辑语句结果为false。
而str4和str5是两个基本数据类型,都存的是数据本身(“hello”),所以把str5赋给str6之后,str4的数据 == str5的数据 == str6的数据,因此str4 == str6的逻辑语句结果为true。
Wilton P, McPeak J, 张敏, 等. JavaScript 入门经典[M]. 清华大学出版社, 2011.