交换两个数的几种方法对比

(1) 需要第三方变量,开发推荐使用这种

  var m = 10;
  var n = 20;

  var temp = m;
  m = n;
  n = temp;
  console.log(m, n) // 20, 10

(2) 不需要第三方变量, 这种有弊端, 有可能会超出数值取值范围,特别是在强类型语言中。

  var m = 100;
  var n = 200;

  m = m + n;
  n = m - n;
  m = m - n;
  console.log(m, n) // 200, 100

(3) 不需要第三方变量,使用位运算符 ^ 按位异或

 var m = 100;
 var n = 200;

 m = m ^ n;
 n = m ^ n;
 m = m ^ n;
  console.log(m, n)

一个数据对另一个数据位异或两次,该数本身不变,而且与顺序无关,即支持交换律:

  var a = 10
  var b = 5
  console.log(a ^ a ^ b) // 5
  console.log(a ^ b ^ a) // 5
  console.log(b ^ a ^ a) // 5

// 扩展:一个数据对另一个数据位异或偶数次(>=2),该数本身不变
console.log(b ^ a ^ a ^ a ^ a) // 5

(4) JS数组的解构赋值

var a = 10;
var b = 5;

[a, b] = [b, a]

// 解构赋值是一种语法糖,他会被编译为如下代码:
var _a;
var a = 10;
var b = 5;

_a = [b, a], a = _a[0], b = _a[1];
posted on 2020-07-13 17:17  manbax  阅读(205)  评论(0编辑  收藏  举报