Javascript a = b = c语句

ami*_*mit 29 javascript

我搜索了互联网,但找不到相关的搜索条件,所以我认为这是最好的问题.

我有一个JS声明说

document.location.hash = this.slug = this.sliceHashFromHref(href)
Run Code Online (Sandbox Code Playgroud)

这是如何运作的??

aio*_*obe 59

这是如何运作的??

a = b可以看作是一个陈述和一个表达.

表达的结果是b.

换一种说法,

a = b = c;
Run Code Online (Sandbox Code Playgroud)

可以写成

a = (b = c);
Run Code Online (Sandbox Code Playgroud)

相当于

b = c;
a = b;
Run Code Online (Sandbox Code Playgroud)

因此,您的代码相当于:

this.slug = this.sliceHashFromHref(href);
document.location.hash = this.slug;
Run Code Online (Sandbox Code Playgroud)

  • 如果表达式`a = b`的结果是`b`,那么表达式`a = (b = c)`应该等价于`b = c; a = c;`(但这并不意味着 `a = b = foo()` 会调用 `foo` 两次!)。我想知道如果 `a`、`b` 和 `c` 有 getter 和 setter,`a = b = c` 将如何运作。`c` 的 getter 会被调用一次,然后 `b` 的 setter 会被调用 - 会不会调用 `b` 的 getter 来获取 `a` 的 setter 的值? (2认同)

Ma *_*rez 18

注意变量范围!!

var A = B = C = 3; //A is local variable while B & C are global variables;
var A = 3 , B = 3, C = 3;// A B C are local variables;
Run Code Online (Sandbox Code Playgroud)


Pra*_*ana 9

它从右到左进行评估。IE

document.location.hash = this.slug = this.sliceHashFromHref(href)
Run Code Online (Sandbox Code Playgroud)

表示将 的输出/值this.sliceHashFromHref(href)分配给this.slug,然后分配给document.location.hash

  • 我的意思是没有冒犯,但我觉得@aioobe 的答案应该被接受,因为它已经被社区投票得更好,更彻底并且(在我看来)解释得更好。如果这是错误的方式,我很抱歉。 (3认同)

Ste*_*rig 5

很简单...它分配结果从调用this.sliceHashFromHref(href)document.location.hashthis.slug,所以这两个属性(变量)包含相同的值的行执行之后.