es6解构赋值 [a,b] = [b,a]的几个问题

更新日期: 2021-08-10阅读: 1.6k标签: 解构

相比于传统方法需要一个额外变量来进行值交换,使用解构进行值交换十分方便。但是我想到几个问题:

1、解构赋值有没有节省空间呢?

// 传统

let c = b;

b = a;

a = c;

// 解构

[a, b] = [b, a];

首先思考如下操作:

let a = 1, b = 2;

[a, b] = [b=a, a=3];//1 3

可以分析出解构赋值的过程应当为

  1. 以从左到右的顺序计算右侧数组的值,得到数组
  2. 以从左到右的顺序,将右侧数组的值赋给左侧

可以看到解构复制的过程中会有一个包含两个元素的临时数组,并没有比传统方法节省空间,甚至空间会比传统方法更多一个int值大小的空间。

2、解构赋值有没有更快呢?

话不多讲,直接上代码

const times = 3000000000;

let a = 1, b = 2;

let time1 = new Date().getTime();

while (i++ < times) {

  [a, b] = [b, a];

  let c = b;

  b = a;

  a = c;

  let d = b;

  b = a;

  a = d;

}

console.log(new Date().getTime() - time1); // 4300左右

time1 = new Date().getTime();

while (i-- >= 0) {

  [a, b] = [b, a];

  [a, b] = [b, a];

  let c = b;

  b = a;

  a = c;

}

console.log(new Date().getTime() - time1); // 6400左右

可以看到,解构交换值的速度更慢。按照常理猜测一下,可能是解构赋值需要申请临时数组,然后遍历数组对等号左侧的变量进行赋值,在此期间还需要检测数组元素是否为undefined,这一过程较为费时。

3、一个有趣(挠头)的发现

while (i++ < times) {

  [a, b] = [b, a];

  [a, b] = [b, a];

  let c = b;

  b = a;

  a = c;

}

while (i++ < times) {

  [a, b] = [b, a];

  [a, b] = [b, a];

}

肉眼观察,上面的循环内操作更多,应当耗时更多,结果却是在公司mbp上运行,前者耗时显著更少,在个人windows电脑上运行,二者耗时几乎一致。经过分析只知道可能与JIT有关,却不知道具体原因。希望有大佬可以为萌新解惑呀~

欢迎关注「 字节前端 ByteFE 」

作者:字节前端
链接:https://juejin.cn/post/6994634734634696734
来源:掘金

链接: https://fly63.com/article/detial/10629

ES6解构 - 解构函数参数

解构可以用在函数传递参数的过程中。我先先来看一下没有用到解构参数的例子,之后我们把它改造成解构参数。在这个例子里面我们使用解构参数改写了函数声明

5个JS解构有趣的用途

交换变量:通常交换两个变量的方法需要一个额外的临时变量,来看看例子;访问数组中元素有种场景,咱们可能有一个为空的项数组。并且希望访问数组的第一个、第二个或第n个项

ES6+ 中对象解构小技巧

解构的同时赋予初始值(使用 =),2.使用的变量名与解构目标的key不一致或要使用多个变量(使用 : ),解构中的 rest(变量由多变少) 与spread(变量由少变多)

Js变量的解构赋值

解构:从数组和对象中提取值,对变量进行赋值。数组的解构赋值1.数组的元素是按次序排列的,变量的取值由它的位置决定;对象的解构赋值1.对象的属性没有次序,变量必须与属性同名,才能取到正确的值。

ES6 解构 destructuring

解构的作用:简化书写长度,提升开发效率。在开发中我们常用到使用ajax请求数据,并且把数据渲染到页面上。可能这个数据返回的对象或数组。

ES6 中变量的解构赋值

解构: ES6 中允许按照一定的模式从数组和对象中提取值,然后对变量进行赋值,这被称为解构(Destructuring).本质上,这种写法属于“模式匹配”,只要等号两边的模式相同,左边的变量就会被赋予相应的值。

ES6变量的解构赋值

ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构。它在语法上比ES5所提供的更加简洁、紧凑、清晰。它不仅能减少你的代码量,还能从根本上改变你的编码方式。

5个实用JS解构用法

temp是一个临时变量,它先保存a的值。然后把b的值赋值给a,接着将temp值赋给 b。如果使用解构的方式会更简单,不需要什么鬼的 temp 变量。

ES6变量的解构赋值、字符串的新增方法

解构可以用于数组,还可以用于对象。对象的解构赋值,可以很方便地将现有对象的方法,赋值到某个变量。

聊聊es6中的解构

es6新增了一种从数组或者对象中获取指定元素的方式,这种方式就是我们今天要说的解构。在有解构之前呢,我们获取数组中的指定元素通常是根据索引去做的:

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!