美文网首页
17.1.7 JS值类型和引用类型

17.1.7 JS值类型和引用类型

作者: _v_xw | 来源:发表于2017-01-07 20:34 被阅读0次

1.在做ife2015 task2 的题目,关于深度克隆一个目标对象,返回一个完整的拷贝。像我这种没学多少的,以为就是对这个目标从新赋值给一个变量,好比  

var obj1={a:1,b:2}; var obj2=obj1; 

 我以为这样就算把obj1克隆了一份到obj2了,但是实际上你给obj2添加多一个属性好比

obj2.c=3;

这样我obj2也就等于{a:1,b:2,c:3},不仅仅是obj多了一个属性,obj1也多了一个c属性,

因为他们其实指向同一个堆内存对象,就是存放的资料在一个地方所以会共享。

所以进行深度克隆就是为了让他们有各自的家,也就是需要生成一个副本,生成一个一模一样但是地方不同的房子;

2.那我们就要了解什么样的数据克隆才需要副本,刚刚我们了解到,需要副本是因为直接赋值的数据会共享,那么我们就要了解哪些会数据共享,引用类型就是这样的

在说引用类型前  , 我们先来说下数据类型,数据类型区分我们都知道,那他们的值的数据是保存在哪的,这就引出了 值类型和引入类型;分成这两类当然是因为他们功能不同啦

值类型:存储在栈(stack)中的简单数据段,也就是说,它们的值直接存储在变量访问的位置。

这样的话我没系统学过计算机不好理解,,所以就用下面的话来通俗的说下

变量的交换等于在一个新的地方按照连锁店的规范标准(统一店面理解为相同的变量内容)新开一个分店,这样新开的店与其它旧店互不相关、各自运营。

引用类型:存储在堆(heap)中的对象,也就是说,存储在变量处的值是一个指针(point),指向存储对象的内存处。

变量的交换等于把现有一间店的钥匙(变量引用地址)复制一把给了另外一个老板,此时两个老板同时管理一间店,两个老板的行为都有可能对一间店的运营造成影响。

引用了http://www.jb51.net/article/71537.htm中的语句

具体来讲

(1)值类型:数值、布尔值、null、undefined  string(比较特殊)

(2)引用类型:对象、数组、函数。  Date / Function / RegExp比较少用

所以就是除了值类型的以外,剩下的引用类型要深度可能的话不能直接赋值,而是要创建副本

functioncloneObject (src) {//对于基本数据类型,只要直接返回即可if(src ==null||typeofsrc != 'object') {returnsrc;

}//对于对象分为以下三种情况//对于Date等引用类型的数据,需要考虑调用构造函数重新构造,直接赋值依然会有引用问题(不是真正的clone引用变量)//以Date为例if(srcinstanceofDate) {varclone =newDate(src.getDate());returnclone;

}//对于数组,需要遍历,这样可以保证在在Array对象上扩展的属性也可以正确复制if(isArray(src)) {varclone =[];for(vari = 0; i < src.length; i++) {

clone[i]=cloneObject(src[i]);

}returnclone;

}//对于其他object,同样也需要遍历if(srcinstanceofObject) {varclone ={};for(varkeyinsrc) {if(src.hasOwnProperty(key)) {//忽略掉继承属性,只取属于它本身的属性clone[key] =cloneObject(src[key]);

}

}returnclone;

}

}

相关文章

  • 17.1.7 JS值类型和引用类型

    1.在做ife2015 task2 的题目,关于深度克隆一个目标对象,返回一个完整的拷贝。像我这种没学多少的,以为...

  • js变量的类型和计算

    js变量类型:值类型和引用类型值类型:number,string,boolean,undefined,symbol...

  • js基本类型与引用类型

    1.js基本类型和引用类型 首先js的变量有两种类型,基本类型值和引用类型值 基本数据类型:null,undefi...

  • [JavaScript] F.prototype=1

    js是区分引用类型和值类型的值类型:数值,布尔值,null,undefined引用类型:对象,数组,函数 (1)如...

  • 引用类型和对象拷贝

    一、引用类型有哪些?非引用类型有哪些 JS 中分基本类型和引用类型。 基本类型值(数值、布尔值、字符串、null和...

  • JS 基础知识巩固(JS面试宝典-全面透彻)

    第一章:JS 基础上篇(js 类型) 值类型 引用类型 问题:为什么对值类型和引用类型进行修改会出现不同的结果呢?...

  • JS中实现浅拷贝和深拷贝

    (一)JS中基本类型和引用类型 JavaScript的变量中包含两种类型的值:基本类型值 和 引用类型值,在内存中...

  • JS基础知识 (一)--变量类型和计算

    变量类型 js变量类型分为基本类型(或者叫值类型)和引用类型。(按照存储方式区分)• 值类型值类型:Number、...

  • JS基本类型和引用类型

    JS中可以把变量分成两部分,基本类型和引用类型。 JavaScript值类型和引用类型有哪些(1)值类型:数值、布...

  • 深浅拷贝

    JS中的变量类型分为值类型(基本类型)和引用类型;对值类型进行复制操作会对值进行一份拷贝,而对引用类型赋值,则会进...

网友评论

      本文标题:17.1.7 JS值类型和引用类型

      本文链接:https://www.haomeiwen.com/subject/rvyfbttx.html