国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【JavaScript】JS——Map數(shù)據(jù)類型

這篇具有很好參考價值的文章主要介紹了【JavaScript】JS——Map數(shù)據(jù)類型。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

什么是Map?

存儲鍵值對的對象。


  1. 能夠記住鍵的原始插入順序
  2. 任何值(對象或原始值)都可以作為鍵或值。

特性

Map中的一個鍵只能出現(xiàn)一次,新的值會覆蓋舊的值。

迭代方式:for…of循環(huán),返回一個 [key,value] 的數(shù)組。

鍵的相等:基于零值相等比較

NaN === NaN
-0 === +0

Map與Object的比較

  • Map默認(rèn)不包含任何鍵。它只包含顯示存入的鍵值對。object 有原型
let map1 = new Map()
let obj1 = new Object()

console.log(map1);
console.log(obj1);

【JavaScript】JS——Map數(shù)據(jù)類型,JS,javascript,前端,開發(fā)語言

  • 安全性:Map是一種獨立的數(shù)據(jù)結(jié)構(gòu),不存在對象原型。而在 Object上設(shè)置用戶提供的鍵值對可能會允許攻擊者覆蓋對象的原型,這可能會引發(fā)潛在的安全問題:

    • 原型鏈污染:攻擊者通過提供特定的鍵值對,污染對象的原型鏈。例如,攻擊者可以通過設(shè)置 __proto__ 屬性來修改對象的原型,從而修改或劫持對象的原型上的方法和屬性。
    • 函數(shù)劫持:如果用戶提供的鍵值對中的值是一個函數(shù),并且該函數(shù)被直接賦值給對象的屬性,攻擊者可能會通過提供惡意的函數(shù)來劫持對象的屬性。
    • 對象重寫:如果用戶提供的鍵值對中的鍵與對象的原型中的屬性沖突,攻擊者可能通過提供特定的鍵值對來覆蓋對象的原型屬性。
    • 訪問限制繞過
    const victim = {};
    const attacker = { evilMethod: () => console.log('惡意方法被調(diào)用') };
    
    victim.__proto__ = attacker;
    
    // 調(diào)用原型上的惡意方法
    victim.evilMethod(); // 惡意方法被調(diào)用
    
  • 鍵的類型:Map的鍵可以為任何值(函數(shù)、對象或任何原始值),Object 的鍵必須為 StringSymbol

    • 鍵為函數(shù)實例:緩存函數(shù)調(diào)用結(jié)果

      const cache = new Map();
      
      function createCacheKey(fn, ...args) {
      	return `${fn.name}(${args.join(',')})`;
      }
      
      function calculateResult(x, y) {
           const cacheKey = createCacheKey(calculateResult, x,  y);
                  
      if (cache.has(cacheKey)) {
           console.log('從緩存中獲取結(jié)果');
           return cache.get(cacheKey);
      }
              
      const result = x + y;
            cache.set(cacheKey, result);
            return result;
      }
      
      console.log(calculateResult(2, 3)); // 輸出:5
      console.log(calculateResult(2, 3)); // 輸出:從緩存中獲取結(jié)果,5
      
  • 鍵的順序:Map 對象按照插入的順序迭代條目、鍵和值。

  • 大?。?code>Map中的項目數(shù)量,使用 size屬性獲知,Object通常是通過獲取 Object.keys()返回的數(shù)組長度。

  • 迭代:Map 是可迭代對象,Object沒有實現(xiàn)迭代協(xié)議,默認(rèn)不能通過 for ...of實現(xiàn)迭代

  • 性能:涉及頻繁添加和刪除鍵值對的場景表現(xiàn)更好

  • 序列化或解析:Map 沒有序列化或解析的原生支持;Object支持使用 JSON。stringify()序列化Object到JSON,使用 JSON.parse()解析JSON為Object

map的創(chuàng)建

  • 語法
new Map()
new Map(iterable)

iterable 一個元素是鍵值對的數(shù)組或其他可迭代對象。

const map1 = new Map()
const map2 = new Map([
    [1, "a"],
    [2, "b"],
    [3, "c"],
    [4, "c"]
])

console.log(map1,map2);

【JavaScript】JS——Map數(shù)據(jù)類型,JS,javascript,前端,開發(fā)語言

map的屬性

size()

map2.size // 4

map相關(guān)方法

get()

get(key) 獲取該 map 中的指定元素

console.log(map2.get(1)); // a

set()

set(key, value)Map 對象添加或更新一個指定的鍵值對

map1.set("a", 1)
map1.set("a", 3)
map1.set("b", 2)

// 鏈?zhǔn)教砑?鍵值對
map1.set("bar","foo").set(1, "foobar")
console.log(map1);

【JavaScript】JS——Map數(shù)據(jù)類型,JS,javascript,前端,開發(fā)語言

has()

返回一個布爾值,指示具有指定鍵的元素是否存在.

delete()

delete(key)從該 map 中刪除指定鍵的元素。

console.log(map1.delete("a"));	// true 刪除成功返回true

clear()

移除該 map 中的所有元素.

map1.clear()
console.log(map1); // Map(0) {size: 0}

groupBy()

Map.groupBy(items, callbackFn)

Map對象每個元素都執(zhí)行提供的回調(diào)函數(shù),根據(jù)回調(diào)函數(shù)返回的值進(jìn)行分組

const inventory = [
  { name: 'Tom', age: 9 },
  { name: 'Bob', age: 5 },
  { name: 'Alice', age: 23 },
  { name: 'Taixi', age: 12 },
];

const result = Map.groupBy(inventory, ({ age }) =>
age < 18 ? "teenager" : "young",
);
console.log(result.get("teenager"));

【JavaScript】JS——Map數(shù)據(jù)類型,JS,javascript,前端,開發(fā)語言

map的遍歷

forEach()

forEach(callbackFn) 按插入順序?qū)υ?map 中的每個鍵/值對執(zhí)行一次提供的函數(shù)。

const map2 = new Map([
    [1, "a"],
    [2, "b"],
    [3, "c"],
    [4, "c"]
])

function logMapElement(value, key, map) {
    console.log(`m[${key}]=${value}=${map.get(key)}`);
}

map2.forEach(logMapElement)

entries()

按照插入順序,返回一個新的可迭代迭代器對象,包含了Map對象中的所有鍵值對。

const mapIter = map2.entries()

console.log(mapIter.next().value);
console.log(mapIter.next().value);
console.log(mapIter.next().value);

【JavaScript】JS——Map數(shù)據(jù)類型,JS,javascript,前端,開發(fā)語言

keys() | values()

返回一個迭代器對象,keys()方法返回Map對象中每個元素的鍵,values()方法返回Map對象中每個元素的值。

const mapIter1 = map2.keys()

console.log(mapIter1.next().value);
console.log(mapIter1.next().value);
console.log(mapIter1.next().value);

const mapIter2 = map2.values()

console.log(mapIter2.next().value);
console.log(mapIter2.next().value);
console.log(mapIter2.next().value);

【JavaScript】JS——Map數(shù)據(jù)類型,JS,javascript,前端,開發(fā)語言文章來源地址http://www.zghlxwxcb.cn/news/detail-757025.html

到了這里,關(guān)于【JavaScript】JS——Map數(shù)據(jù)類型的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【前端知識】JavaScript——Symbol類型

    什么是Symbol(符號)類型? ? Symbol是原始值,且Symbol實例是唯一、不可變的。Symbol的用途是確保對象屬性使用唯一標(biāo)識符,不會發(fā)生屬性沖突的危險。Symbol創(chuàng)建唯一記號,進(jìn)而用作非字符串形式的對象屬性。 如何使用Symbol? 全局符號注冊表 使用符號作為屬性 常用內(nèi)置符號

    2024年02月16日
    瀏覽(22)
  • 大型醫(yī)院云HIS系統(tǒng):采用前后端分離架構(gòu),前端由Angular語言、JavaScript開發(fā);后端使用Java語言開發(fā) 融合B/S版電子病歷系統(tǒng)

    大型醫(yī)院云HIS系統(tǒng):采用前后端分離架構(gòu),前端由Angular語言、JavaScript開發(fā);后端使用Java語言開發(fā) 融合B/S版電子病歷系統(tǒng)

    一套醫(yī)院云his系統(tǒng)源碼 采用前后端分離架構(gòu),前端由Angular語言、JavaScript開發(fā);后端使用Java語言開發(fā)。融合B/S版電子病歷系統(tǒng),支持電子病歷四級,HIS與電子病歷系統(tǒng)均擁有自主知識產(chǎn)權(quán)。 文末卡片獲取聯(lián)系! 基于云計算技術(shù)的B/S架構(gòu)的醫(yī)院管理系統(tǒng)(簡稱云HIS),采用前后

    2024年02月03日
    瀏覽(31)
  • [javascript核心-09] 徹底解決js中的類型檢測方案

    typeof 基于數(shù)據(jù)類型的值(二進(jìn)制)進(jìn)行檢測 返回結(jié)果為字符串 typeof NaN 結(jié)果為 number typeof null 結(jié)果為 Object .對象存儲以 000 開頭,而 null 也是如此。 typeof 不能細(xì)分對象,結(jié)果都是 Object typeof function(){} 結(jié)果為 function instanceof 檢測某個構(gòu)造函數(shù)是否出現(xiàn)在某實例的原型鏈上 返回結(jié)

    2024年02月16日
    瀏覽(24)
  • JS-27 前端數(shù)據(jù)請求方式;HTTP協(xié)議的解析;JavaScript XHR、Fetch的數(shù)據(jù)請求與響應(yīng)函數(shù);前端文件上傳XHR、Fetch;安裝瀏覽器插件FeHelper

    JS-27 前端數(shù)據(jù)請求方式;HTTP協(xié)議的解析;JavaScript XHR、Fetch的數(shù)據(jù)請求與響應(yīng)函數(shù);前端文件上傳XHR、Fetch;安裝瀏覽器插件FeHelper

    早期的網(wǎng)頁都是通過后端渲染來完成的,即服務(wù)器端渲染(SSR,server side render): 客戶端發(fā)出請求 - 服務(wù)端接收請求并返回相應(yīng)HTML文檔 - 頁面刷新,客戶端加載新的HTML文檔; 服務(wù)器端渲染的缺點: 當(dāng)用戶點擊頁面中的某個按鈕向服務(wù)器發(fā)送請求時,頁面本質(zhì)上只是一些數(shù)

    2024年02月16日
    瀏覽(42)
  • jQuery.js - 前端必備的Javascript庫

    jQuery.js - 前端必備的Javascript庫

    作者: WangMin 格言: 努力做好自己喜歡的每一件事 jQuery.js 是什么? jQuery是一個快速簡潔、免費開源易用的JavaScript框架, 倡導(dǎo)寫更少的代碼,做更多的事情 。它封裝JavaScript常用的功能代碼,提供了一種簡便的JavaScript設(shè)計模式,以及我們開發(fā)中常用到的操作DOM的API,優(yōu)化HTML文

    2024年02月05日
    瀏覽(90)
  • JavaScript 入門指南(二)JavaScript 的數(shù)據(jù)類型

    undefined 類型:只有一個值 undefined(未定義),它是一個保留字。表示變量雖然已經(jīng)聲明,但卻沒有賦值 number 類型:所有的整數(shù)和小數(shù) 注: NaN 是一個特殊的數(shù)字值( typeof NaN 的結(jié)果為 number ),是 not a number 的縮寫,表示不是一個合法的數(shù)字。不是數(shù)字的字符串通過函數(shù)進(jìn)

    2024年03月27日
    瀏覽(32)
  • 【JavaScript】3.4 JavaScript在現(xiàn)代前端開發(fā)中的應(yīng)用

    【JavaScript】3.4 JavaScript在現(xiàn)代前端開發(fā)中的應(yīng)用

    JavaScript 是現(xiàn)代前端開發(fā)的核心。無論是交互效果,還是復(fù)雜的前端應(yīng)用,JavaScript 都發(fā)揮著關(guān)鍵作用。在本章節(jié)中,我們將探討 JavaScript 在現(xiàn)代前端開發(fā)中的應(yīng)用,包括如何使用 JavaScript 來處理用戶交互、動態(tài)內(nèi)容、前端路由、API 請求等。 JavaScript 是處理用戶交互的主要工

    2024年02月04日
    瀏覽(26)
  • 〖大前端 - 基礎(chǔ)入門三大核心之JS篇?〗- JavaScript 的「數(shù)組」

    〖大前端 - 基礎(chǔ)入門三大核心之JS篇?〗- JavaScript 的「數(shù)組」

    當(dāng)前子專欄 基礎(chǔ)入門三大核心篇 是免費開放階段 。 推薦他人訂閱,可獲取扣除平臺費用后的35%收益,文末名片加V! 說明:該文屬于 大前端全棧架構(gòu)白寶書專欄, 目前階段免費開放 , 購買任意白寶書體系化專欄可加入 TFS-CLUB 私域社區(qū)。 福利:除了通過訂閱\\\"白寶書系列專

    2024年02月04日
    瀏覽(23)
  • 前端開發(fā)——Javascript知識(介紹)

    目錄 有關(guān)JavaScript的知識? JavaScript的優(yōu)點? ?JavaScript的領(lǐng)域 JavaScript的組成 JavaScript的特點 第一個JavaScript程序 在 HTML 文檔中嵌入 JavaScript 代碼 在腳本文件中編寫 JavaScript 代碼 JavaScript內(nèi)容? Html內(nèi)容? JavaScript 代碼執(zhí)行順序 JavaScript中的幾個重要概念 標(biāo)識符 保留字 區(qū)分

    2024年02月01日
    瀏覽(25)
  • 前端開發(fā)——JavaScript的條件語句

    ? 世界不僅有黑,又或者白 世界而是一道精致的灰 ?——Lungcen ? ? 目錄 條件判斷語句 if 語句 if else 語句 if else if else 語句 ?switch語句 break case 子句 default語句 while循環(huán)語句 do while循環(huán)語句 for循環(huán)語句 for 循環(huán)中的三個表達(dá)式 for 循環(huán)嵌套 for 循環(huán)變體——for in for 循環(huán)

    2023年04月21日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包