摘要:命令改變了這個(gè)行為,必須要在聲明后使用,否則報(bào)錯(cuò)。值為臨時(shí)鎖區(qū)保證了命令不會(huì)受到外部影響?;臼褂寐暶饕粋€(gè)只讀的常量。默認(rèn)值解構(gòu)允許指定默認(rèn)值內(nèi)部嚴(yán)格使用來判斷是否有值,所以只有當(dāng)一個(gè)數(shù)組成員嚴(yán)格等于,默認(rèn)值才會(huì)生效。
ES6
ES6 就是ECMAScript 6是新版本JavaScript語言的標(biāo)準(zhǔn)。
1. let 和 constES6 新增了 let 和 const 來聲明變量和常量,它們的用法類似var, 但只在代碼塊中有效。
1.1 let 的基本使用{ var a = "hello"; let b = "world"; } a // hello b // Uncaught ReferenceError: a is not defined
上述代碼表明,let只在他所在的代碼塊中有效。
1.2 不能重復(fù)定義let不允許在相同作用域內(nèi),重復(fù)聲明同一個(gè)變量。
let a = "hello"; let a = "world"; // Uncaught SyntaxError: Identifier "a" has already been declared function s1(arg){ let arg; // Uncaught SyntaxError: Identifier "arg" has already been declared }1.3 不存在變量提升
var 命令會(huì)存在變量提升的問題,在定義之前使用,值為 undefined。
let 命令改變了這個(gè)行為,必須要在聲明后使用,否則報(bào)錯(cuò)。
console.log(a); // Uncaught ReferenceError: a is not defined let a = "hello world"; console.log(b); // 值為 undefined var b = "hello kitty"1.4 臨時(shí)鎖區(qū)(Temporal Distonrtion Zone)
保證了let 命令不會(huì)受到外部影響。
var a = 123; function s1(){ a = "hello world"; // Uncaught ReferenceError: a is not defined let a = "hello kitty"; }1.5 const 基本使用
const聲明一個(gè)只讀的常量。一旦聲明,常量的值就不能改變。
const a = "hello world!"; console.log(a) // hello world! a = "hello kitty"; // Uncaught SyntaxError: Identifier "a" has already been declared
const實(shí)際上并不是保證變量的值不能變,而是變量指向的那個(gè)內(nèi)存地址不得改動(dòng)。
const arr = []; arr[0] = "hello"; arr[1] = "world"; console.log(arr); // ["hello", "world"] arr = []; // Uncaught SyntaxError: Identifier "arr" has already been declared const json = {}; json.name = "LiMing"; console.log(json.name) // LiMing json = {} Uncaught SyntaxError: Identifier "json" has already been declared
常量 arr, json 儲(chǔ)存的是一個(gè)地址,只是保證了地址不可變,但數(shù)組和對(duì)象本身是可變的,所以依然可以為其添加新屬性。
2 解構(gòu) 2.1 數(shù)組解構(gòu)賦值var name = "LiMing"; var age = 12; // ES5 變量賦值 let [name, age] = ["LiMing", 12]; // 解構(gòu)賦值
以前為變量賦值,只能直接指定值。ES6中可以按照一定模式,從數(shù)組和對(duì)象中提取值,對(duì)變量進(jìn)行賦值,這被稱為解構(gòu)。
let a = ["LiMing", 12]; let [name, age] = a; console.log(name, age) // LiMing 12 let [,,b] = ["hello", "world", "hello kitty"]; console.log(b) // hello kitty let [one, , two] = [1, 2, 3]; console.log(one, two) // 1 3 let [s1, ...s2] = [1, 2, 3, 4, 5]; console.log(s1, s2) // 1 [2, 3, 4, 5] let b = []; console.log(b) // undefined let [a1, a2 ,a3] = [1]; console.log(a1, a2) // 1 undefined
如果解構(gòu)不成功,變量的值就等于undefined。
如果右邊的數(shù)據(jù)不是數(shù)組將會(huì)報(bào)錯(cuò)。
let [a] = true; // TypeError: true is not iterable let [a] = NaN; // TypeError: NaN is not iterable let [a] = 1; // TypeError: 1 is not iterable let [a] = null; // TypeError: null is not iterable let [a] = undefined; // TypeError: undefined is not iterable let [a] = {}; // TypeError: {} is not iterable2.2 默認(rèn)值
解構(gòu)允許指定默認(rèn)值
let [a = "hello"] = []; console.log(a) // hello
ES6內(nèi)部嚴(yán)格使用 === 來判斷是否有值,所以只有當(dāng)一個(gè)數(shù)組成員嚴(yán)格等于undefined,默認(rèn)值才會(huì)生效。
let [a = "hello world"] = [undefined]; console.log(a) // hello world let [a = "hello world"] = [null]; let [b = "hello kitty"] = [""]; console.log(a, b) // null ""2.3 對(duì)象解構(gòu)
解構(gòu)當(dāng)然也可以用于對(duì)象
let {name, age} = {name: "LiMing", age: 12} console.log(name, age) // LiMing 12
對(duì)象解構(gòu)與數(shù)組解構(gòu)不同。 數(shù)組是有順序的,變量值有位置決定,而對(duì)象是無序的,所以變量名必須為對(duì)象的屬性名
let json = {name: "zero"} let {name} = json let {a} = json console.log(name, a) // zero undefined
如果變量名與屬性名不一致,則需要:
let {a: name} = {name: "zero"} console.log(a) // zero2.4 函數(shù)參數(shù)解構(gòu)
函數(shù)的參數(shù)當(dāng)然也可以解構(gòu)
function s1([a, b]){ return a + b } console.log(s1([1, 5])) // 6 function add({a = 0, b = 0} = {}) { return a + b; } add({a: 3, b: 8}); // 11 add({a: 3}); // 3 add({}); // 0 add(); // 0
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/93604.html
摘要:模板字面量相當(dāng)于格式化字符串字符串用兩個(gè)包含起來并且內(nèi)部的占位符用標(biāo)識(shí)一般用于標(biāo)識(shí)多行文本或者配合函數(shù)使用與箭頭函數(shù)用于數(shù)組是用于讓數(shù)組每一個(gè)元素都調(diào)用函數(shù)的語法基本格式為其中為數(shù)組元素下標(biāo)為當(dāng)前元素所屬的數(shù)組對(duì)象在實(shí)際調(diào)用時(shí)只需要箭頭函數(shù) 1.模板字面量相當(dāng)于格式化字符串,字符串用兩個(gè)``包含起來,并且內(nèi)部的占位符用${variable}標(biāo)識(shí).一般用于標(biāo)識(shí)多行文本或者配合函數(shù)使用. ...
摘要:前端小白最近面試幾家公司,寫點(diǎn)面經(jīng)分享給大家,同時(shí)記錄下自己的缺點(diǎn)以供后期補(bǔ)足,各個(gè)公司的開發(fā)方向不同,請(qǐng)各位理性看待。直接現(xiàn)場(chǎng)手敲觸發(fā)的樣式。數(shù)組去重如何實(shí)現(xiàn)如果用的話,里面如何寫排序算法。對(duì)象何時(shí)被修改心態(tài)需要調(diào)整好,不緊張不匆忙。 前端小白最近面試幾家公司,寫點(diǎn)面經(jīng)分享給大家,同時(shí)記錄下自己的缺點(diǎn)以供后期補(bǔ)足,各個(gè)公司的開發(fā)方向不同,請(qǐng)各位理性看待。 問題相關(guān) Css 布局方式有...
摘要:前端小白最近面試幾家公司,寫點(diǎn)面經(jīng)分享給大家,同時(shí)記錄下自己的缺點(diǎn)以供后期補(bǔ)足,各個(gè)公司的開發(fā)方向不同,請(qǐng)各位理性看待。直接現(xiàn)場(chǎng)手敲觸發(fā)的樣式。數(shù)組去重如何實(shí)現(xiàn)如果用的話,里面如何寫排序算法。對(duì)象何時(shí)被修改心態(tài)需要調(diào)整好,不緊張不匆忙。 前端小白最近面試幾家公司,寫點(diǎn)面經(jīng)分享給大家,同時(shí)記錄下自己的缺點(diǎn)以供后期補(bǔ)足,各個(gè)公司的開發(fā)方向不同,請(qǐng)各位理性看待。 問題相關(guān) Css 布局方式有...
摘要:箭頭函數(shù)我們來看一下箭頭函數(shù)的效果箭頭函數(shù)是無法通過來修改作用域的這個(gè)需要切記。所以切記在需要的時(shí)候使用箭頭函數(shù)。 這是一些小問題的記錄和總結(jié): 1. vue serve和build 在vue-cli3.0中可以快速的開發(fā)原型。通過全局安全@vue/cli-service-global npm i -g @vue/cli-service-global 那么就可以使用vue serve ...
閱讀 2030·2021-09-29 09:35
閱讀 1957·2019-08-30 14:15
閱讀 2981·2019-08-30 10:56
閱讀 967·2019-08-29 16:59
閱讀 581·2019-08-29 14:04
閱讀 1315·2019-08-29 12:30
閱讀 1032·2019-08-28 18:19
閱讀 517·2019-08-26 11:51