当前位置: 首页 > 面试题库 >

变量赋值如何在JavaScript中起作用?

周博达
2023-03-14
问题内容

因此,前几天我在玩,目的是确切了解批量分配在JavaScript中的工作方式。

首先,我在控制台中尝试了以下示例:

a = b = {};
a.foo = 'bar';
console.log(b.foo);

结果是“栏”显示在警报中。这很公平,a并且b实际上只是同一对象的别名。然后我想,如何使这个例子更简单。

a = b = 'foo';
a = 'bar';
console.log(b);

那几乎是同一回事,不是吗?好吧,这次返回的结果与我从第一个示例的行为所期望的foobar一样。

为什么会这样?

注意: 可以使用以下代码进一步简化此示例:

a = {};

b = a;

a.foo = 'bar';

console.log(b.foo);



a = 'foo';

b = a;

a = 'bar';

console.log(b);

(我怀疑JavaScript对哈希和字符串之类的原语的处理方式与哈希不同。哈希返回一个指针,而“核心”原语返回其自身的副本)


问题答案:

在第一个示例中,您将设置现有对象的属性。在第二个示例中,您正在分配一个全新的对象。

a = b = {};

a并且b现在是指向同一对象的指针。因此,当您这样做时:

a.foo = 'bar';

b.foo从此它也设置ab指向同一对象。

然而!

如果您改为这样做:

a = 'bar';

您是说现在a指向另一个对象。这a对之前指出的没有影响。

在JavaScript中,分配变量和分配属性是2种不同的操作。最好将变量视为指向对象的指针,当您直接将变量分配给变量时,您无需修改​​任何对象,而只是将变量指向另一个对象。

但是分配一个属性(如a.foo)将修改a指向的对象。当然,这还修改了所有其他指向该对象的引用,这仅仅是因为它们都指向同一对象。



 类似资料:
  • 我想在单击按钮时打印我的产品详细信息。 我有两个字典Watchs和TV 这里是我的javascript代码,在此我使用函数打印字典的值,并使用保存字典的名称。但当我编写时,输出是未定义的。 但当我单击“手表”按钮和时,它会将输出作为手表给我,或者单击“电视”按钮和时,它会将输出作为电视给我。 那么为什么不起作用。 null null

  • 这是可能的吗,以及如何使用这样的逻辑进行一行(或短)var赋值: 我试图做到: 但得到一个错误:“运算符|未在字符串上定义”。 所以我来自JS,并试图实现: 但要“走” 由于它是静态类型的Lang,我的意思是如果b == " "(空字符串)

  • = 赋值操作符(它的左右两边不能有空白符) 不要搞混了 = 和 -eq,-eq 是比赋值操作更高级的测试。注意:等于号(=)根据环境的不同它可能是赋值操作符也可能是一个测试操作符。 例子 4-2. 简单的变量赋值 1 #!/bin/bash 2 # 裸变量 3 4 echo 5 6 # 什么时候变量是“裸”的?比如说,变量名前面没有$? 7 #当变量被赋值

  • 问题内容: 我正在使用BlueJ,但遇到了问题。我有一个带有3个选项的组合框。每个选项都是一个字符串。这三个选项是日,周和月。我想做的是,如果选择Day,则变量等于30(双精度),依此类推。有人可以帮我买吗,告诉我如何根据组合框中的所选选项为“ emailvalue”赋予值? 编辑:我要添加我的实际程序代码,它是每月的数据计算器。它确实可以编译。 这是代码: 问题答案: 1)首先,您需要添加一个以

  • 在JavaScript中,用var申明的变量实际上是有作用域的。 如果一个变量在函数体内部申明,则该变量的作用域为整个函数体,在函数体外不可引用该变量: 'use strict'; function foo() { var x = 1; x = x + 1; } x = x + 2; // ReferenceError! 无法在函数体外引用变量x 如果两个不同的函数各自申明了