JavaScript多重赋值语句

3

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

window.a = window.b = a;

它是如何工作的?

以下内容是否总是返回true?

window.a == a

6个回答

10

它的意思是

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

或者你可以这样说。

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

一条语句中有两个赋值

还有一件事

window.a==a 对吧?

是的,这是正确的。它会返回true。


你为什么没有在 window.a==a 语句中包含 iframesnodejs - Petah

2

这个赋值过程是从右到左执行的,所以最初 'window.b' 将被赋值为 'a' 的值,然后 'window.a' 将被赋值为 'window.b' 的值。

你可以将这个多重赋值分开来写,得到相同的结果:

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

您还应该了解类似于作用域的概念。 如果您在全局作用域中运行此代码,例如像这样的简单脚本:

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

window.a==a 是正确的,因为'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

窗口上的ab属性被赋值为a的值。是的,如果在全局范围内执行此代码,则awindow.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
}

1

同上:

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

不,window.aa并不总是相等的。通常情况下,它们只在Web浏览器JavaScript解释器的全局范围内相等。


0

这与以下内容相同:

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

在这种情况下,语句之后window.a == a将为true。有些情况下它将为false,例如:当a是全局变量时。

还有一件事:下次请为你的问题找一个更具信息性的标题。


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接