Javascript 检查对象和属性是否存在
我定期使用mongodb,在从查询结果访问特定属性之前,我编写了一个存在性检查,通常如下所示:Javascript 检查对象和属性是否存在,javascript,node.js,Javascript,Node.js,我定期使用mongodb,在从查询结果访问特定属性之前,我编写了一个存在性检查,通常如下所示: if(result && result.subObject1 && result.subObject1.property) { ... } 这是检查结果流或我正在接收的任何其他我知道的对象的最安全的方法 这很好,只是大多数时候我对自己说,“可能有更好的方法可以做到这一点”,有 我看了一些相关的文章,但没有一篇真正提到这一点,特别是在处理(可能)深度嵌套对象时。避免对数
if(result && result.subObject1 && result.subObject1.property) { ... }
这是检查结果流或我正在接收的任何其他我知道的对象的最安全的方法
这很好,只是大多数时候我对自己说,“可能有更好的方法可以做到这一点”,有
我看了一些相关的文章,但没有一篇真正提到这一点,特别是在处理(可能)深度嵌套对象时。避免对数据值本身进行真/假检查 例如 请求主体:
数据:{温度:-128,级别:42}
等
服务器验证:必须发送数据并设置温度值
验证代码:if(data&&data.temperature){//ok}else{//invalid input}
上述验证代码也将拒绝0和负温度值,而服务器的实际验证目的是确保始终设置温度值
因此,应明确和单独定义检查:
函数存在(val){return val!==undefined&&val!==null;}
函数isNumber(val){return!isNan(val);}
应使用这些检查的组合
要进行更健壮的检查,请使用以下模块
就深度检查而言,您需要首先定义一个完整且正确的检查,然后在其上运行。实际上没有更有效的方法,但您可以使用函数来缩短检查时间。也许这会有所帮助:仅供参考,这是内置的(查找“存在运算符”)。如果属性是
0
,您可能不会尝试访问它上的属性…@Bergi我指的是值而不是属性。若服务器期望say“amount”键有一个数字值,并收到“amount”:“0”,那个么If(data.amount)
将是错误的,并且服务器假定数据根本并没有“amount”值。但你们不需要测试它。只要if(data){…data.amount…}