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

rand
  • 2k

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
回复
阅读 3.3k
11 个回答
前端记录
  • 533
✓ 已被采纳

如果值均为数字 一个非常优雅的写法 可以这样

    // 初始值
    a = val1;
    
    a = (val1 + val2) - a;
   
    // 为了防止 val1 + val2溢出可以这样
    a = (val1 ^ val2) ^ a;

    // 简洁的写法 
    a ^= val1 ^ val2; // 上面已经有人给出这个答案了

效果
image.png

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

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

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

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

针对题目
a = a - 1 || 2
牛书书
  • 10k

具体问题具体应对

a = a % 2 + 1

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

a ^= 3

image.png

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

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)
张东明
  • 3
新手上路,请多包涵

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

宣传栏