摘要:主要分基本數(shù)據(jù)類型及引用數(shù)據(jù)類型兩大類基本數(shù)據(jù)類型包括,新增引用數(shù)據(jù)類型等注意基本數(shù)據(jù)類型放在棧空間內(nèi),并且是按值存放,可以直接讀取和操作。
js主要分基本數(shù)據(jù)類型及引用數(shù)據(jù)類型兩大類
基本數(shù)據(jù)類型包括:number,string,undefine,null,boolean,Symbol(es6新增) 引用數(shù)據(jù)類型:Object,Array,Function,Data等 注意:基本數(shù)據(jù)類型放在**棧空間內(nèi)**,并且是按值存放,可以直接讀取和操作。 引用數(shù)據(jù)類型存放在**堆空間內(nèi)**(門),變量的值其實是指向堆空間的地址(鑰匙),因此如果克隆這個變量,相當于復(fù)制鑰匙。
let arr = [1,2,3,4,5] let arr1 = arr // 這一步相當于把arr棧空間的地址賦給了arr1,其實arr和arr1操作的是同一個堆空間的對象 arr1.push(6) // arr1 = [1,2,3,4,5,6] console.log(arr) //[1,2,3,4,5,6]
因此對于引用類型的拷貝,需要拷貝堆空間的對象
數(shù)組淺拷貝
1.運用數(shù)組slice與concat方法返回一個新數(shù)組的特性
let arr = [1,2,3,4,5] let arr1 = arr.slice() //[1,2,3,4,5] let arr2 = arr.concat() //[1,2,3,4,5]
2.簡單粗暴的方法-遍歷
let arr = [1,2,3,4,5] let arr2 = [] arr.forEach(item=>{ arr2.push(item) } ) console.log(arr2)
3.es6新增方法-拓展運算符
let arr = [1,2,3,4,5] let arr1 = [...arr] //[1,2,3,4,5]
4.es6新增方法-Object.assign
let arr = [1,2,3,4,5]
let arr1 = []
Object.assign(arr1,arr)
console.log(arr1) //[1,2,3.4,5]
如果數(shù)組里嵌套數(shù)組和對象,淺拷貝只會拷貝該數(shù)組或者對象存放在棧空間的地址,因此無論在新舊數(shù)組中改變此地址指向的對象,兩個數(shù)組都會發(fā)生改變。 因此我們需要深拷貝來拷貝此類數(shù)組。
數(shù)組深拷貝
1.普通遍歷,遍歷到引用類型時候進行引用類型的拷貝
let arr = [1,2,3,4,5,{name:"bob"},["a","b"]] function clone (arr) { let arr1 = [] arr.forEach(item=>{ //如果不是object,將該值插入到新數(shù)組 if(typeof(item) !== "object") { arr1.push(item) } else { //根據(jù)遍歷的對象新建一個相同類型的空對象 let obj = item instanceof Array ? [] : {} for(var key in item){ if(item.hasOwnProperty(key)){ obj[key] = item[key] } } arr1.push(obj) } }) return arr1 } let arr1 = clone(arr) arr1[5].name = "js" console.log(arr,"arr",arr1,"arr1")
2.簡單粗暴(能拷貝數(shù)組和對象,但不能拷貝函數(shù))
let arr = [1,2,3,4,5,{name:"bob"},["a","b"]] let arr1 = JSON.parse(JSON.stringify(arr))
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/102695.html
摘要:快速排序由在年提出。如果定時器的時間到了,那么也會去下一個階段關(guān)閉的回調(diào)函數(shù),一些準備關(guān)閉的函數(shù)等的事件輪詢機制也可以看成是單線程,由上往下執(zhí)行,但是到了第階段,又會返回第一階段,死循環(huán)。 原生javaScript是中大公司挑人的核心,也是決定你未來發(fā)展高度的核心。 冒泡排序,快速排序,深度克隆,深度凍結(jié),數(shù)組操作,本章都有。 走遍大江南北,還是原生javaScript最美 感冒給大...
摘要:快速排序由在年提出。如果定時器的時間到了,那么也會去下一個階段關(guān)閉的回調(diào)函數(shù),一些準備關(guān)閉的函數(shù)等的事件輪詢機制也可以看成是單線程,由上往下執(zhí)行,但是到了第階段,又會返回第一階段,死循環(huán)。 原生javaScript是中大公司挑人的核心,也是決定你未來發(fā)展高度的核心。 冒泡排序,快速排序,深度克隆,深度凍結(jié),數(shù)組操作,本章都有。 走遍大江南北,還是原生javaScript最美 感冒給大...
摘要:但是這種復(fù)制技術(shù)在的世界里早已出現(xiàn),就是原型模式什么是原型模式用原型實例指定創(chuàng)建對象的種類,并且通過拷貝這些原型創(chuàng)建新的對象類圖原型模式是設(shè)計模式中最簡單的,沒有之一。 前言 在現(xiàn)實世界中,我們通常會感覺到分身乏術(shù)。要是自己有分身那該多好啊,一個用來工作,一個用來看電視,一個用來玩游戲(無意中透露了自己單身狗的身份-。-),其實就是克隆,這種技術(shù)存在著很大的弊端,所以現(xiàn)在是禁止使用的。...
摘要:多個窗口意味著多個全局環(huán)境,不同的全局環(huán)境擁有不同的全局對象,從而擁有不同的內(nèi)置類型構(gòu)造函數(shù)。比如,表達式會返回,因為屬性得到的僅僅是構(gòu)造函數(shù),而且是可以被手動更改的,只是返回的構(gòu)造函數(shù)的名字,它并不返回類名。 原文:ES6時代,你真的會克隆對象嗎(二) 上一篇,我們從Symbol和是否可枚舉以及屬性描述符的角度分析了ES6下怎么淺拷貝一個對象,發(fā)表在掘金和segmentfault上(...
閱讀 746·2023-04-26 01:30
閱讀 3301·2021-11-24 10:32
閱讀 2179·2021-11-22 14:56
閱讀 1979·2021-11-18 10:07
閱讀 553·2019-08-29 17:14
閱讀 624·2019-08-26 12:21
閱讀 3103·2019-08-26 10:55
閱讀 2940·2019-08-23 18:09