ES6中的Javascript解構的實現(xiàn)
ES6中的解構特性能讓我們從對象(Object)或者是數(shù)組(Array)中取值的時候更方便,同時寫出來的代碼在可讀性方面也更強。之前接觸過python語言的小伙伴應該對這個不會陌生,這個特性早已在python中實現(xiàn)了。在python中,我們可以通過下面的代碼來取值
lst = [3, 5] first, second = lst print(first, second)
first和second兩個變量,分別被賦值上了數(shù)組中的3和5,是不是很簡單很清晰?
那在有這個特性之前,我們一般怎么從對象或數(shù)組中取值呢?來看看下面的代碼:
let list = [3, 5] let first = list[0] let second = list[1]
在這種方式中,你必須得手動指定個數(shù)組下標,才能把對應的值賦給你指定的變量。那如果用ES6的解構特性,代碼將會變得更簡潔,可讀性也更高:
let [first, second] = list;
對象的解構
基礎對象解構
首先我們來看看ES6中基本的對象解構應該怎么寫:
const family = {
father: ''
mother: ''
}
const { father, mother } = family;
我們從family對象中解構出來了它的兩個屬性father和mother,并賦值給了另外定義的father和mother對象。此后,我們就能直接通過father和mother變量獲取到family中相應key的值了。這個例子是解構對象最簡單的一種應用,下面來看看更有趣的。
解構沒有聲明過的對象
在上面的例子中,我們先聲明的family對象,然后再通過解構語法獲取其中的值。那如果不聲明是否可以呢:
const { father, mother } = {father: '',mother: ''}
其實也是可以的,在一些情況下,我們是沒有必要特意去聲明一個對象或是把對象賦值給一個變量,然后去才解構的。很多時候我們可以直接解構未聲明的對象。
解構對象并重命名變量
我們也可以將對象中的屬性解構之后,并對其重新命名,比如:
const { father: f, mother:m } = {father: '1',mother: '2'}
console.log(f); // '1'
在上面的代碼中,對象中的father被解構出來后,重新賦值給了變量f,與前一個例子相比,相當于重名了了father變量為f。接下來就可以用f繼續(xù)進行操作。
解構默認值
想象一下一種場景,后臺返回了一個family對象,原本family對象約定了有三個屬性,分別為father,mother,child。你拿到返回的數(shù)據(jù)并解構這三個屬性:
const { father, mother, child } = {father: '1',mother: '2', child: '3'}
這看上去沒有什么問題,但現(xiàn)實情況總是不如人意。后臺由于代碼有bug,返回的family對象中,只包含了mother和child,漏了father。這時經(jīng)過上面代碼的解構后, father就會變成undefined:
const { father, mother, child } = {father: '1',mother: '2'}
console.log(child) //undefined
很多時候我們會想要在后臺漏了某個屬性的時候,也能解構出一個默認值。那其實可以這么寫:
const { father = '1', mother = '2', child = '3'} = {father: '1',mother: '2'}
console.log(child) //'3'
結(jié)合前一個例子,你既可以改變量名又能賦值默認值:
const { father: f = '1', mother: m = '2', child: c = '3'} = {father: '1',mother: '2'}
在函數(shù)參數(shù)中解構
const family = {
father: ''
mother: ''
}
function log({father}){
console.log(father)
}
log(family)
在函數(shù)的參數(shù)中,運用解構的方式,可以直接獲取出入對象的屬性值,不需要像以往使用family.father傳入。
解構嵌套對象
在上面的例子中,family的屬性都只有1層,如果family的某些屬性的值也是一個對象或數(shù)組,那怎么將這些嵌套對象的屬性值解構出來呢?來看看下面的代碼:
const family = {
father: 'mike'
mother: [{
name: 'mary'
}]
}
const { father, mother: [{
name:motherName
}]} = family;
console.log(father); //'mike'
console.log(motherName) //'mary'
數(shù)組的解構
數(shù)組的解構方式其實跟對象的非常相似,在文章開頭也略有提及,不過我們還是來看一下數(shù)組解構的一些典型場景。
基礎對象解構
const car = ['AUDI', 'BMW']; const [audi, bmw] = car; console.log(audi); // "AUDI" console.log(bmw); // "BMW"
只要對應數(shù)組的位置,就能正確的解構出相應的值。
解構默認值
同對象解構的默認值場景,很多時候我們也需要在解構數(shù)組的時候加上默認值以滿足業(yè)務需要。
const car = ['AUDI', 'BMW']; const [audi, bmw, benz = 'BENZ'] = car; console.log(benz); // "BENZ"
在解構中交換變量
假設我們有如下兩個變量:
let car1 = 'bmw'; let car2 = 'audi'
如果我們想交換這兩個變量,以往的做法是:
let temp = car1; car1 = car2; car2 = temp;
需要借助一個中間變量來實現(xiàn)。那利用數(shù)組的解構,就簡單很多:
let car1 = 'bmw'; let car2 = 'audi' [car2, car1] = [car1, car2] console.log(car1); // 'audi' console.log(car2); // 'bmw'
如果是想在一個數(shù)組內(nèi)部完成元素位置的交換,比如吧[1,2,3]交換成[1,3,2],那么可以這么實現(xiàn):
const arr = [1,2,3]; [arr[2], arr[1]] = [arr[1], arr[2]]; console.log(arr); // [1,3,2]
從函數(shù)的返回解構數(shù)組
很多函數(shù)會返回數(shù)組類型的結(jié)果,通過數(shù)組解構可以直接拿值:
functin fun(){
return [1,2,3]
}
let a, b, c;
[a, b, c] = fun();
當然,如果我們只想要函數(shù)返回數(shù)組中的其中一些值,那也可以把他們忽略掉
functin fun(){
return [1,2,3]
}
let a, c;
[a, , c] = fun();
可以看到,ES6的解構特性在很多場景下是非常有用的。期望大家能更多的將解構運用到項目中,讓代碼變得更加簡單,清晰易懂。
到此這篇關于ES6中的Javascript解構的實現(xiàn)的文章就介紹到這了,更多相關ES6 解構內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Bootstrap模態(tài)框水平垂直居中與增加拖拽功能
最近開發(fā)一個CMS系統(tǒng)使用上了Bootstrap,在開發(fā)一個添加某些選項時,打算彈出一個模態(tài)框,但是發(fā)現(xiàn),模態(tài)框不會垂直居中到屏幕上,而是在屏幕上方,通過查閱資料才解決此問題,下面小編給大家分享解決思路2016-11-11
JavaScript實現(xiàn)復制粘貼剪切功能三種方法
這篇文章主要給大家介紹了關于JavaScript實現(xiàn)復制粘貼剪切功能的相關資料,在實際案例的操作過程中,不少人都會遇到這樣的開發(fā)需求,文中通過代碼將三種方法介紹的非常詳細,需要的朋友可以參考下2024-01-01
Vue之vue-tree-color組件實現(xiàn)組織架構圖案例詳解
這篇文章主要介紹了Vue之vue-tree-color組件實現(xiàn)組織架構圖案例詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下2021-09-09
javascript 動態(tài)加載 css 方法總結(jié)
有時候我們在設計網(wǎng)頁的時候想動態(tài)的加載css文件,并不是將css文件寫死在頁面中,這時就可以使用下面方法.2009-07-07

