gpt4 book ai didi

javascript - 为什么这些链式速记运算符不起作用?

转载 作者:行者123 更新时间:2023-11-29 22:22:28 26 4
gpt4 key购买 nike

在 javascript 中使用链式速记运算符编写交换函数时,我偶然发现了一些让我很困惑的事情。

此代码应该交换 a 和 b 值。

var a = 4532;
var b = 969;

a^=b^=a^=b;

但事实并非如此:b = 4532,但 a = 0。

如果我将这段代码分成两行,它会按预期工作。

var a = 4532;
var b = 969;

b^=a^=b;
a^=b;

技术解释是什么?

PS:这里是the code on jsfiddle如果有人想快速尝试一下。

最佳答案

在回答你的问题之前,你能说出下面代码的结果吗?

var c = 1;
c += c += 1;

你可能认为它是 4,你自己试试 :)

我不知道 javascript 代码在幕后是如何解释的。以下是我试图解释为什么会这样。

a += b,等于a = a + b。所以,c += c += 1c = c + (c = c + 1)。以(c + (c = c + 1))形式赋值,结果为(c + c + 1)。这里我觉得是关键点,比较迷惑,变量c还是1,虽然我们重新赋了一个新值c + 1给它,在第一个赋值 c += 1 中。

所以,a^=b^=a^=b等于a = a^b^a^b,即0。因为对 a 的内部更改被忽略了,或者它可能是一个错误?

我的另一个猜测是,代码可以这样展开:

c = 1 + (c = 1 + 1)// in form of c = c + (c = c + 1)

这都是我的猜测,因为我不知道 VM 生成的字节码是什么样子的。希望有用。

关于javascript - 为什么这些链式速记运算符不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11609681/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com