何为不用中间变量

```var a = 1;
var b = 2;
var temp = b;
b = a;
a = temp;
```

基于四则运算

```var a = 1;
var b = 2;
a = a + b
b = a - b
a = a - b
```

```var a = 1;
var b = 2;
a = a - b
b = a + b
a = b - a
console.log(a, b)
```

```// 注意：a、b不能有一个是0
var a = 1;
var b = 2;
a = a / b
b = a * b
a = b / a
console.log(a, b)
```

```// 注意：a、b不能有一个是0
var a = 1;
var b = 2;
a = a * b
b = a / b
a = a / b
console.log(a, b)
```

基于位运算

```var a = 1;
var b = 2;
a ^= b
b ^= a
a ^= b
console.log(a, b)
```

```a: 0011  b: 1001
a = a ^ b: 0001
b ^= a => a ^ b ^ b: 0001 ^ 1001 => 0011(等于旧的a)
a ^= b => 0011 ^ 0001 => 1001(等于旧的b)
```

```var a = 1;
var b = 2;
a = ~a + b;
b = ~(a - b);
a = b - ~a;
console.log(a, b)
```

要求放低一些(娱乐)

```var a = 1;
var b = 2;
[a, b] = [b, a];
console.log(a, b)

// babel编译的结果是
var _a;
var a = 1;
var b = 2;
_a = [b, a], a = _a[0], b = _a[1];

// 或者先赋值给a
var a = 1;
var b = 2;
a = [a, b]
b = a[0]
a = a[1]
```

```var a = 1;
var b = 2;
var { a: b, b: a } = { a, b }
// 或者
var { a, b } = { a: b, b: a }

console.log(a, b)

// babel结果
var a = 1;
var b = 2;
var _a = { a: a, b: b }, b = _a.a, a = _a.b;

// 还是可以先赋值给a
var a = 1;
var b = 2;
a = { a, b }
b = a.a
a = a.b
console.log(a, b)
```

```// 刚刚说的 & | 不行，现在也算了
var [a, b] = [a & b | b, a & b | a]

var [a, b] = [{ [a]: b, [b]: a }[a], { [a]: b, [b]: a }[b]]

var [a, b] = [a << b >> a, a << b >> b]
```

其他api一起上

```var a = 1;
var b = 2;
a = `\${b}-\${a}`;
b = +a.split('-')[1];
a = parseFloat(a);
console.log(a, b)

```var a = 1;
var b = 2;
a = `\${b}-\${a}`.match(/(\d+).*?(\d+)/);
b = +a[2]
a = +a[1]
console.log(a, b)

```var a = 1;
var b = 2;
a = `\${'b'.repeat(b)}\${'a'.repeat(a)}`;
b = /a+/.exec(a)[0].length
a = /b+/.exec(a)[0].length
console.log(a, b)

基于高级数学运算

```// a、b大于0
var a = 1;
var b = 2;
a = b ** a;
b = Math.log2(a) / Math.log2(b)
a = a ** (1 / b) // 最后一步就是开方: a的b次开根号
console.log(a, b)
```

```// 局限性很大，因为弧度超过两个PI就是一个周期导致不准确
// 而且sin的单调性区间拐点是k * PI / 2，可能结果存在预期之外
// 如果a+b>Math.PI / 2，需要分很多情况讨论，这里简单起见取小一点
// 最终结果并不是彻底准确，但我们可以在误差为EPSILON范围内可视为相等
var a = Math.PI / 4;
var b = Math.PI / 6;

a = Math.sin(a + b)
b = Math.asin(a) - b;
a = Math.asin(a) - b;
console.log(Math.abs(Math.PI / 6 - a) < Number.EPSILON)
console.log(Math.abs(Math.PI / 4 - b) < Number.EPSILON)
```

```var a = 2;
var b = 3;
// 双曲正弦
a = Math.sinh(a + b)
b = Math.asinh(a) - b;
a = Math.asinh(a) - b;
console.log(a, b)

// 双曲余弦
a = Math.cosh(a + b)
b = Math.acosh(a) - b;
a = Math.acosh(a) - b;
console.log(a, b)
```

ln和e

```var a = 1;
var b = 2;
a = Math.E ** (a + b);
// js的ln就是Math.log
b = Math.log(a) - b;
a = Math.log(a) - b;
console.log(a, b);
```
```var a = 1;
var b = 2;
a = Math.E ** (a - b);
b = Math.log(a) + b;
a = b - Math.log(a);
console.log(a, b);
```

最后

0 条评论

• 再次研究一道网红typescript面试题

这个对象上有各种各样的属性，string、number、function等，其中他的function类型的属性只可能有两种类型签名:

• 玩转JS的类型转换黑科技0.前言1.奇葩例子2.从[]==![]开始3.从已有的得到想不到的4.关于(a==1 && a==2 && a==3)4.2 ===

js身为一种弱类型的语言，不用像c语言那样要定义int、float、double、string等等数据类型，因为允许变量类型的隐式转换和允许强制类型转换。我们在...

• node框架express的研究0.前言1. 从入口开始1.1入口1.2 proto1.2.1 app.init方法1.2.2 app.handle方法1.2.3 每一个method的处理1.2.4

在node中，express可以说是node中的jQuery了，简单粗暴，容易上手，用过即会，那么我们来试一下怎么实现。下面我们基于4.16.2版本进行研究

• JavaScript

JavaScript是前端的一门编程语言简称JS，需要说明的是JS和java没有关系，js也叫ecmascript，当前使用较多的版本是5.1版本。

• Phantomjs+Nodejs+Mysql数据抓取（1.数据抓取）

概要： 这篇博文主要讲一下如何使用Phantomjs进行数据抓取，这里面抓的网站是太平洋电脑网估价的内容。主要是对电脑笔记本以及他们的属性进行抓取，然后在使...

• node+express使用multiparty实现文件上传

文件上传在一个项目中是相对于比较基础的功能，今天分享一下自己是如何在nodejs中使用中间件multiparty实现文件上传的。nodejs环境的搭建就不赘述了...

• Phantomjs+Nodejs+Mysql数据抓取（2.抓取图片）

概要 这篇博客是在上一篇博客Phantomjs+Nodejs+Mysql数据抓取（1.抓取数据） http://blog.csdn.net/jokerko...

• 前端之JavaScript内容

一、JavaScript概述 1、JavaScript的历史 1992年Nombas开发出C-minus-minus(C--)的嵌入式脚本语言（最初绑定在CEn...

• JavaScript函数与对象

函数 函数的定义 JavaScript中的函数和Python中的非常类似，只是定义方式有点区别。 // 普通函数定义 function f1() { ...