一直以來使用陣列和物件來定義資料模型,前幾天在翻閱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...