javascript - 关于在 Javascript 中浏览嵌套结构的防御性语法替代方案的意见/反馈
问题描述
最近我被带到了一个新的代码库,在那里我看到了很多这样的代码,几乎无处不在
if(a && a.b && a.b.c && a.b.c.d) {
// do something with d
}
引起我注意的是,由于该产品产生了大量的 $$$,我们确实需要避免运行时错误。所以这最终成为团队中的惯用语,每次你想要一个对象中的某些东西时,都使用上面的语法。
但正如您所想的那样,这并不是在任何地方都强制执行的(尤其是在这可能很重要的地方),更糟糕的是,它在我们已经验证对象形状的区域成为了一种习惯。
所以这是我的问题:你会建议什么来帮助改变一个采取这种低效习惯(虚假的安全感)的团队来防御性地检查每个加入。
这里有一些想法,但我很高兴听到您的故事和您的经验反馈。
一些想法:
- go ts 或 babel 并使用可选链接 => 不会改变问题,但会(不是?)简化语法
- 强制使用唯一的助手来安全访问(custom / lodash.get / ramda.pathOr, ...)
- 教育团队了解镜头概念并使用这些概念
- 在数据层和表示层之间添加一个强大的验证层
- 展平嵌套对象并使用展平形式 (
{ a: { b: 2 }, c: [3,4]} ==> { 'a.b': 2, 'c.0': 3, 'c.1': 4 }
) - ...
解决方案
推荐阅读
- reactjs - 如何在单个二进制文件中使用 ReactJS GUI 构建 Go 应用程序?
- ssis - 跨域访问共享文件夹时,SSIS 包无法使用 SQL 作业执行
- excel - 如何引用旧版本的 VBA 库?
- java - 骆驼:ClassCastException:DefaultMessage 无法转换为类 SnmpMessage
- angular - 使用 Firebase 将子集合查询到文档中
- python - 如何将数据从字典检索到表?
- javascript - 这个结构有名字吗?它是否一直被支持?
- php - sFetch 以指定字段为实体的数据
- android - 请解释FirebaseRecyclerOption的用法
- http - Jmeter HTTP 示例 HTML 报告生成