js基本类型 引用类型

Posted 晨落梦公子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js基本类型 引用类型相关的知识,希望对你有一定的参考价值。

参考 https://segmentfault.com/a/1190000005794070 http://blog.csdn.net/yummy_go/article/details/50504688

先看示例:

(function () {

    var temp=11.11;
    function change(value) {
        value=22.22;
    }
    change(temp);
    console.log(temp); //11.11 未改变

})();
(function () {

    function change(value) {
        value.name = "mm"
    }
    var obj={name:"meng"};
    change(obj);
    console.log(obj.name);  //mm 改变
 
})();

从上面的例子可以看出,基础类型(String,Boolean,Number)中形参不改变实参,引用类型(Array,Object)中形参改变了实参。

究其原理,首先说明,js是按值传递的。基础类型正好符合这一点,而引用类型“改变”这种传递的原因是,对象(或数组)中的实例引用都指向了同一块内存,即共同的父类,修改其中一个,也就改变了父类和兄弟类。

突然想到,前两天整理的“深度克隆” http://www.cnblogs.com/chenluomenggongzi/p/6160525.html

其实也是同样的原理,浅克隆错误的原因是:把引用类型错误的当成是基础类型去克隆了

还有angular中的坑 http://www.cnblogs.com/chenluomenggongzi/p/6151417.html 第四条

其实原理也类似。只是它强制把基础类型变成了引用类型,从而使得不同作用域可以访问同一处内存。

以上是关于js基本类型 引用类型的主要内容,如果未能解决你的问题,请参考以下文章

js中基本数据类型与引用数据类型的本质区别

关于js的引用类型和基本类型

JS基本类型和引用类型

JS基本数据类型和引用数据类型

JS的数据类型-引用类型和基本类型

js中的基本类型和引用类型