不使用三元运算符和 if ,如何优雅地切换变量的值?

RT,维护一个老项目,经常看到这种垃圾代码,有没有比三元运算更优雅的实现呢

// 比如说变量a有1和2两个值,当它初始为1则赋值2,初始为2则赋值1

let a = 1

// 垃圾1

if (a == 1) {

a = 2

} else {

a = 1

}

// 优雅1

a = a == 1 ? 2 : 1

回答

逻辑上 写个函数,用函数调用就清晰明了

一味追求 精简 和 技巧 只能让代码变得难以看懂和维护。

容易维护的代码 才是真的 好代码

所谓技巧高超,最后都变成被人骂的 祖传代码

针对题目

a = a - 1 || 2

具体问题具体应对

a = a % 2 + 1

或者位运算符(当然不熟悉的人可能看不明白)

a ^= 3

不使用三元运算符和 if ,如何优雅地切换变量的值?

没看明白题意。交换是什么意思

const aa = new Map([

['1', 2],

['2', 1]

])

const val = (key) => {

return aa.get(key)

}

console.log(val('1'))

我也来抖个机灵

a = [, 2, 1][a]

js设计模式之策略模式

// 辣鸡2

(a == 1 && (a=2)) || (a=1)

list(a,b) = array(b,a)

知乎上看过一些奇技淫巧:
针对2^32位以下的正整数,用与或加密再解密——

a ^= b;

b ^= a;

a ^= b;

对于整数,同样的思路,任何可逆运算都能组合一堆答案出来,但是需要注意数值溢出,比如用加减法——

a += b;

b = a - b;

a -= b;

ES6 数组的解构赋值——

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

这种倒是通用的,也还算优雅。


然而大多数这样的代码除了炫技之外并没什么用,不如 if...else 那么直观。

以上是 不使用三元运算符和 if ,如何优雅地切换变量的值? 的全部内容, 来源链接: utcz.com/a/62365.html

回到顶部