久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合

站長資訊網
最全最豐富的資訊網站

es6解構支持字符串嗎

es6解構支持字符串。ES6允許按照一定模式,從數組和對象中提取值,對變量進行賦值,這被稱為解構;通過解構賦值可以將屬性值從對象/數組中取出賦值給其他變量。字符串也可以解構賦值,字符串會被轉換成了一個類似數組的對象;類似數組的對象都有一個length屬性,因此還可以對這個屬性解構賦值。

es6解構支持字符串嗎

前端(vue)入門到精通課程:進入學習
Apipost = Postman + Swagger + Mock + Jmeter 超好用的API調試工具:點擊使用

本教程操作環境:windows10系統、ECMAScript 6版、Dell G3電腦。

es6的解構是什么意思

destructuring:百度百科的意思是結構分解,ES6 中允許按照一定模式,從數組和對象中提取值,對變量進行賦值,這被稱為解構(Destructuring)。

解構賦值語法是一種 Javascript 表達式,通過解構賦值可以將屬性值從對象/數組中取出賦值給其他變量

ES6 允許按照一定模式,從數組和對象中提取值,對變量進行賦值,這被稱為解構

開發中比較常見的有字符串解構、對象解構、 數組解構、混合解構。這是一種將數據結構分解為更小的部分的過程,從而達到簡化提取信息的目的。

1. 基本數據類型解構

1-1 字符串解構賦值

字符串也可以解構賦值,字符串會被轉換成了一個類似數組的對象

類似數組的對象都有一個length 屬性,因此還可以對這個屬性解構賦值

// 會將字符串轉換成一個類數組對象 let [a, b, c, d ,e] = 'hello'; console.log(a, b, c, d ,e); // h e l l o  // 類數組對象lenth 屬性解構 let {length : num} = 'hello'; console.log(num); // 5
登錄后復制

1-2 數值、布爾值解構賦值

解構賦值時,如果等號右邊是數值和布爾值,則會先轉為對象

解構賦值的規則是,只要等號右邊的值不是對象或數組,就先將其轉為對象

數值和布爾值的包裝對象都有 toString 屬性,變量都能取到值

let {toString: s} = 123; s === Number.prototype.toString // true  let {toString: s} = true; s === Boolean.prototype.toString // true
登錄后復制

由于 undefinednull 無法轉為對象,所以對它們進行解構賦值,都會報錯

let { prop: x } = undefined; // TypeError let { prop: y } = null; // TypeError
登錄后復制

2. 數組解構

2-1 基本用法

  • 數組可以變量聲明并賦值時解構,也可以在變量先聲明后賦值時解構

// 數組可以在變量聲明并賦值時解構 let arr = ['jsx', 'ljj', 'zdj', 'ddc'] let [one, two, three, four] = arr; console.log(one, two, three, four); // jsx ljj zdj ddc  // 也可以在變量先聲明后賦值解構 let name1, name2, name3, name4; [name1, name2, name3, name4] = ['jsx', 'ljj', 'zdj', 'ddc']; console.log(name1, name2, name3, name4); // jsx ljj zdj ddc
登錄后復制

2-2 完全解構

  • 只要等號兩邊的模式相同,左邊的變量就會被賦予對應的值

let [one, two, three] = ['html', 'css', 'js']; console.log(one, two, three); // html css js  let [str1, [str2], str3] = ['jsx', ['ljj'], 'ddc'] console.log(str1, str2, str3); // jsx ljj ddc
登錄后復制

  • 數組中不想要的元素也可以使用逗號 , 來忽略

let [, , name] = ['haha', 'xixi', 'jsx']; console.log(name); // jsx  let [, xixi , ] = ['haha', 'xixi', 'jsx']; console.log(xixi); // xixi
登錄后復制

  • 當解構一個數組時,可以使用擴展語法 ...,將數組剩余部分賦值給一個變量

let [num, ...numN] = [1, 2, 3, 4]; console.log(num); // 1 console.log(numN); //  [2, 3, 4]
登錄后復制

  • 交換變量值,在一個解構表達式中可以交換兩個變量的值

let name1 = 'jsx'; let name2 = 'ljj'; let name3 = 'ddc'; [name1, name2, name3] = [name3, name1, name2]; console.log(name1, name2, name3); // ddc jsx ljj
登錄后復制

  • 等號右側可以是任何可迭代對象(具備 Iterator 接口對象或數組)

let [a, b, c] = 'jsx'; console.log(a, b, c); // j s x  let [one1, two1, three1] = new Set([1, 2, 3]); console.log(one1, two1, three1); // 1 2 3
登錄后復制

2-3 不完全解構

  • 當等號左邊的變量只匹配一部分的等號右邊的數組,右邊的數組多余元素會被忽略

let [one, two] = [1, 2, 3]; console.log(one, two); // 1 2  let [a, [b], c] = [1, [2, 3], 4] console.log(a, b, c); // 1 2 4
登錄后復制

  • 當等號左邊的變量數量多于等號右邊的數組元素,解構賦值左邊多余的變量則為 undefined

let [str1, str2] = ['jsx']; console.log(str1, str2); // jsx undefined
登錄后復制

  • 擴展語法 ... 變量解構時匹配不到元素值時返回 [] 空數組

let [str3, ...str4] = ['jsx']; console.log(str3, str4); // jsx []
登錄后復制

  • 如果等號的右邊不是數組,也不是可迭代對象,那么解構賦值將會報錯

let [foo1] = 1; let [foo2] = false; let [foo3] = NaN; let [foo4] = undefined; let [foo5] = null; let [foo6] = {}; console.log(foo1, foo2, foo3, foo4, foo5, foo6); // is not iterable
登錄后復制

2-4 默認值

  • 數組解構時可以在表達式左邊的數組中為任意對象預設默認值

let [name1 = 'jsx', name2 = 'ljj'] = []; console.log(name1, name2); // jsx ljj
登錄后復制

  • ES6 內部使用嚴格相等運算符 === 判斷一個位置是否有值,當一個數組缺少的值時,元素嚴格等于undefined,默認值才會生效

let [num = 123] = [undefined]; console.log(num); // 123  // null !== undefined means let [num1 = 123] = [null]; // null嚴格相等undefined所有默認值無效 console.log(num1); // null
登錄后復制

  • 如果默認值是一個函數聲明,函數聲明是惰性求值的,只有在右邊沒有匹配值時才會執行

function func() {     return 123 } let [num2 = func()] = [undefined]; console.log(num2)
登錄后復制

  • 默認值可以引用解構賦值的其他變量,但該變量必須已經聲明

let [str1 = 'jsx', str2 = str1] = []; console.log(str1, str2); // jsx jsx // str4未聲明 let [str3 = str4, str4 = 'ljj'] = []; // Uncaught ReferenceError
登錄后復制

3. 對象解構

3-1 基本用法

  • 基本語法

let {var1, var2} = {var1:…, var2:…}
登錄后復制

  • 對象解構賦值與先聲明后獨立進行解構賦值

let { name, age } = { name: 'jsx', age: 22 }; console.log(name, age); // jsx 22  // 先聲明后獨立解構賦值 let a, b; // 賦值語句需要通過()包圍 因為{}是一個塊級而不是字面量 ({a, b} = {a: 1, b: 2}); console.log(a, b); // 1 2
登錄后復制

3-2 屬性變量同名

  • 對象的屬性沒有次序,左邊的變量必須與對象屬性同名,才能取到正確的值

let {name, age} = {name: 'jsx', age: 22}; console.log(name, age); // jsx 22
登錄后復制

  • 當變量沒有對應的同名對象屬性時,會導致1取不到值返回 undefined

// 如果解構失敗,變量的值等于undefined let {a, b} = {a: 'jsx', c: 'ljj'}; console.log(a, b); // jsx undefined
登錄后復制

3-3 屬性變量不同名

  • 當變量名與對象屬性名不一致時,可以使用冒號 : 來設置,將對象屬性值賦值給 : 冒號后的變量

let {user: name, age: num} = {user: 'jsx', age: 22} console.log(name, num); // jsx 22
登錄后復制

  • foo:baz 此時冒號前面 foo 則是匹配模式匹配對象屬性,baz 則是匹配屬性的值

let {foo:baz} = {name: 'jsx'}; console.log(foo); // ncaught ReferenceErro console.log(baz); // undefined
登錄后復制

  • 先找到同名屬性,然后再賦給對應的變量,真正被賦值的是后者,而不是前者

let {name: str, age: num1} = {user: 'jsx', age: 22}; console.log(str, num1); // undefined 22
登錄后復制

  • 數組對象嵌套解構賦值

let obj = { lesson: ['html', { class: 'css' }] } let { lesson: [x, { class: y }] } = obj; // console.log(x, y); // html css  let { lesson } = obj; console.log(lesson); //  ['html', {…}]  let obj1 = {}; let arr1 = [];  ({ foo: obj1.prop, bar: arr1[0] } = { foo: 123, bar: true });  console.log(obj1) // {prop:123} console.log(arr1) // [true]
登錄后復制

  • 對象的解構賦值可以取到對象繼承的屬性

let obj2 = {}; let obj3 = { user: 'ljj' }; Object.setPrototypeOf(obj2, obj3); let { user } = obj2; console.log(user); // ljj
登錄后復制

  • 可以使用擴展語法 ... 將對象剩余的屬性與值賦值給一個變量

let options = {     title: "Menu",     height: 200,     width: 100 };  // title = 名為 title 的屬性 // rest = 存有剩余屬性的對象 let { title, ...rest } = options;  // 現在 title="Menu", rest={height: 200, width: 100} console.log(rest.height);  // 200 console.log(rest.width);   // 100
登錄后復制

3-4 默認值

  • 對象的解構也可以指定默認值,默認值生效的條件是對象的屬性值嚴格等于undefined

let {name = 'jsx'} = {}; console.log(name); // jsx   let {name1 = 'jsx'} = {name1: 'ljj'}; // 默認值失效  console.log(name1); // ljj  // 當對象屬性值為undefined時有效 let {name2 = 'jsx'} = {name2: undefined}; console.log(name2); // jsx  let {x: y = 3} = {x: 5}; console.log(y); // 5  let {x1 = 3} = {x1: null}; console.log(x1); // null
登錄后復制

  • 當指定的對象屬性不存在時,直接在變量后添加默認值
  • 當指定的對象屬性存在,而屬性值不存在或者為 undefined 時,先匹配屬性再在變量值后添加一個等號 = 和相應的默認值即可

let {user: xm = 'jsx'} = {}; console.log(xm); // jsx
登錄后復制

4. 嵌套解構

如果一個對象或數組嵌套了其他的對象和數組,我們可以在等號左側使用更復雜的模式(pattern)來提取更深層的數據

// 數組嵌套 let [name, [name1, [name2]]] = ['jsx', ['ljj', ['ddc']]]; console.log(name, name1, name2); // jsx ljj ddc  // 對象解構 let obj = { 	title: '對象解構', 	info: { 		target: '對象', 		difficulty: { 			level: 1 		} 	} } let { 	title, 	info, 	info: { 		target, 		difficulty, 		difficulty: { 			level 		} 	} } = obj; console.log(title, info, target, difficulty, level); // 對象解構 // {target: '對象', difficulty: {…}} // 對象 // {level: 1} // 1  // 對象數組嵌套 let objArr = { 	message: '對象數組嵌套', 	lesson: ['html', 'css', 'js'], 	news: { 		main: '新消息' 	} } let { 	message, 	lesson, 	lesson: [item1, item2, item3], 	news, 	news: { 		main 	} } = objArr; console.log(message, lesson, item1, item2, item3, news, main) // 對象數組嵌套 //  ['html', 'css', 'js'] // html css js // {main: '新消息'} // 新消息
登錄后復制

es6解構支持字符串嗎

5. 函數參數解構

一個函數可以有很多參數,其中大部分的參數都是可選的

  • 把所有參數當作一個數組來傳遞,然后函數馬上把這個數組解構成多個變量

function arrFn([name, age]) {     console.log(name, age) } arrFn(['jsx', 22]); // jsx 22
登錄后復制

  • 把所有參數當作一個對象來傳遞,然后函數馬上把這個對象解構成多個變量

let obj = { 	title: "My menu", 	items: ["Item1", "Item2"] }  function objFn({ 	title, 	items: [item1, item2] }) { 	console.log(title); // My menu 	console.log(item1, item2); // Item1 Item2 } objFn(obj);
登錄后復制

  • 可以使用帶有嵌套對象和冒號映射的更加復雜的解構

// 語法 function({   incomingProperty: varName = defaultValue   ... })  let obj1 = { 	message: '嵌套帶冒號', 	info: { 		name: 'jsx', 		lesson: ['html', 'css'], 		grilfriend: { 			xm: 'ljj' 		} 	} }  function complexFn({ 	message, 	info: { 		name, 		lesson: [list1, list2], 		grilfriend: { 			xm 		} 	} }) { 	console.log(message); // 嵌套帶冒號 	console.log(list1, list2); // html css 	console.log(xm); // ljj } complexFn(obj1);
登錄后復制

  • 可以通過指定空對象 {} 為整個參數對象設置默認值

function nullFn({ 	info = 'jsx', 	width = 100, 	height = 200 } = {}) { 	console.log(info); // jsx 	console.log(width); // 100 	console.log(height); // 200 } nullFn();
登錄后復制

6. 圓括號問題

不可以使用圓括號的情況:

  • 變量聲明語句,不得使用圓括號

  • 函數參數也屬于變量聲明,因此不能帶有圓括號

  • 賦值語句的模式,將整個模式放在圓括號之中,導致報錯

// 聲明語句時不能使用圓括號包裹變量 let [(num)] = [1]; console.log(a); // Uncaught SyntaxError  let {(name: str)} = {name: 'jsx'}; console.log(str); // Uncaught SyntaxError  // 函數參數內也不可以 function fn([(a)]) {      console.log(a); } fn(1);    // 賦值語句內不可使用圓括號包裹 let a, b; ([a, b]) = [1, 2]; console.log(a, b) // Uncaught SyntaxError
登錄后復制

可以使用圓括號的情況:

  • 賦值語句的非模式部分,可以使用圓括號

let num; [(num)] = [123]; console.log(num); // 123  let str; ({name: str} = {name: 'jsx'}); console.log(str); // jsx
登錄后復制

7. 解構賦值使用場景

  • 交換變量的值

let name1 = 'jsx'; let name2 = 'ljj'; [name1, name2] = [name2, name1]; console.log(name1, name2); // ljj, jsx
登錄后復制

  • 從函數返回多個值

function returnFn() { 	return { 		name: 'jsx', 		age: 22 	} } let { 	name, 	age } = returnFn(); console.log(name, age); // jsx 22
登錄后復制

  • 函數參數的定義

 function argumentFn([list1, list2]) {  	console.log(list1); // jsx  	console.log(list2); // ljj  }  argumentFn(['jsx', 'ljj'])   function argumentFn1({obj}) {  	console.log(obj); // jsx  }  argumentFn1({obj: 'jsx'})
登錄后復制

  • 提取 JSON 數據

let jsonData = { 	id: 42, 	status: "OK", 	data: [867, 5309] }; let { 	id, 	status, 	data: number } = jsonData; console.log(id, status, number); // 42 'OK' (2) [867, 5309]
登錄后復制

  • 函數參數的默認值

function func({ title = '默認值' } = {}) {     console.log(title) } func(); // 默認值
登錄后復制

  • 遍歷 Map 結構

const map = new Map(); map.set('first', 'hello'); map.set('second', 'world');  for (let [key, value] of map) { 	console.log(key + " is " + value); 	// first is hello 	// second is world }
登錄后復制

  • .entries() 方法進行循環操作

let user = { 	name: "John", 	age: 30 }; for (let [key, value] of Object.entries(user)) { 	console.log(`${key}: ${value}`); 	// name: John 	// age: 30 }
登錄后復制

  • 輸入模塊的指定方法

<script type="module">     import {sayHi, sayHello} from './index.js';     sayHi(); // say hi     sayHello(); // say hello </script>
登錄后復制

// index.js export function sayHi() {     console.log('say hi') }  export function sayHello() {     console.log('say hello') }
登錄后復制

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合
蜜桃视频一区二区三区| 亚洲狼人精品一区二区三区| 亚洲二区在线| 日韩av资源网| 色婷婷久久久| 水蜜桃久久夜色精品一区的特点| 免费日韩成人| 乱人伦精品视频在线观看| 蜜桃久久久久| 男人天堂欧美日韩| 手机在线电影一区| 日韩国产欧美在线视频| 99久久99久久精品国产片果冰| 日韩精品一区二区三区中文在线| 在线一区视频观看| 国产人成精品一区二区三| 成人av二区| 精品理论电影在线| 色婷婷成人网| 影院欧美亚洲| 精品国产乱码久久久久久樱花| 蜜桃久久精品一区二区| 丝袜美腿诱惑一区二区三区| 国产精品一区二区精品| 视频一区免费在线观看| 久久久精品久久久久久96| 国产精品久久久久久久久久妞妞| 老色鬼久久亚洲一区二区| 午夜久久中文| 欧美aa在线视频| 色综合视频一区二区三区日韩 | 欧美日韩在线精品一区二区三区激情综合| 成人精品中文字幕| 麻豆国产一区| 亚洲精品第一| 亚洲欧美日韩视频二区| 久久国产电影| 日韩免费在线| 国产+成+人+亚洲欧洲在线| 国产欧美88| 视频一区欧美精品| 在线精品视频在线观看高清| av资源中文在线天堂| 国产日韩欧美三区| 亚洲精品乱码久久久久久蜜桃麻豆 | 久久高清免费| 在线看片国产福利你懂的| 国产免费av一区二区三区| 中文字幕日韩亚洲| 99riav国产精品| 欧美成人日韩| 亚洲一级高清| 在线一区视频观看| 日本在线高清| 成人污污视频| 精品国产美女a久久9999| 国产精品久久久久久久久久妞妞| 97久久超碰| 日韩一区二区三区在线看| 在线日韩成人| 亚洲一区二区日韩| 亚洲麻豆一区| 亚洲综合色婷婷在线观看| 蜜臀久久99精品久久久画质超高清| 中文欧美日韩| 麻豆9191精品国产| 免费成人av在线播放| 一区二区国产精品| 免费看黄色91| 亚洲精品91| 好吊一区二区三区| 在线亚洲精品| 最新国产精品| 视频精品一区| 欧美亚洲三级| 久久wwww| 风间由美中文字幕在线看视频国产欧美| 美女尤物国产一区| 国产在线观看91一区二区三区| a国产在线视频| 久久国产电影| 亚洲成人一区| 首页国产欧美日韩丝袜| 丝袜亚洲精品中文字幕一区| 亚洲综合不卡| 亚洲精品视频一二三区| 日韩高清一区| 国产私拍福利精品视频二区| 欧美韩一区二区| 国产一区二区三区成人欧美日韩在线观看| 国产一区二区久久久久| 成人福利av| 国户精品久久久久久久久久久不卡 | 国产精品99一区二区三| 美女av在线免费看| 欧美日韩国产免费观看视频| 老鸭窝亚洲一区二区三区| 亚洲麻豆一区| 美女视频一区在线观看| 日韩中文在线播放| 日韩一级精品| 欧美一级二级三级视频| 成人在线视频中文字幕| 日韩精品永久网址| 日韩视频久久| 91精品日本| 美女av在线免费看| 久久亚洲国产精品一区二区| 欧美日本精品| 国产传媒在线| 老司机精品久久| 嫩草伊人久久精品少妇av杨幂| 日韩网站中文字幕| 婷婷综合福利| yellow在线观看网址| 尹人成人综合网| 国产精品第一国产精品| 久久精品二区三区| 中文一区一区三区免费在线观| 国产精品伦一区二区| 久久国产精品成人免费观看的软件| 伊人久久一区| 国产成人精品三级高清久久91| 久久男女视频| 婷婷视频一区二区三区| 国语精品一区| 爽好久久久欧美精品| 麻豆精品在线观看| 好吊视频一区二区三区四区| 国产探花在线精品| 欧美精品一区二区三区精品| 国产精品调教视频| 免费成人网www| 国产精品白丝久久av网站| 国产一区观看| 国产丝袜一区| 亚洲欧美日韩精品一区二区| 精品一级视频| 蜜桃视频一区二区| 精品久久电影| 中文视频一区| 久久蜜桃资源一区二区老牛| 欧美一区成人| 好看的亚洲午夜视频在线| 久久永久免费| 日韩精品一二区| 亚洲精品**中文毛片| 亚洲精品在线二区| 91精品综合| 欧美精品aa| 亚洲天堂日韩在线| 日韩不卡在线| 国产精成人品2018| 久久大逼视频| av在线资源| 欧美一区精品| 午夜一区在线| 日韩精品诱惑一区?区三区| 国产亚洲精品精品国产亚洲综合| 国产精品97| 日韩av二区| 国产欧美欧美| 午夜性色一区二区三区免费视频| 亚洲网站视频| 激情综合婷婷| 日本强好片久久久久久aaa| 午夜久久免费观看| av综合电影网站| 国产激情久久| 中文字幕一区二区av| 欧美理论视频| 精精国产xxxx视频在线播放| 欧美极品一区二区三区| 日韩三区四区| 香蕉久久夜色精品国产| 久久久人人人| av资源亚洲| 欧美激情三区| 欧美日韩在线精品一区二区三区激情综合 | 免费在线观看日韩欧美| 日韩精品诱惑一区?区三区| 国产精品巨作av| 日韩精品免费一区二区夜夜嗨| 亚洲少妇一区| 自拍日韩欧美| 女同性一区二区三区人了人一| 欧美羞羞视频| 日韩综合在线| 国产一区二区三区久久 | 欧美日韩精品免费观看视欧美高清免费大片 | 久久免费黄色| 日韩欧美国产精品综合嫩v| 精品国产亚洲一区二区三区大结局| 日本视频一区二区| 日韩精品欧美成人高清一区二区| 亚洲欧美日本日韩| 国产精品av久久久久久麻豆网| 999久久久91| 青青久久av| 日韩啪啪电影网|