欧美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使用addEventListener添加事件監(jiān)聽用法實(shí)例

    JavaScript使用addEventListener添加事件監(jiān)聽用法實(shí)例

    這篇文章主要介紹了JavaScript使用addEventListener添加事件監(jiān)聽的方法,實(shí)例分析了addEventListener方法的相關(guān)使用技巧,需要的朋友可以參考下
    2015-06-06
  • 一文讀懂TS?中聯(lián)合類型和交叉類型各自的含義

    一文讀懂TS?中聯(lián)合類型和交叉類型各自的含義

    聯(lián)合類型在?TypeScript?中相當(dāng)流行,你可能已經(jīng)用過很多次了。交叉類型稍微不那么常見,它們似乎引起更多的困惑,這篇文章主要介紹了一文讀懂TS?中聯(lián)合類型和交叉類型的含義,需要的朋友可以參考下
    2022-12-12
  • js獲取當(dāng)前路徑的簡單示例代碼

    js獲取當(dāng)前路徑的簡單示例代碼

    本篇文章主要是對js獲取當(dāng)前路徑的示例代碼進(jìn)行了介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2014-01-01
  • 如何用JavaScipt測網(wǎng)速

    如何用JavaScipt測網(wǎng)速

    這篇文章主要介紹了如何用JavaScipt測網(wǎng)速,對測網(wǎng)速感興趣的同學(xué),可以參考下
    2021-05-05
  • 寫gulp遇到的ES6問題詳解

    寫gulp遇到的ES6問題詳解

    這篇文章主要給大家介紹了關(guān)于在寫gulp遇到的ES6問題的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-12-12
  • javascript實(shí)現(xiàn)自動輸出文本(打字特效)

    javascript實(shí)現(xiàn)自動輸出文本(打字特效)

    文字如何實(shí)現(xiàn)打字的效果呢?在瀏覽網(wǎng)頁的時(shí)候也經(jīng)常能看到這種效果。本文給大家匯總介紹了幾種打字效果的文字特效,文字一個(gè)一個(gè)地打印在頁面上。
    2015-08-08
  • JavaScript移動端常用事件之touch觸摸事件詳解

    JavaScript移動端常用事件之touch觸摸事件詳解

    觸屏事件touch也稱為觸摸事件,touch對象代表一個(gè)觸摸點(diǎn),觸摸點(diǎn)可能是一根手指,也可能是一根觸摸筆,觸屏事件可響應(yīng)用戶手指(或觸摸筆)對屏幕或者觸控板操作,下面這篇文章主要給大家介紹了關(guān)于JavaScript移動端常用事件之touch觸摸事件的相關(guān)資料,需要的朋友可以參考下
    2022-10-10
  • JavaScript數(shù)據(jù)結(jié)構(gòu)鏈表知識詳解

    JavaScript數(shù)據(jù)結(jié)構(gòu)鏈表知識詳解

    存儲有序的元素集合,但不同于數(shù)組,鏈表中的元素在內(nèi)存中不是連續(xù)放置的。每個(gè)元素由一個(gè)存儲元素本身的節(jié)點(diǎn)和一個(gè)指向下一個(gè)元素的引用(也稱指針或鏈接)組成。下面通過本文給大家詳細(xì)介紹下,需要的朋友參考下
    2016-11-11
  • JavaScript?防抖debounce與節(jié)流thorttle

    JavaScript?防抖debounce與節(jié)流thorttle

    這篇文章主要介紹了JavaScript?防抖debounce與節(jié)流thorttle,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-05-05
  • 解決js下referer兼容各大瀏覽器的方法

    解決js下referer兼容各大瀏覽器的方法

    眾所周知,我們web開發(fā)人員痛恨IE瀏覽器,因?yàn)镮E不支持標(biāo)準(zhǔn),標(biāo)準(zhǔn)外的默認(rèn)行為又和其他瀏覽器經(jīng)常不一致,所以我們在做項(xiàng)目的時(shí)候,經(jīng)常需要專門針對IE來做些文章,當(dāng)然對于referer也不例外,今天我們就來看下如何讓referer兼容主流瀏覽器
    2014-11-11

最新評論