如何测试对象上属性的存在

时间:2015-09-15 16:09:13

标签: coffeescript

给出类似的东西:

@props.field1.field2.field3

我想测试field3是否存在。所以:

@props.field1.field2.field3?

但是。如果field1在field1上不存在,那么上面的行会产生错误。

但我想避免一堆嵌套测试:

if @props.field1
  if @props.field2
   if @props.field3
     //do something

这可能吗?

2 个答案:

答案 0 :(得分:0)

来自fine manual

  

存在运营商
  [...]
  存在运算符<html> <head> <title>test</title> <style type="text/css"> table { border-collapse: collapse; } table tr td { border: 2px solid black; } </style> </head> <body> <table> <tr> <td>row 1 cell 1</td> <td>row 1 cell 2</td> </tr> <tr> <td>row 2 cell 1</td> <td>row 2 cell 2</td> </tr> </table> </body> </html> 的访问器变体可用于在属性链中吸收空引用。如果基值可能 null 未定义,请使用它代替点访问器?.。如果所有属性都存在,那么您将获得预期结果,如果链断开,则返回未定义而不是 TypeError ,否则将被引发。

所以你可以说:

.

完全忽略遗失的属性。

答案 1 :(得分:0)

if @props.field1 && @props.field2 && @props.field3

如果其中一个属性不存在,编译器将不会测试以下任何一个

实际上 if @props.field3应该完成这项工作