当比较两个引用值时,比较的是两个引用地址,看它们引用的原值是否为同一个副本,而不是比较它们的原值字节是否相等。当对两个不同值进行引用时,尽管它们具有相同的字节构成,但是这两个引用的值却是不相等的。
var a = new Number(1); // 引用值a var b = new Number(1); // 引用值b var c = a; // 把a的引用赋值给c alert(a==b); // 返回false alert(a==c); // 返回true
所以,{} == {},[] == [],都返回false。因为引用地址不同。
总之,对于任何语言来说,使用值和使用引用都是数据操作的两种基本方法。当我们操作数据时,要采用什么方法来进行处理,主要看数据的类型。值类型和引用型数据参与运算的方式不同,值类型数据通过使用值来操作数据,而引用型数据使用引用来操作数据。运算方式的不同,自然所产生的结果也不同。我们不妨再看一个示例:
var s = "abc"; // 字符串,值类型数据 var o = new String(s); // 字符串对象,被装箱后的字符串 function f(v){ // 运算函数 v.toString = function(){ // 修改参数的方法toString() return 123; }; } f(s); // 传入值 alert(s); // 返回字符串"abc",说明运算没有对原数据造成影响 f(o); // 传入引用 alert(o); // 返回数值123,说明运算已经影响到原数据的内部结构
值类型是以实际值参与运算的,因此与原数据没有直接联系。而引用型以引用地址参与运算,计算的结果会影响到引用地址所关联的堆区数据块。但是,有一点例外,对于JavaScript的字符串来说,它的操作方法就比较复杂,详情请google!
以上这篇JavaScript数据操作_浅谈原始值和引用值的操作本质就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。
您可能感兴趣的文章: