解构可以用在函数传递参数的过程中。我先先来看一下没有用到解构参数的例子,之后我们把它改造成解构参数。
一:解构参数的使用场景
1: 没有用到解构参数
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});
我们有个函数,它的第三个参数是一个对象类型;但是只是查看函数的声明部分,我们无法得知这一点,这就会给使用者带来不便:使用者无法确定第三个参数是一个对象类型,无法确定这个对象里面需要哪些属性。以上的问题我们可以通过使用解构参数来得到解决:
2: 改造成了解构参数
setCookie('type', 'js',
{secure: true, path: '/example', domain: 'test', expires: 60});
function setCookie(name, value, {secure, path, domain, expires}) {
console.log(expires); // 60
//其他代码
}
在这个例子里面我们使用解构参数改写了函数声明,这样使用者能明确知道第三个参数是一个对象以及对象里需要的属性。
二:解构参数必须传参
解构参数与一般的参数不同点在于,它是一个必须要传值的参数,如果不传,则会引发程序报错:
function setCookie(name, value, {secure, path, domain, expires}) {
console.log(expires);
//其他代码
}
setCookie('type', 'js'); // Uncaught TypeError: Cannot destructure property `secure` of 'undefined' or 'null'.
原因是为什么呢?是因为解构参数存在的函数,当我们在调用setCookie()的时候,函数内部其实是这样的:
function setCookie(name, value, options) {
let {secure, path, domain, expires} = options; //这是引擎背后做的
console.log(expires);
//其他代码
}
用于结果的对象如果是null或者undefined,则程序会报错,所以当我们不给解构参数传值的时候,会引发了程序报错。
为了解决以上问题,我们需要在定义函数的时候,给解构参数提供默认值:
function setCookie(name, value, {secure, path, domain, expires} = {}) {}
setCookie('id', 'mike'); //有了默认值,便不会报错
三:给解构参数属性设置默认值
上面的例子,我们通过{secure, path, domain, expires} = {}给整个解构参数设置了默认值。我们也可以给参数里面的每个属性设置默认值:
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});
给解构参数的属性设置默认值和一般对象的解构设置默认值是一样的,也是在用等号=给属性赋值。
这里特别要注意的是,如果只是单纯地给解构参数的属性设置默认值,而不给整个解构参数设置默认值,依然不能解决类似于setCookie('id', 'mike')这样不传参所引发的代码报错问题,所以不要忘了给整个解构参数设置默认值(也就是这个例子里面的
= defaultOptions)。
以上,就是解构函数参数的内容。
交换变量:通常交换两个变量的方法需要一个额外的临时变量,来看看例子;访问数组中元素有种场景,咱们可能有一个为空的项数组。并且希望访问数组的第一个、第二个或第n个项
解构的同时赋予初始值(使用 =),2.使用的变量名与解构目标的key不一致或要使用多个变量(使用 : ),解构中的 rest(变量由多变少) 与spread(变量由少变多)
解构:从数组和对象中提取值,对变量进行赋值。数组的解构赋值1.数组的元素是按次序排列的,变量的取值由它的位置决定;对象的解构赋值1.对象的属性没有次序,变量必须与属性同名,才能取到正确的值。
解构的作用:简化书写长度,提升开发效率。在开发中我们常用到使用ajax请求数据,并且把数据渲染到页面上。可能这个数据返回的对象或数组。
解构: ES6 中允许按照一定的模式从数组和对象中提取值,然后对变量进行赋值,这被称为解构(Destructuring).本质上,这种写法属于“模式匹配”,只要等号两边的模式相同,左边的变量就会被赋予相应的值。
ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构。它在语法上比ES5所提供的更加简洁、紧凑、清晰。它不仅能减少你的代码量,还能从根本上改变你的编码方式。
temp是一个临时变量,它先保存a的值。然后把b的值赋值给a,接着将temp值赋给 b。如果使用解构的方式会更简单,不需要什么鬼的 temp 变量。
解构可以用于数组,还可以用于对象。对象的解构赋值,可以很方便地将现有对象的方法,赋值到某个变量。
es6新增了一种从数组或者对象中获取指定元素的方式,这种方式就是我们今天要说的解构。在有解构之前呢,我们获取数组中的指定元素通常是根据索引去做的:
相比于传统方法需要一个额外变量来进行值交换,使用解构进行值交换十分方便。但是我想到几个问题:解构赋值有没有节省空间呢?
内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!