【问题标题】:When creating a variable in a JavaScript object, how does the code know where to add the new variable? [duplicate]在 JavaScript 对象中创建变量时,代码如何知道在哪里添加新变量? [复制]
【发布时间】:2018-02-19 13:51:54
【问题描述】:

我正在学习 JavaScript 课程,我很好奇当我将代码注销到控制台时,代码如何知道在对象属性上方包含 age 值?这是课程中的代码:

var john = {
    name: 'John',
    lastName: 'Smith',
    yearOfBirth: 1990,
    job: 'teacher',
    isMarried: false,
    family: ['Jane', 'Mark', 'Bob'],
    calculateAge: function() {
        this.age = 2016 - this.yearOfBirth;
   }
};

john.calculateAge();
console.log(john);

如果我理解正确,我会在这一行创建一个age 变量:

this.age = 2016 - this.yearOfBirth;

当我查看控制台时,age 属性及其值在对象属性上方说明。是什么决定了这个演示文稿?

【问题讨论】:

  • age 不是变量,而是属性。
  • 顺便说一句,我们有 2017 年 :-)
  • 我知道,该课程于 2016 年发布,我正在跟进以确保我首先了解原理。 :-)

标签: javascript object


【解决方案1】:

您的示例中没有 age 变量。这一行:

this.age = 2016 - this.yearOfBirth;

将属性age 添加到john 变量引用的对象。

并且对象属性没有排序。这意味着在程序内部,age 属性并不高于所有其他属性。这也意味着您不能确定当使用像 for..in 这样的迭代构造时,age 将位于顶部。

当我查看控制台时,会显示年龄变量及其值 在对象属性上方。

如果您使用console.log 显示对象,则它使用按字母顺序排列键的格式。尝试使用不同的名称,例如xge,您会看到它会靠近底部输出。

【讨论】:

    【解决方案2】:

    正如您在下面的 sn-p 中看到的,您正在创建变量 age 并将其添加为 this 的属性

    var john = {
     name: 'John',
     lastName: 'Smith',
     yearOfBirth: 1990,
     job: 'teacher',
     isMarried: false,
     family: ['Jane', 'Mark', 'Bob'],
     calculateAge: function() {
     console.log('#1', this);
     this.age = 2016 - this.yearOfBirth;
     console.log('#2', this);
     }
    };
    
    john.calculateAge();
    console.log(john);

    【讨论】:

    • 谢谢,我明白了。当我将此记录到控制台时,它会在对象属性上方显示新的age 变量。这就是age 变量的默认记录方式吗?
    • 在 #1 输出中它没有被记录,在添加它之后它会被每次记录
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-15
    • 1970-01-01
    • 2021-09-03
    • 2023-03-12
    • 2016-11-04
    相关资源
    最近更新 更多