javascript - 检查对象和属性是否存在

标签 javascript node.js

我定期使用 mongodb,在从查询结果访问特定属性之前,我会编写一个存在检查,通常如下所示:

if(result && result.subObject1 && result.subObject1.property) { ... }

这是检查结果流或我所知道的我收到的任何其他对象的最安全方法。

这工作得很好,只是大多数时候我对自己说,“可能有更好的方法来做到这一点”,是的。

我查看了一些相关的帖子,但没有一个真正解决这个问题,特别是在处理(可能)深度嵌套的对象时。

最佳答案

避免对数据值本身进行真/假检查。

例如

请求正文:数据:{温度:-128,级别:42}

服务器验证:必须发送数据并设置温度值

验证码:if(data && data.Temperature){//ok}else{//输入无效}

上面的验证代码也会拒绝 0 和负温度值,而服务器的实际验证动机是确保温度值始终被设置。

因此检查应该明确且单独定义:

函数存在(val){ return val !== undefined && val !== null; }

函数 isNumber(val){ return !isNan(val); }

应该使用这些检查的组合。

要进行更可靠的检查,请使用 validator 等模块.

就深度检查而言,您需要定义完整且正确的 JSON schema首先,然后运行 ​​schema validator就在上面。

关于javascript - 检查对象和属性是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24786689/

相关文章:

javascript - 当我使用express时,我无法获取POST数据

node.js - 即使 paranoid 设置为 true,Sequelize.js 仍然删除表行

ajax - 无法让 gulp 使用浏览器同步来刷新 Express 服务器和 json

javascript - Node.js Sequelize 在多个模型的循环中使用 create 函数

Javascript 减法返回 NaN

javascript - 在循环中发送 jquery ajax 请求

javascript - 为什么我需要使用 setState 回调来设置依赖于第一个项目的 setState 完成的第二个状态项目的状态?

javascript - 选择相邻元素的子元素

javascript - Cycle2 Carousel 事件幻灯片位于中心

node.js - 无法让 puppeteer 使用同一浏览器浏览新收集的链接