欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaScript?Map?和?Object?的區(qū)別解析

 更新時(shí)間:2022年08月18日 11:02:07   作者:m0_67402341  
在JavaScript中,Map 和 Object 看起來都是用鍵值對來存儲數(shù)據(jù),那么他們有什么不同呢,這篇文章主要介紹了JavaScript?Map?和?Object?的區(qū)別,需要的朋友可以參考下

在JavaScript中,MapObject 看起來都是用鍵值對來存儲數(shù)據(jù),那么他們有什么不同呢?

不同點(diǎn)

Key filed

在 Object 中, key 必須是簡單數(shù)據(jù)類型(整數(shù),字符串或者是 symbol),而在 Map 中則可以是 JavaScript 支持的所有數(shù)據(jù)類型,也就是說可以用一個(gè) Object 來當(dāng)做一個(gè)Map元素的 key。

元素順序

Map 元素的順序遵循插入的順序,而 Object 的則沒有這一特性。

繼承

Map 繼承自 Object 對象。

新建實(shí)例

Object 支持以下幾種方法來創(chuàng)建新的實(shí)例:

var obj = {...};
var obj = new Object();
var obj = Object.create(null);

Map 僅支持下面這一種構(gòu)建方法:

var map = new Map([[1, 2], [2, 3]]); // map = {1 => 2, 2 => 3}

數(shù)據(jù)訪問

Map 想要訪問元素,可以使用 Map 本身的原生方法:

map.get(1) // 2

Object 可以通過 .[ ] 來訪問

obj.id;
obj['id'];

判斷某個(gè)元素是否在 Map 中可以使用

map.has(1);

判斷某個(gè)元素是不是在 Object 中需要以下操作:

obj.id === undefined;
// 或者
'id' in obj;

另外需要注意的一點(diǎn)是,Object 可以使用 Object.prototype.hasOwnProperty() 來判斷某個(gè)key是否是這個(gè)對象本身的屬性,從原型鏈繼承的屬性不包括在內(nèi)。

新增一個(gè)數(shù)據(jù)

Map 可以使用 set() 操作:

map.set(key, value)
// 當(dāng)傳入的 key 已經(jīng)存在的時(shí)候,Map 會覆蓋之前的值

Object 新增一個(gè)屬性可以使用:

obj['key'] = value;
obj.key = value;
// object也會覆蓋

刪除數(shù)據(jù)

在 Object 中沒有原生的刪除方法,我們可以使用如下方式:

delete obj.id;
// 下面這種做法效率更高
obj.id = undefined

需要注意的是,使用 delete 會真正的將屬性從對象中刪除,而使用賦值 undefined 的方式,僅僅是值變成了 undefined。屬性仍然在對象上,也就意味著 在使用 for … in… 去遍歷的時(shí)候,仍然會訪問到該屬性。

Map 有原生的 delete 方法來刪除元素:

var isDeleteSucceeded = map.delete(1);
console.log(isDeleteSucceeded ); // true
// 全部刪除
map.clear();

獲取size

Map 自身有 size 屬性,可以自己維持 size 的變化。
Object 則需要借助 Object.keys() 來計(jì)算

console.log(Object.keys(obj).length); 

Iterating

Map 自身支持迭代,Object 不支持。

如何確定一個(gè)類型是不是支持迭代呢? 可以使用以下方法:

console.log(typeof obj[Symbol.iterator]); // undefined
console.log(typeof map[Symbol.iterator]); // function

何時(shí)使用 Map ,何時(shí)使用 Object?

雖然Map 在很多時(shí)候優(yōu)于 Object,但是作為 JavaScript 最基礎(chǔ)的數(shù)據(jù)類型,還是有很多情景更適合使用 Object。

  • 當(dāng)所要存儲的是簡單數(shù)據(jù)類型,并且 key 都為字符串或者整數(shù)或者 Symbol 的時(shí)候,優(yōu)先使用 Object ,因?yàn)镺bject可以使用 字符變量 的方式創(chuàng)建,更加高效。
  • 當(dāng)需要在單獨(dú)的邏輯中訪問屬性或者元素的時(shí)候,應(yīng)該使用 Object,例如:
var obj = {
id: 1,
name: “It's Me!”,
print: function(){
return Object Id: ${this.id}, with Name: ${this.name};
}
}
console.log(obj.print());//Object Id: 1, with Name: It's Me.
// 以上操作不能用 Map 實(shí)現(xiàn)
  • JSON 直接支持 Object,但不支持 Map
  • Map 是純粹的 hash, 而 Object 還存在一些其他內(nèi)在邏輯,所以在執(zhí)行 delete 的時(shí)候會有性能問題。所以寫入刪除密集的情況應(yīng)該使用 Map。
  • Map 會按照插入順序保持元素的順序,而Object做不到。
  • Map 在存儲大量元素的時(shí)候性能表現(xiàn)更好,特別是在代碼執(zhí)行時(shí)不能確定 key 的類型的情況。

到此這篇關(guān)于JavaScript Map 和 Object 的區(qū)別的文章就介紹到這了,更多相關(guān)JavaScript Map 和 Object 區(qū)別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • javaScript的函數(shù)對象的聲明詳解

    javaScript的函數(shù)對象的聲明詳解

    這篇文章主要介紹了javaScript的函數(shù)對象的聲明詳解,需要的朋友可以參考下
    2015-02-02
  • 前端js使用xlsx-js-style導(dǎo)出Excel文件并修飾單元格樣式

    前端js使用xlsx-js-style導(dǎo)出Excel文件并修飾單元格樣式

    這篇文章主要給大家介紹了關(guān)于前端js使用xlsx-js-style導(dǎo)出Excel文件并修飾單元格樣式的相關(guān)資料,前端開發(fā)過程中經(jīng)常遇到導(dǎo)出excel的需求,需要的朋友可以參考下
    2023-08-08
  • 解決LayUI表單獲取不到data的問題

    解決LayUI表單獲取不到data的問題

    今天小編就為大家分享一篇解決LayUI表單獲取不到data的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • Webpack實(shí)現(xiàn)多頁面打包的方法步驟

    Webpack實(shí)現(xiàn)多頁面打包的方法步驟

    本文主要介紹了Webpack實(shí)現(xiàn)多頁面打包的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • e.target與e.currentTarget對象的使用區(qū)別詳解

    e.target與e.currentTarget對象的使用區(qū)別詳解

    這篇文章主要為大家介紹了e.target與e.currentTarget的使用區(qū)別示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • JavaScript 實(shí)現(xiàn) Tab 點(diǎn)擊切換實(shí)例代碼

    JavaScript 實(shí)現(xiàn) Tab 點(diǎn)擊切換實(shí)例代碼

    Tab 選項(xiàng)卡切換效果在現(xiàn)如今的網(wǎng)頁中,運(yùn)用的也是比較多的,包括點(diǎn)擊切換、滑動切換、延遲切換、自動切換等多種效果,在這篇博文里,我們是通過原生 JavaScript 來實(shí)現(xiàn) Tab 點(diǎn)擊切換的效果。
    2017-03-03
  • js實(shí)現(xiàn)簡單的可切換選項(xiàng)卡效果

    js實(shí)現(xiàn)簡單的可切換選項(xiàng)卡效果

    這篇文章主要介紹了js實(shí)現(xiàn)簡單的可切換選項(xiàng)卡效果的方法,涉及javascript操作css樣式實(shí)現(xiàn)切換選項(xiàng)卡的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-04-04
  • uniapp中renderjs使用與傳值問題

    uniapp中renderjs使用與傳值問題

    renderjs是一個(gè)運(yùn)行在視圖層的js,它只支持app-vue和h5,下面這篇文章主要給大家介紹了關(guān)于uniapp中renderjs使用與傳值問題的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-07-07
  • JavaScript可折疊區(qū)域?qū)崿F(xiàn)代碼

    JavaScript可折疊區(qū)域?qū)崿F(xiàn)代碼

    可折疊區(qū)域的基本思想:通過點(diǎn)擊某個(gè)地方來顯示或隱藏屏幕中的某個(gè)區(qū)域。
    2010-10-10
  • JavaScript JSON數(shù)據(jù)處理全集(小結(jié))

    JavaScript JSON數(shù)據(jù)處理全集(小結(jié))

    這篇文章主要介紹了JavaScript JSON數(shù)據(jù)處理全集,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08

最新評論