JavaScript:交换没有临时变量的字符串变量

Eli*_*zio 2 javascript

我知道在JavaScript中可以使用XOR选项交换两个整数值,从而不需要临时变量:

a = 14; b = 27; a^=b; b^=a; a^=b;
// a == 27 and b == 14
Run Code Online (Sandbox Code Playgroud)

但在JavaScript中是否有类似的非临时技术来交换字符串?

Mar*_*lli 12

替代交换方法

有一个通用的单行交换方法,不涉及创建新的临时变量,只使用"动态"数组,这里是:

var a = "world", b = "hello";
b = [a, a = b][0];

console.log(a, b); // Hello world
Run Code Online (Sandbox Code Playgroud)

说明:

  • a=b分配的旧值ba和yelds它,因此[a, a=b][a, b]
  • [0]操作者yelds阵列,这是第一个元素a,所以现在b = [a,b][0]变成b = a

然后,仅对于字符串,您也可以这样做:

var a = "world", b = "hello";
a = b + (b = a, "");

console.log(a, b); // Hello world
Run Code Online (Sandbox Code Playgroud)

如果要对数字执行此操作,可以将其替换为""a .0

说明:

  • (b = a, "")分配的旧值a,以b和yelds一个空字符串
  • 现在你有a = b + "",并且从那以后,分配b + "" === b了旧的值ba

运行时间

此页面上,您可以找到有关最常见交换方法的有趣速度测试.结果显而易见:数组方法是最弱的,因为创建数组会导致引擎执行比仅使用表达式或按位运算符或新变量更低级别的操作.

如果您不想打开链接,可以使用以下屏幕截图: 测试 图形