ES6語法總結含物件擴充套件方法

2021-10-09 01:33:47 字數 4736 閱讀 4587

三、解構賦值

2、物件的解構賦值

三、string的擴充套件方法

四、物件的擴充套件

變數提公升特性增加了程式執行時的不可**性

語法過於鬆散,實現相同的功能,不同的人可能會寫出不同的**

沒有塊級作用域的缺點:

1、內層變數可能會覆蓋外層變數

2、用來計數的迴圈變數洩露為全域性變數

es6 新增了let命令,用來宣告變數。它的用法類似於var,但是所宣告的變數,只在let命令所在的**塊內有效。

let的特點

沒有變數的提公升

有塊級作用域

不能重複宣告

可以重複賦值

只要塊級作用域內存在let命令,它所宣告的變數就「繫結」(binding)這個區域,不再受外部的影響。

var tmp =

123;if(

true

)

上面**中,存在全域性變數tmp,但是塊級作用域內let又宣告了乙個區域性變數tmp,導致後者繫結這個塊級作用域,所以在let宣告變數前,對tmp賦值會報錯。

es6 明確規定,如果區塊中存在let和const命令,這個區塊對這些命令宣告的變數,從一開始就形成了封閉作用域。凡是在宣告之前就使用這些變數,就會報錯。

總之,在**塊內,使用let命令宣告變數之前,該變數都是不可用的。這在語法上,稱為「暫時性死區」(temporal dead zone,簡稱 tdz)。

if

(true

)

上面**中,在let命令宣告變數tmp之前,都屬於變數tmp的「死區」。

「暫時性死區」也意味著typeof不再是乙個百分之百安全的操作。

typeof x;

// referenceerror

let x;

上面**中,變數x使用let命令宣告,所以在宣告之前,都屬於x的「死區」,只要用到該變數就會報錯。因此,typeof執行時就會丟擲乙個referenceerror。

作為比較,如果乙個變數根本沒有被宣告,使用typeof反而不會報錯。

typeof undeclared_variable // "undefined"
上面**中,undeclared_variable是乙個不存在的變數名,結果返「undefined」。所以,在沒有let之前,typeof運算子是百分之百安全的,永遠不會報錯。現在這一點不成立了。這樣的設計是為了讓大家養成良好的程式設計習慣,變數一定要在宣告之後使用,否則就報錯。

const宣告乙個唯讀的常量

沒有變數的提公升

有塊級作用域

不能重複宣告

宣告時必須賦初始值

對於陣列和物件的元素修改,不算作對常量的修改(位址沒有發生改變)

一般常量使用大寫(預設)

es6 允許按照一定模式,從陣列和物件中提取值,對變數進行賦值,這被稱為解構(destructuring)。

以前,為變數賦值,只能直接指定值。

let a =1;

let b =2;

let c =

3;

es6 允許寫成下面這樣。

let

[a, b, c]=[

1,2,

3];

上面**表示,可以從陣列中提取值,按照對應位置,對變數賦值。

本質上,這種寫法屬於「模式匹配」,只要等號兩邊的模式相同,左邊的變數就會被賦予對應的值。下面是一些使用巢狀陣列進行解構的例子。

let

[foo,

[[bar]

, baz]]=

[1,[

[2],

3]];

foo // 1

bar // 2

baz // 3

let[

,, third]=[

"foo"

,"bar"

,"baz"];

third // "baz"

let[x,

, y]=[

1,2,

3];x // 1

y // 3

let[head,

...tail]=[

1,2,

3,4]

;head // 1

tail // [2, 3, 4]

let[x, y,

...z]=[

'a']

;x // "a"

y // undefined

z //

如果解構不成功,變數的值就等於undefined。

let[foo]=[

];let[bar, foo]=[

1];

以上兩種情況都屬於解構不成功,foo的值都會等於undefined。

另一種情況是不完全解構,即等號左邊的模式,只匹配一部分的等號右邊的陣列。這種情況下,解構依然可以成功。

let

[x, y]=[

1,2,

3];x // 1

y // 2

let[a,

[b], d]=[

1,[2

,3],

4];a // 1

b // 2

d // 4

上面兩個例子,都屬於不完全解構,但是可以成功。

let

[foo =

true]=

;foo // true

let[x, y =

'b']=[

'a']

;// x='a', y='b'

let[x, y =

'b']=[

'a', undefined]

;// x='a', y='b'

let a =56;

let b =98;

[b, a]

=[a, b]

; console.

log(

"a", a)

;// 98

console.

log(

'b', b)

;// 56

let arr =[1

,2,3

,5];

let[a,

...b]

= arr;

console.

log(a);1

console.

log(b);[

2,3,

5]

[a,b]

='你好嗎?'

console。log

(b)//好

[a,

,,b]=[

1,2,

3,4]

console.

log(b)

// 4

let=;

foo // "aaa"

bar // "bbb"

物件的解構與陣列有乙個重要的不同。陣列的元素是按次序排列的,變數的取值由它的位置決定;而物件的屬性沒有次序,變數必須與屬性同名,才能取到正確的值。

startswith() 

表示引數字串是否在原字串的頭部,返回布林值

endswith()

表示引數字串是否在原字串的尾部,返回布林值

repeat()

repeat方法表示將原字串重複n次,返回乙個新字串。

raw(

) 返回乙個斜槓都被轉義(即斜槓前面再加乙個斜槓)的字串,往往用於模板字串的處理方法。

includes()

返回布林值,表示是否找到了引數字串。

trim()

去除空格

trimleft()去除左邊空格

trimright

()去除右邊空格

forof 迴圈

padstart( )

padstart

()方法在原字串開頭補全指定的補全字串,直到目標長度所形成的新字串。

padend()

padend

()方法在原字串末尾補全指定的補全字串,直到目標長度所形成的新字串。

let name =

'小明'

;let age =18;

let obj =

}

var key = window.

prompt

("請輸入物件名稱"

,"like");

var value = window.

prompt

("請輸入物件值"

,"好好學習");

var obj =

;console.

log(obj)

;//likeweb: "好好學習"

let name =

'小明'

;let age =20;

let obj =

,我今年

$歲了`);

}}let user =

user.

say();

//我是小明,我今年20歲了

ES6語法之物件的擴充套件

你可能寫過這樣的 使用和所分配的變數名稱相同的名稱初始化物件。let type quartz let color rose let carat 21.29 const gemstone console.log gemstone 看到重複的地方了嗎?type type color color和cara...

es6 語法 (正則擴充套件)

es5中常見修飾符是g i es6中新增 y,u exec 方法用於檢索字串中的正規表示式的匹配。test a false console.log u u.test a true 加上u才能被識別 console.log u let s console.log u test s false cons...

ES6語法總結

1 物件的寫法 es5中物件 es6中物件 注意這種寫法的屬性名稱和值變數是同乙個名稱才可以簡寫,否則要想es5那樣的寫法,例如 2 在物件中的方法的寫法 es5中物件 substrict function es6中物件 substrict 3 物件的匯出寫法 es5兩種形式 1 module.ex...