JavaScript的引用數(shù)據(jù)類型你了解多少
三種傳遞
- 數(shù)據(jù)傳遞:變量傳遞給另外一個(gè)變量
- 值傳遞:會(huì)把數(shù)據(jù)復(fù)制一份傳遞,(簡單類型
- 引用傳遞:會(huì)把數(shù)據(jù)地址復(fù)制一份傳遞,(引用類型)
1、Object
【解釋】: Object 是內(nèi)置的構(gòu)造函數(shù),用于創(chuàng)建普通對象。
1、創(chuàng)建對象語法
字面量創(chuàng)建對象示例
let obj = { uname : '阿飛', age : 22, sex : '男' }
構(gòu)造函數(shù)創(chuàng)建
// Object:創(chuàng)建普通對象的構(gòu)造函數(shù) let obj = new Object( {uname : '阿飛', age : 22, sex : '男'} );
對象所有鍵的獲取
let re = Object.keys(obj)
對象所有值的獲取
let re = Object.values(obj);
2、普通對象在內(nèi)存中的存儲方式
普通對象數(shù)據(jù)保存在堆內(nèi)存之中,棧內(nèi)存中保存了普通對象在堆內(nèi)存的地址。
普能對象在賦值時(shí)只是復(fù)制了棧內(nèi)中的地址,而非堆內(nèi)存中的數(shù)據(jù) [普通對象賦值后,無論修改哪個(gè)變量另一個(gè)對象的數(shù)據(jù)值也會(huì)相當(dāng)發(fā)生改變。]
【小結(jié)】:
- 推薦使用字面量方式聲明對象,而不是
Object
構(gòu)造函數(shù) Object.assign
靜態(tài)方法創(chuàng)建新的對象Object.keys
靜態(tài)方法獲取對象中所有屬性Object.values
表態(tài)方法獲取對象中所有屬性值
【堆與棧的區(qū)別】:
- 堆和棧是內(nèi)存中的數(shù)據(jù)存儲空間
- 簡單類型的數(shù)據(jù)保存在內(nèi)存的棧空間中
- 引用類型的數(shù)據(jù)保存在內(nèi)存的堆空間中,棧內(nèi)存中存取的是引用類型的地址(房間號)
2、Array
1、創(chuàng)建數(shù)組語法
字面量
let arr = [1, 2, 3];
構(gòu)造函數(shù)
let ary = new Array(1, 2, 3);
2、數(shù)組的在內(nèi)存中的存儲方式
數(shù)組在內(nèi)存中的存儲方式與普通對象一樣
數(shù)組在賦值時(shí)只是復(fù)制了棧內(nèi)中的地址,而非堆內(nèi)存中的數(shù)據(jù)
3、數(shù)組常用方法
1、 concat:用于拼接為新數(shù)組
let arr = [1, 2, 3]; let ary1 = ['a', 'b', 'c', 'd']; let ary2 = [11, 222, 333]; let reArr = arr.concat(ary1, ary2, '張飛', '關(guān)羽', '趙云'); console.log(reArr);
2、 join():用于連接數(shù)組的每個(gè)元素成為字符串
let arr1 = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']; let str = arr1.join(''); console.log(str);
3、 reverse:翻轉(zhuǎn)數(shù)組順序
let arr3 = [1, 2, 3]; let re = arr.reverse(); console.log(re);
4、 indexOf:查找某個(gè)元素在數(shù)組中首次出現(xiàn)的索引位置,找不到就是返回-1
let arr1 = ['a', 'b', 'c', 'd', 'a', 'b', 'f']; let re1 = arr1.indexOf('a'); console.log(re1);
5、 lastIndexOf:查找某個(gè)元素在數(shù)組中尾次出現(xiàn)的索引位置,找不到就返回-1
let re2 = arr1.lastIndexOf('b'); console.log(re2);
6、 sort正序排列
let arr2 = [3, 16, 22, 66, 123, 99]; // sort正序排列: let re3 = arr2.sort(function (a, b) { return a - b; });
7、 sort倒序排列
// sort倒序排列 let arr2 = [3, 16, 22, 66, 123, 99]; let re4 = arr2.sort(function (a, b) { return b - a; });
8、 判斷一個(gè)值是否是數(shù)組
let a = [1, 2, 3]; let re = Array.isArray(a); console.log(re);
9、 把偽數(shù)組轉(zhuǎn)換為真數(shù)組 Array.from(偽數(shù)組)
// 特別注意:要想把偽數(shù)組轉(zhuǎn)換為真數(shù)組必須有l(wèi)ength屬性 let o = { 0 : 'a', 1 : 'b', 2 : 'c', 3 : 'd', 4 : 'e', 5 : 'f', 6 : 'h', length : 4, } let ary = Array.from(o); console.log( ary );
10、forEach遍歷數(shù)組
let arr = [ {uname :'阿飛', age : 22, sex : '男'}, {uname :'張三豐', age : 23, sex : '男'}, {uname :'李尋歡', age : 21, sex : '男'}, {uname :'張三豐1', age : 23, sex : '男'}, {uname :'李尋歡1', age : 21, sex : '男'}, {uname :'張三豐2', age : 23, sex : '男'}, {uname :'李尋歡2', age : 21, sex : '男'}, {uname :'張三豐2', age : 23, sex : '男'}, {uname :'李尋歡2', age : 21, sex : '男'}, ]; arr.forEach( item => { console.log(`姓名:${item.uname},年齡${item.age},性別${item.sex}`); } );
11、find:用于查找首次出現(xiàn)的滿足條件的值,并返回
let re = [2, 6, 4, 7, 9, 3]; let result = re.find(function (item, index, o) { return item > 5; }) console.log(result);
12、findIndex:用于查找首次出現(xiàn)的滿足條件的值,并返回期所在索引值 沒有則返回-1
let result1 = re.findIndex(function (item, index, o) { return item > 40; }); console.log(result1);
13、some:用于查找如果有一個(gè)滿足條件返回true
let result2 = re.some(function (item, index, o) { return item > 5; }) console.log(result2);
14、every:用于查找滿足條件的元素,如果都滿足返回true,否則就是false
let result3 = re.every(function (item, index, o) { return item > 5; }); console.log(result3);
15、filter:篩選數(shù)組把滿足條件的元素放到新數(shù)組返回
let result4 = re.filter(function (item, index, o) { return item > 5; }); console.log(result4);
16、map:遍歷數(shù)組讓每個(gè)元素執(zhí)行一邊回調(diào)函數(shù),把所有結(jié)果放到新數(shù)組返回
let result5 = re.map(function (item, index, o) { return item * item; }); console.log(result5);
3、RegExp正則
1、創(chuàng)建語法
字面量
let reg = /abc/;
構(gòu)造函數(shù)
let reg1 = new RegExp(/abc/);
總結(jié)
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
JavaScript高級程序設(shè)計(jì)(第3版)學(xué)習(xí)筆記12 js正則表達(dá)式
前面在分析PhoneGap源碼的時(shí)候,曾經(jīng)總結(jié)過一次正則表達(dá)式的用法,為了不同系列文章的完整性,這里將那里的總結(jié)遷移過來2012-10-10javascript學(xué)習(xí)(一)構(gòu)建自己的JS庫
庫是一個(gè)飽受爭議的熱門話題。一種觀點(diǎn)認(rèn)為它是一種非常棒的工具,是任何開發(fā)者都不可或缺的;另一種觀點(diǎn)則認(rèn)為在不理解庫的內(nèi)部工作原理的情況下對庫形成依賴,會(huì)助長懶惰的風(fēng)氣從而導(dǎo)致開發(fā)者素質(zhì)下降2013-01-01JavaScript DOM 學(xué)習(xí)第九章 選取范圍的介紹
這一章會(huì)對范圍對象做一些介紹。使用這個(gè)對象你能選取HTML文檔中的任何部分然后根據(jù)選取信息作一些事情。最常見的范圍對象是由用戶選擇的。2010-02-02javascript函數(shù)作用域?qū)W習(xí)示例(js作用域)
javascript中沒有塊級作用域,取而代之的javascript使用的是函數(shù)作用域,下面使用示例學(xué)習(xí)一下js作用域的使用方法2014-01-01JavaScript中的document.referrer在各種瀏覽器測試結(jié)果
這篇文章主要介紹了JavaScript中的document.referrer在各種瀏覽器測試結(jié)果,包括在多種情況下每個(gè)瀏覽器能否用document.referrer取到值,非常珍貴的測試結(jié)果,需要的朋友可以參考下2014-07-07JavaScript中函數(shù)的常用寫法及調(diào)用方法
這篇文章介紹了JavaScript中函數(shù)的常用寫法及調(diào)用方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-06-06