Vue ES6 總結(jié)

1.? normalize()

用來將字符的不同表示方法統(tǒng)一為同樣的形式,成為Unicode正規(guī)化。

例如皆尔,'\u01D1'.normalize() === '\u004F\u030C'.normalize(),結(jié)果為true

2.? includes(),startsWith(), endsWith()

用于判斷某字符串中是否包含另外的字符

例如:

var s = 'Hello world!';

s.startsWith('Hello') // true

s.endsWith('!') // true

s.includes('o') // true


這三個方法都支持第二個參數(shù)秕衙,表示開始搜索的位置

例如:

var s = 'Hello world!';

s.startsWith('world', 6) // true

s.endsWith('Hello', 5) // true

s.includes('Hello', 6) // false

3.? repeat(n) 返回一個新字符串,表示將原字符串重復(fù)n次事秀。

4.? padStart()padEnd()分別表示在字符串頭部和尾部用指定字符串補(bǔ)全。

例如:

'12'.padStart(10, 'YYYY-MM-DD') // "YYYY-MM-12"

'09-12'.padStart(10, 'YYYY-MM-DD') // "YYYY-09-12"

5.? 模版字符串是增強(qiáng)版的字符串野舶,用反引號( `)來表示易迹,字符串可以換行,可以加入用{}包圍的變量平道,消除換行可以用trim()睹欲。

例如:$('#list').html(`

first

second

`.trim());

6.? Eval用法,eval用于執(zhí)行字符串模式的函數(shù)

let str = '(name) => `Hello ${name}!`';

let func = eval.call(null, str);

func('Jack') // "Hello Jack!"

7.? Number.isFinite()Number.isNaN(). 前者用來判斷是否為數(shù)值一屋,后者判斷是否為NaN.

例如:Number.isFinite(15); // true

Number.isFinite('15'); // false

Number.isNaN(NaN) // true

Number.isNaN(15) // false

8.? Math.trunc()用于去除一個數(shù)的小數(shù)點部分窘疮,返回整數(shù)部分。

9.? Math.sign()用于判斷一個數(shù)到底是正數(shù)冀墨、負(fù)數(shù)闸衫、還是零。它會返回五種值诽嘉。

參數(shù)為正數(shù)蔚出,返回+1;參數(shù)為負(fù)數(shù)虫腋,返回-1骄酗;參數(shù)為0,返回0悦冀;參數(shù)為-0趋翻,返回-0;其他值盒蟆,返回NaN踏烙。

10.? Array.from()师骗,將對象轉(zhuǎn)為真正的數(shù)組。擴(kuò)展運算符()也可以將某些數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)化為數(shù)組讨惩。

例如:

// NodeList對象

[...document.querySelectorAll('div')]

// NodeList對象

let ps = document.querySelectorAll('p');

Array.from(ps).forEach(function (p) {

? console.log(p);

});

Array.from()也接受第二個參數(shù)丧凤,作用類似于數(shù)組中的map方法,用來對每個元素進(jìn)行處理步脓,處理后的結(jié)果放到數(shù)組中。

例如:

Array.from(arrayLike, x => x * x);

// 等同于

Array.from(arrayLike).map(x => x * x);

Array.from([1, 2, 3], (x) => x * x)

// [1, 4, 9]

11.? 數(shù)組的find()findIndex()方法浩螺,find()用于找出第一個滿足條件的數(shù)組成員靴患,如果沒有,則返回undefined要出;findIndex()同find()類似鸳君,如果有,則返回第一個符合條件的位置患蹂,若沒有符合條件的就返回-1.

例如:

[1, 4, -5, 10].find((n) => n < 0)

// -5

[1, 5, 10, 15].findIndex(function(value, index, arr) {

? return value > 9;

}) // 2

另外或颊,這兩個方法都滿足第二個參數(shù),也可以查找NaN

12.? 數(shù)組的includes()方法返回一個布爾值传于,用來表示某個數(shù)組是否包含給定的值囱挑,與字符串的includes方法類似。

Map和Set數(shù)據(jù)結(jié)構(gòu)都有has方法沼溜,前者是查找key平挑,后者查找value。

例如:

Map.prototype.has(key)

Set.prototype.has(value)

13.? 數(shù)組中的filter()方法用于對數(shù)組按條件進(jìn)行篩選系草。

例如:以下返回結(jié)果是id滿足條件的組成的新數(shù)組

let filtered = this.collections.filter(coll =>{

???????????return coll.id === collectionId;

?????????});

14.? 擴(kuò)展運算符(spread)是三個點(通熄。將一個數(shù)組轉(zhuǎn)化為用逗號分隔的參數(shù)序列。

例如:

console.log(...[1, 2, 3])

// 1 2 3

function add(x, y) {

? returnx + y;

}


var numbers = [4, 38];

add(...numbers) // 42


Math.max(...[14, 3, 77])

等同于

Math.max(14, 3, 77);


擴(kuò)展運算符用法:

(1)合并數(shù)組

// ES5的合并數(shù)組

arr1.concat(arr2, arr3);

// [ 'a', 'b', 'c', 'd', 'e' ]

// ES6的合并數(shù)組

[...arr1, ...arr2, ...arr3]

// [ 'a', 'b', 'c', 'd', 'e' ]


(2)與解構(gòu)賦值結(jié)合

// ES5

a = list[0], rest = list.slice(1)

// ES6

[a, ...rest] = list

將擴(kuò)展運算符用于數(shù)組賦值時找都,只能放在最后一個參數(shù)唇辨,否則報錯

const [...butLast, last] = [1, 2, 3, 4, 5];

// 報錯

const [first, ...rest] = [1, 2, 3, 4, 5];

first // 1

rest? // [2, 3, 4, 5]


(3)函數(shù)的返回值

vardateFields = readDateFields(database);

var d = new Date(...dateFields);


(4) 字符串,將字符串轉(zhuǎn)為數(shù)組

[...'hello']

// [ "h", "e", "l", "l", "o" ]


(5)實現(xiàn)Iterator接口的對象

(6)Map和Set結(jié)構(gòu)能耻,Generator函數(shù)

15.? 函數(shù):

例如:

var f = () => 5;

// 等同于

var f = function () { return 5 };


varsum = (num1, num2) => num1 + num2;

// 等同于

var sum = function(num1, num2) {

? returnnum1 + num2;

};

16. 屬性的簡潔表示法:

var foo = 'bar';

varbaz = {foo};

baz // {foo: "bar"}

// 等同于

var baz = {foo: foo};

varms = {};

function getItem (key) {

? return key in ms ? ms[key] : null;

}

function setItem (key, value) {

? ms[key] = value;

}

function clear () {

? ms = {};

}


module.exports = { getItem, setItem, clear };

// 等同于

module.exports = {

? getItem: getItem,

? setItem: setItem,

? clear: clear

};

17. Object.assign()用于對象的合并赏枚,將源對象的所有可枚舉屬性,拷貝到目標(biāo)對象中晓猛。第一個參數(shù)是目標(biāo)對象嗡贺,后面的參數(shù)是源對象。

注意:Object.assign方法實行的是淺拷貝鞍帝,而不是深拷貝诫睬。也就是說,如果源對象某個屬性的值是對象帕涌,那么目標(biāo)對象拷貝得到的是這個對象的引用摄凡。

常見用途:

1)為對象添加屬性

class Point {

? constructor(x, y) {

??? Object.assign(this, {x, y});

? }

}


2)為對象添加方法

3)克隆對象

4)合并多個對象為屬性指定默認(rèn)值

5)指定多個對象

18.? 屬性的遍歷. ES6有五種方式遍歷:

(1) For…in?

例如:

for (let it in data)


(2) Object.keys(obj)

例如:

Object.keys(initial).forEach(key =>{

???????state[key] = initial[key];

?????});


(3) Object.getOwnPropertyNames(obj) 返回一個數(shù)組

(4) Object.getOwnPropertySymbols(obj) 返回一個數(shù)組,包含所有的symbol屬性

(5) Reflect.ownKeys(obj) 返回一個數(shù)組,包含所有屬性

19.? __proto__ 屬性

(1) __proto__ 屬性,用于讀取或獲取當(dāng)前對象的prototype對象.

var obj = {

? method:function() { ... }

};

obj.__proto__ = someOtherObj;


(2)Object.setPrototypeof(). 該方法作用與__proto__相同,用來設(shè)置一個prototype對象. 其用法為: var o = Object.setPrototypeOf({}, null);

(3)Object.getPrototypeof(). 該方法與setPrototypeof()對應(yīng)著使用,用于讀取prototype對象.

例如:

function Rectangle() {

}

var rec = new Rectangle();

Object.getPrototypeOf(rec) ===Rectangle.prototype

// true

Object.setPrototypeOf(rec, Object.prototype);

Object.getPrototypeOf(rec) ===Rectangle.prototype

// false

20.? Object.keys(). 讀取object中的所有鍵名并存放到數(shù)組中

例如:

var obj = { foo: "bar", baz: 42 };

Object.keys(obj)

// ["foo", "baz"]

const header = Object.keys(items[0]);

?????let csv = items.map(row =>

???????header.map(fieldName =>{

?????????let result = row[fieldName] === null ? '' : row[fieldName];

?????????return result;

???????})

?????);

21.? Object.values(). 讀取object中所有鍵值到數(shù)組中,如果不是顯式屬性,則不會遍歷出來,所以symbol屬性不會被遍歷

例如:

var obj = { foo: "bar", baz: 42 };

Object.values(obj)

// ["bar", 42]

22.? Object.entries(), 讀取object中的所有鍵名鍵值,并將鍵名和鍵值對應(yīng)起來分別放到不同數(shù)組中.

例如:

var obj = { foo: 'bar', baz: 42 };

Object.entries(obj)

// [ ["foo", "bar"],["baz", 42] ]

23.? Set類似于數(shù)組,但是成員的值都是唯一的.

例如:

var s = new Set();

[2, 3, 5, 4, 5, 2, 2].map(x => s.add(x));

for (let i of s) {

?console.log(i);

}

// 2 3 5 4


// 例一

var set = new Set([1, 2, 3, 4, 4]);

[...set]

// [1, 2, 3, 4]


// 例二

var items = new Set([1, 2, 3, 4, 5, 5, 5, 5]);

items.size // 5


// 例三

function divs () {

? return[...document.querySelectorAll('div')];

}


var set = new Set(divs());

set.size // 56


// 類似于

divs().forEach(div => set.add(div));

set.size // 56


Set中兩個NaN總是相等,但是兩個空對象總是不相等.

let set = new Set();


set.add({});

set.size // 1


set.add({});

set.size // 2



Set實例的方法:

add(value):添加某個值续徽,返回Set結(jié)構(gòu)本身。

delete(value):刪除某個值亲澡,返回一個布爾值钦扭,表示刪除是否成功。

has(value):返回一個布爾值床绪,表示該值是否為Set的成員客情。

clear():清除所有成員,沒有返回值癞己。

Set的遍歷方法:

keys():返回鍵名的遍歷器

values():返回鍵值的遍歷器

entries():返回鍵值對的遍歷器

forEach():使用回調(diào)函數(shù)遍歷每個成員

擴(kuò)展運算符和Set結(jié)構(gòu)相結(jié)合膀斋,就可以去除數(shù)組的重復(fù)成員。

例如:

let arr = [3, 5, 2, 2, 5, 5];

let unique = [...new Set(arr)];

// [3, 5, 2]


數(shù)組的map和filter也可用于Set.

例如:

let set = new Set([1, 2, 3]);

set = new Set([...set].map(x => x * 2));

// 返回Set結(jié)構(gòu):{2, 4, 6}


let set = new Set([1, 2, 3, 4, 5]);

set = new Set([...set].filter(x => (x % 2)== 0));

// 返回Set結(jié)構(gòu):{2,4}

24.? Cookie, localStoragesessionStorage的區(qū)別:

因為考慮到每個 HTTP 請求都會帶著 Cookie 的信息痹雅,所以 Cookie 當(dāng)然是能精簡就精簡啦仰担,比較常用的一個應(yīng)用場景就是判斷用戶是否登錄。針對登錄過的用戶绩社,服務(wù)器端會在他登錄時往 Cookie 中插入一段加密過的唯一辨識單一用戶的辨識碼摔蓝,下次只要讀取這個值就可以判斷當(dāng)前用戶是否登錄啦。曾經(jīng)還使用 Cookie 來保存用戶在電商網(wǎng)站的購物車信息愉耙,如今有了 localStorage贮尉,似乎在這個方面也可以給 Cookie 放個假了~

而另一方面 localStorage 接替了Cookie 管理購物車的工作,同時也能勝任其他一些工作朴沿。比如HTML5游戲通常會產(chǎn)生一些本地數(shù)據(jù)绘盟,localStorage 也是非常適用的。如果遇到一些內(nèi)容特別多的表單悯仙,為了優(yōu)化用戶體驗龄毡,我們可能要把表單頁面拆分成多個子頁面,然后按步驟引導(dǎo)用戶填寫锡垄。這時候 sessionStorage 的作用就發(fā)揮出來了沦零。

安全性考慮:

需要注意的是,不是什么數(shù)據(jù)都適合放在Cookie货岭、localStorage和sessionStorage 中的路操。使用它們的時候,需要時刻注意是否有代碼存在XSS 注入的風(fēng)險千贯。因為只要打開控制臺屯仗,你就隨意修改它們的值,也就是說如果你的網(wǎng)站中有XSS 的風(fēng)險搔谴,它們就能對你的localStorage 肆意妄為魁袜。所以千萬不要用它們存儲你系統(tǒng)中的敏感數(shù)據(jù)。

Vuex的數(shù)據(jù)是存放在localStorage中.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市峰弹,隨后出現(xiàn)的幾起案子店量,更是在濱河造成了極大的恐慌,老刑警劉巖鞠呈,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件融师,死亡現(xiàn)場離奇詭異,居然都是意外死亡蚁吝,警方通過查閱死者的電腦和手機(jī)旱爆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來窘茁,“玉大人怀伦,你說我怎么就攤上這事∶硎铮” “怎么了?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵浩淘,是天一觀的道長捌朴。 經(jīng)常有香客問我,道長张抄,這世上最難降的妖魔是什么砂蔽? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮署惯,結(jié)果婚禮上左驾,老公的妹妹穿的比我還像新娘。我一直安慰自己极谊,他們只是感情好诡右,可當(dāng)我...
    茶點故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著轻猖,像睡著了一般帆吻。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上咙边,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天猜煮,我揣著相機(jī)與錄音,去河邊找鬼败许。 笑死王带,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的市殷。 我是一名探鬼主播愕撰,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了盟戏?” 一聲冷哼從身側(cè)響起绪妹,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎柿究,沒想到半個月后邮旷,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡蝇摸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年婶肩,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片貌夕。...
    茶點故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡律歼,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出啡专,到底是詐尸還是另有隱情险毁,我是刑警寧澤,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布们童,位于F島的核電站畔况,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏慧库。R本人自食惡果不足惜跷跪,卻給世界環(huán)境...
    茶點故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望齐板。 院中可真熱鬧吵瞻,春花似錦、人聲如沸甘磨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽济舆。三九已至尉姨,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間吗冤,已是汗流浹背又厉。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留椎瘟,地道東北人覆致。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像肺蔚,于是被迫代替她去往敵國和親煌妈。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,446評論 2 348

推薦閱讀更多精彩內(nèi)容