javascript - 为什么仅当我尝试访问其属性之一时,对象才声称已定义?

标签 javascript node.js mongodb mongoose

使用以下代码:

req.Course.find({}).populate('students', 'username firstName lastName registered').populate('teacher', 'image mID firstName lastName').sort({title: 1}).exec(function(err, courses){
    if(err) throw err;
    req.toJade.courses = [];
    if (courses){
        req.toJade.courses = advs;
    }
    res.render('courses/list', req.toJade);

});

courses 是以下格式的对象数组:

[{
  _id: objectid,
  title: 'History',
  teacher:
   {
     _id: objectid,
     name: 'John Smith',
     etc...   
   },
   etc...
},
etc...
]

我在 Jade 中循环遍历这些对象的数组,当我尝试访问任何老师的属性

for c in courses:
    h1= c.title
        small= c.teacher.name

它返回一个错误,它无法读取未定义的属性“名称”。当我尝试访问类(class)对象的任何其他属性时,就会发生这种情况。

但是,使用

for c in courses:
    h1= c.title
        small= c.teacher

打印出整个明确定义的对象及其所有存在的属性和正确的值。

我哪里做错了,我怎样才能访问教师对象的任何属性?

最佳答案

只有当我们访问某个特定对象时,java 脚本才会检查其属性是否存在。因为它不像C#、Java那样是类型化语言。在 java 脚本中,我们可以动态添加或删除属性。

要检查对象中是否存在属性,我们可以使用适用于 javascript 中所有对象的函数。

objectname.hasOwnProperty("propertyToCheck")

关于javascript - 为什么仅当我尝试访问其属性之一时,对象才声称已定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31333902/

相关文章:

node.js - Node 、npm 版本、安装错误。 SyntaxError : Block-scoped declarations (let, const、函数、类)在严格模式之外尚不支持

javascript - Node 和 Chrome 浏览器中使用的 javascript 引擎有什么区别吗?

mysql - Nodejs Mysql Select Count 嵌套循环插入查询

MongoDB:当 mongodb 删除索引时发生了什么

linux - 启动停止守护进程 : failed to start `/usr/bin/mongod'

arrays - MongoDB:如何搜索除特定值之外不包含任何内容的数组?

javascript - 将图像延迟加载到背景而不是背景图像

javascript - NodeJS 的 MongoDB 连接错误

javascript - 在页面加载时使用 javascript 更改 iframe 的 src

javascript - 在提交 html 表单时返回多个方法