javascript - JS 对象属性在传递表达式时返回 'NaN'

标签 javascript object

<分区>

我想将属性 age 分配给对象,我知道可以使用如下函数来完成:

var john = {
         firstName: "John",
         lastName: "Smith",
         job: "Teacher",
         yearOfBirth: 1990,
         family: ['Jane', 'Mark', 'Bob'],
         calculateAge: function() {
            this.age = 2018 - this.yearOfBirth
         }
      }             

   john.calculateAge();

它按预期将属性 age 添加到对象 John 中。但是没有函数能做到吗?

当我尝试执行以下操作时:

var john = {
             firstName: "John",
             lastName: "Smith",
             job: "Teacher",
             yearOfBirth: 1990,
             family: ['Jane', 'Mark', 'Bob'],
             age: 2018 - this.yearOfBirth
          }

“年龄”属性返回“NaN”。我不知道为什么它不返回数字。这是正常行为(如果"is",那为什么?)还是我在这里做错了什么?

最佳答案

您无法从尚未完成声明的对象中获取任何值。在您编写 age: 2018 - this.yearOfBirth 时,var john 未定义(即使已定义,调用上下文也值得怀疑 - 可能是全局的对象,可能是 undefined)。

改为在初始对象声明之后分配 age 属性。

关于javascript - JS 对象属性在传递表达式时返回 'NaN',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49964219/

相关文章:

javascript - Protractor 测试脚本的执行速度快于页面加载速度

javascript - 如何确定对象中数组的值?

c# - LINQ 获取最接近的值?

javascript - 映射键值以使用 javascript 创建具有嵌套对象的 json 结构

javascript - 使用 AngularJS 关闭 Bootstrap 模态窗口

javascript - 在 jquery 中再次单击时如何显示 DIV?

Javascript - 使用字符串构造对象属性

java - 初始化套接字上的ObjectInputStream block

javascript - 如何使用 i18nextBrowserLanguageDetector 的结果

javascript - 使用 Javascript 在 DOM 中添加图像元素