赋值链(如`a = b = ...`)如何工作?

问题描述 投票:0回答:6

我在一些代码中看到了这一行

window.a = window.b = a;

它是如何运作的?

以下语句总是返回 true 吗?

window.a == a

javascript assignment-operator
6个回答
9
投票

这意味着

window.b=a;
window.a=a;

或者你可以说。

window.b=a;
window.a=window.b;

单个语句中的两个作业

还有一件事

window.a==a 对吗?

是的,这是对的。它将返回true


2
投票

此分配从右到左进行,因此首先为“window.b”分配“a”值,然后为“window.a”分配“windows.b”值。

您可以像这样打破这个多重分配并获得相同的结果:

window.b=a;
window.a=a;

您还应该了解诸如范围界定之类的事情。 如果您在全局范围内运行此代码,例如像这样的简单脚本:

<script>
    var a = 10;
    window.a = window.b = a;
</script>

window.a==a 为 true,因为 'a' 和 'window.a' 是相同的变量。 “a”实际上是“window”对象的属性。所有全局变量都是“window”对象的属性。知道你可以像这样编写代码,并且该代码将对应:

<script>
    var a = 10;
    a = b = a;
</script>

但是如果你把这段代码放在一个函数中,它会在函数作用域中运行,例如:

<script>
    function ex() {
        var a = 10; // this is local variable
        window.a = window.b = a; // this time window.a != a
    }
</script>

1
投票

同:

window.b = a;
window.a = a;

不,

window.a
a
并不总是相等。通常,它仅在 Web 浏览器 JavaScript 解释器的全局范围内相等。


1
投票

窗口上的

a
b
属性被分配给
a
的值。是的,如果这段代码在全局范围内执行,
a
window.a
是相同的。

var a = "foo";

//window.a and a are the same variable
window.a = "bar";
a; //bar

function f(){
    var a = "notfoo";

    //window.a is a different variable from a, although they may take the same value
    window.a = "baz";
    a; //notfoo
}

0
投票

就像:

window.b=a;
window.a= window.b;
在上面的语句之后,在这种情况下,

window.a == a 将为 true。在某些情况下它会是 false,例如:当 a 是全局变量时。

还有一件事:下次请为您的问题找到更多信息丰富的标题。


0
投票

实际上,如果

window.a==a
的值为
a
,则
Number.NaN
可能为 false。这是因为
Number.NaN
不等于任何值,包括它本身。

© www.soinside.com 2019 - 2024. All rights reserved.