摘要:解構(gòu)可以用在函數(shù)傳遞參數(shù)的過(guò)程中。以上的問(wèn)題我們可以通過(guò)使用解構(gòu)參數(shù)來(lái)得到解決改造成了解構(gòu)參數(shù)其他代碼在這個(gè)例子里面我們使用解構(gòu)參數(shù)改寫(xiě)了函數(shù)聲明,這樣使用者能明確知道第三個(gè)參數(shù)是一個(gè)對(duì)象以及對(duì)象里需要的屬性。
解構(gòu)可以用在函數(shù)傳遞參數(shù)的過(guò)程中。我先先來(lái)看一下沒(méi)有用到解構(gòu)參數(shù)的例子,之后我們把它改造成解構(gòu)參數(shù)。
一:解構(gòu)參數(shù)的使用場(chǎng)景
1: 沒(méi)有用到解構(gòu)參數(shù)
function setCookie(name, value, options) { options = options || {}; let secure = options.secure, path = options.path, domain = options.domain, expires = options.expires; //其他代碼 } setCookie("type", "js", {secure: true, path: "/example", domain: "test", expires: 60});
我們有個(gè)函數(shù),它的第三個(gè)參數(shù)是一個(gè)對(duì)象類型;但是只是查看函數(shù)的聲明部分,我們無(wú)法得知這一點(diǎn),這就會(huì)給使用者帶來(lái)不便:使用者無(wú)法確定第三個(gè)參數(shù)是一個(gè)對(duì)象類型,無(wú)法確定這個(gè)對(duì)象里面需要哪些屬性。以上的問(wèn)題我們可以通過(guò)使用解構(gòu)參數(shù)來(lái)得到解決:
2: 改造成了解構(gòu)參數(shù)
setCookie("type", "js", {secure: true, path: "/example", domain: "test", expires: 60}); function setCookie(name, value, {secure, path, domain, expires}) { console.log(expires); // 60 //其他代碼 }
在這個(gè)例子里面我們使用解構(gòu)參數(shù)改寫(xiě)了函數(shù)聲明,這樣使用者能明確知道第三個(gè)參數(shù)是一個(gè)對(duì)象以及對(duì)象里需要的屬性。
二:解構(gòu)參數(shù)必須傳參
解構(gòu)參數(shù)與一般的參數(shù)不同點(diǎn)在于,它是一個(gè)必須要傳值的參數(shù),如果不傳,則會(huì)引發(fā)程序報(bào)錯(cuò):
function setCookie(name, value, {secure, path, domain, expires}) { console.log(expires); //其他代碼 } setCookie("type", "js"); // Uncaught TypeError: Cannot destructure property `secure` of "undefined" or "null".
原因是為什么呢?是因?yàn)榻鈽?gòu)參數(shù)存在的函數(shù),當(dāng)我們?cè)谡{(diào)用setCookie()的時(shí)候,函數(shù)內(nèi)部其實(shí)是這樣的:
function setCookie(name, value, options) { let {secure, path, domain, expires} = options; //這是引擎背后做的 console.log(expires); //其他代碼 }
用于結(jié)果的對(duì)象如果是null或者undefined,則程序會(huì)報(bào)錯(cuò),所以當(dāng)我們不給解構(gòu)參數(shù)傳值的時(shí)候,會(huì)引發(fā)了程序報(bào)錯(cuò)。
為了解決以上問(wèn)題,我們需要在定義函數(shù)的時(shí)候,給解構(gòu)參數(shù)提供默認(rèn)值:
function setCookie(name, value, {secure, path, domain, expires} = {}) {} setCookie("id", "mike"); //有了默認(rèn)值,便不會(huì)報(bào)錯(cuò)
三:給解構(gòu)參數(shù)屬性設(shè)置默認(rèn)值
上面的例子,我們通過(guò){secure, path, domain, expires} = {}給整個(gè)解構(gòu)參數(shù)設(shè)置了默認(rèn)值。我們也可以給參數(shù)里面的每個(gè)屬性設(shè)置默認(rèn)值:
let defaultOptions = { secure: true, path: "/example", domain: "test", expires: 60 }; function setCookie(name, value, { secure = defaultOptions.secure, path = defaultOptions.path, domain = defaultOptions.domain, expires = defaultOptions.expires } = defaultOptions) { console.log(secure); //true console.log(path); //example console.log(domain);//test console.log(expires);//30 } setCookie("id", "mike", {path: "/example", domain: "test", expires: 30});
給解構(gòu)參數(shù)的屬性設(shè)置默認(rèn)值和一般對(duì)象的解構(gòu)設(shè)置默認(rèn)值是一樣的,也是在用等號(hào)=給屬性賦值。
這里特別要注意的是,如果只是單純地給解構(gòu)參數(shù)的屬性設(shè)置默認(rèn)值,而不給整個(gè)解構(gòu)參數(shù)設(shè)置默認(rèn)值,依然不能解決類似于setCookie("id", "mike")這樣不傳參所引發(fā)的代碼報(bào)錯(cuò)問(wèn)題,所以不要忘了給整個(gè)解構(gòu)參數(shù)設(shè)置默認(rèn)值(也就是這個(gè)例子里面的
= defaultOptions)。
以上,就是解構(gòu)函數(shù)參數(shù)的內(nèi)容。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/106250.html
摘要:另外對(duì)于已經(jīng)聲明的變量進(jìn)行解構(gòu)賦值時(shí),要非常小心。因此在行首加,將其強(qiáng)制轉(zhuǎn)化為表達(dá)式執(zhí)行。由于和無(wú)法轉(zhuǎn)為對(duì)象,所以對(duì)它們進(jìn)行解構(gòu)賦值,都會(huì)報(bào)錯(cuò)。 let和const let和const是es6新增的兩個(gè)變量聲明關(guān)鍵字,與var的不同點(diǎn)在于: (1)let和const都是塊級(jí)作用域,在{}內(nèi)有效,這點(diǎn)在for循環(huán)中非常有用,只在循環(huán)體內(nèi)有效。var為函數(shù)作用域。 (2)使用let和con...
摘要:比如上面展示的情況都是可以聯(lián)合使用的比如對(duì)象的解構(gòu)賦值對(duì)象的解構(gòu)賦值是基于屬性的。當(dāng)給已存在的變量解構(gòu)賦值時(shí),注意加這是由于如果不加會(huì)把左邊看成一個(gè)代碼塊,會(huì)報(bào)錯(cuò)。注意事項(xiàng)數(shù)組的解構(gòu)賦值中,使用的變量必須放在最后。 解構(gòu)賦值 解構(gòu)賦值是一個(gè)聽(tīng)起來(lái)比較高大上的特性,但按我的理解,它就是一種語(yǔ)法糖。它并沒(méi)有賦予js更強(qiáng)大的能力,只是讓賦值操作更加的靈活,效率。 在es6之前,賦值操作需要=...
摘要:的解構(gòu)特性,可以簡(jiǎn)化這項(xiàng)工作。必須傳值的解構(gòu)參數(shù)如果調(diào)用函數(shù)時(shí)不提供被解構(gòu)的參數(shù)會(huì)導(dǎo)致程序拋出錯(cuò)誤程序報(bào)錯(cuò)缺失的第三個(gè)參數(shù),其值為。 在編碼過(guò)程中,我們經(jīng)常定義許多對(duì)象和數(shù)組,然后有組織地從中提取相關(guān)的信息片段。ES6的解構(gòu)特性,可以簡(jiǎn)化這項(xiàng)工作。解構(gòu)是一種打破數(shù)據(jù)結(jié)構(gòu),將其拆分為更小部分的過(guò)程。 未使用解構(gòu)的做法 let options = { repeat: true, ...
摘要:前言前言該篇筆記是第二篇變量的解構(gòu)賦值。這一章原文鏈接變量的解構(gòu)賦值解構(gòu)賦值解構(gòu)賦值允許按照一定模式,從數(shù)組和對(duì)象中提取值,對(duì)變量進(jìn)行賦值,這被稱為解構(gòu)。對(duì)象的解構(gòu)賦值是根據(jù)對(duì)象值進(jìn)行匹配。前言該篇筆記是第二篇 變量的解構(gòu)賦值。這一章原文鏈接: 變量的解構(gòu)賦值解構(gòu)賦值ES6 允許按照一定模式,從數(shù)組和對(duì)象中提取值,對(duì)變量進(jìn)行賦值,這被稱為解構(gòu)(Destructuring)。解構(gòu)賦值是對(duì)賦值運(yùn)...
摘要:前言該篇筆記是第二篇變量的解構(gòu)賦值。這一章原文鏈接變量的解構(gòu)賦值解構(gòu)賦值允許按照一定模式,從數(shù)組和對(duì)象中提取值,對(duì)變量進(jìn)行賦值,這被稱為解構(gòu)。對(duì)象的解構(gòu)賦值是根據(jù)對(duì)象值進(jìn)行匹配。 前言該篇筆記是第二篇 變量的解構(gòu)賦值。 這一章原文鏈接: 變量的解構(gòu)賦值解構(gòu)賦值ES6 允許按照一定模式,從數(shù)組和對(duì)象中提取值,對(duì)...
閱讀 2199·2021-11-18 10:02
閱讀 3302·2021-11-11 16:55
閱讀 2706·2021-09-14 18:02
閱讀 2442·2021-09-04 16:41
閱讀 2076·2021-09-04 16:40
閱讀 1200·2019-08-30 15:56
閱讀 2222·2019-08-30 15:54
閱讀 3173·2019-08-30 14:15