三、解構賦值
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...