JavaScript 標準之 Map物件

2021-09-17 19:52:51 字數 3223 閱讀 1497

一直以來使用陣列和物件來定義資料模型,前幾天在翻閱es6語法的時候,突然發現有一種map物件對操作鍵值對特別好用,而且**更簡潔明瞭。對資料操縱方法多一種解決問題的方法,這是ecma 6 新增的資料結構。

map物件儲存鍵/值對,是鍵/值對的集合。任何值(物件或者原始值) 都可以作為乙個鍵或乙個值。object結構提供了「字串—值」的對應,map結構提供了「值—值」的對應。

mapobj = new map([iterable])
iterable 可以是乙個陣列或者其他iterable物件,其元素或為鍵值對,或為兩個元素的陣列。 每個鍵值對都會新增到新的map。null 會被當做 undefined。

集合中的鍵和值可以是任何型別。如果使用現有鍵向集合新增值,則新值會替換舊值。

相似點:都允許你按鍵訪問乙個值、刪除鍵、檢測乙個鍵是否繫結了值。

不同點:

1. 乙個物件的鍵只能是字串或者symbols,但乙個map的鍵可以是任意值,包括函式、物件、基本型別。

2.map中的鍵值是有序的,而新增到物件中的鍵則不是。因此,當對它進行遍歷時,map物件是按插入的順序返回鍵值。

3. 通過size屬性直接獲取乙個map的鍵值對個數,而object的鍵值對個數只能手動計算。

4.map是可迭代的,而object的迭代需要先獲取它的鍵陣列然後再進行迭代。

5.object都有自己的原型,所以原型鏈上的鍵名有可能和物件上的鍵名產生衝突。雖然 es5 開始可以用 map =object.create(null) 來建立乙個沒有原型的物件,但是這種用法不太常見。

6.map在頻繁增刪鍵值對的場景下會有些效能優勢。

建構函式

指定建立對映的函式。

prototype — 原型(map.prototype)

為對映返回對原型的引用。表示map構造器的原型。允許新增屬性從而應用於所有的map物件。

size(map.length)

返回對映中的元素數。

clear

從對映中移除所有元素。

delete

從對映中移除指定的元素。

foreach

對對映中的每個元素執行指定操作。

get 返回對映中的指定元素。

has 如果對映包含指定元素,則返回 true。

set 新增乙個新建元素到對映。

tostring

返回對映的字串表示形式。

valueof

返回指定物件的原始值。

// map物件類似於物件,也是鍵值對的集合,但是「鍵」的範圍不限於字串,各種型別的值(包括物件)都可以當作鍵。

let a = new map();

let b = 'ff';

a.set(b, )

console.log(a);

console.log(a.get(b));

console.log(a.has(b));

console.log(a.delete(b));

console.log(a.has(b));

// 作為建構函式,map也可以接受乙個陣列作為引數。該陣列的成員是乙個個表示鍵值對的陣列。

let a = new map([

['first', 'aaaaa'],

['second', 'bbbbbbb']

]);console.log(a.size);

// 如果對同乙個鍵多次賦值,後面的值將覆蓋前面的值。

let a = new map();

a.set(1, 'aaa');

a.set(1, 'bbb');

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

// 如果讀取乙個未知的鍵,則返回undefined。!!!注意,只有對同乙個物件的引用,map結構才將其視為同乙個鍵。map 的鍵實際上是跟記憶體位址繫結的,只要記憶體位址不一樣,就視為兩個鍵。

let a = new map();

console.log(a.get('abc')) //undefined

a.set(['a'], 555)

console.log(a.get(['a'])) //undefined

const k1 = ['a']

const k2 = ['a']

a.set(k1, 111)

a.set(k2, 222)

console.log(a.get(k1)) //111

console.log(a.get(k2)) //222

// map.clear() 方法清除所有成員,沒有返回值

let map = new map();

map.set('foo', true)

map.set('bar', true)

console.log(map.size); //2

console.log(map.clear()); //undefined

console.log(map.size); //0

let map = new map([

['first', 'aaaaa'],

['second', 'bbbbbbb']

]);for(let key of map.keys())

for(let value of map.values())

for(let item of map.entries())

// 等同使用map.entries()

for(let [key,value] of map)

// 資料結構可以使用擴充套件運算子(...)

console.log([...map.keys()]);等

JavaScript基礎之標準物件

為了區分物件的型別,我們用typeof操作符獲取物件的型別,它總是返回乙個字串.總結一下有這麼幾條規則需要遵守 1.不要使用new number new boolean new string 建立包裝物件 2.用parseint 或者parsefloat 來轉換任意型別到number 3.用stri...

JavaScript 標準之 Map物件

一直以來使用陣列和物件來定義資料模型,前幾天在翻閱es6語法的時候,突然發現有一種map物件對操作鍵值對特別好用,而且 更簡潔明瞭,簡直太棒了。今天,我們就來一步步了解什麼是map物件,詳細給大家介紹一下map物件的屬性和方法。希望大家以後再資料操縱方法多一種解決問題的方法,這是ecmascript...

javascript實現java中的map

map.js function map linkitems 獲取當前map return 當前物件 map.noop function 非法操作 return map.illegal function param obj param foreignkeys return map.from funct...