Javascript 惰性类型安全检查

标签 javascript

我正在对用普通 JavaScript 编写的代码进行同行评审,其中一位作者偶尔会执行惰性类型转换 if 语句,因为他正在评估来自具有非常草率数据的 REST 服务的值。有时,代表美元货币的值会以字符串形式返回,有时会以数字形式返回,这可能取决于多年来用户输入数据时采用的验证方式。

所以有时我们得到的值是150,有时我们得到"150"(不带引号,如果你明白我的意思的话)。

数据只是显示出来,并且没有对其进行任何数学运算:它只需要与另一个数字进行比较,以便可以完成一些显示样式。

开发人员不是编写一些检查数据类型并强制其成为统一类型的函数,而是执行以下操作:

var baseVal = ReturnsAnIntegerValue(); // returns a number
var retrievedVal = CallToAwfulDataService(); // could return number or string
if (retrievedVal && retrievedVal == baseVal) {
  // do stuff
}
else { ...

起初 == 让我看到了一个危险信号,但当我向他询问时,他说初始检查 if (retrievedVal && ... 将防止 baseValretrievedVal 均为 null、0、空字符串或 undefined< 的某种组合的情况出现意外结果,像这样:

if (null && null == undefined) // false       |     if (null == undefined) // true
if (0 && 0 == "") // false                    |     if (0 == "") // true
if (0 && 0 == "0") // false                   |     if (0 == "0") // true
if (0 && 0 == "") // false                    |     if (0 == "") // true

你明白了。我觉得这应该是糟糕的代码,因为我被告知 == 是糟糕的形式,但代码可读且简洁,不需要额外的函数来进行类型转换只是为了显示。我想不出我们可能会因此受到伤害的情况。

这是错误的代码吗?具体来说:有什么问题?有更好的做法来处理这个问题吗?

编辑

我忘了说了,我看过一个bunchSO questions这似乎主要支持 == 是代码气味学派的思想,但我看不出这种情况在技术上有什么风险。

最佳答案

您可能应该有一些“标准化”功能,并使用来自后端的数据样本进行测试用例。

良好实践通常假设环境“一切都很好”,但您的情况并非如此。

无论你走哪条路,就“良好实践”而言,你都注定失败。

关于Javascript 惰性类型安全检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22018274/

相关文章:

javascript - Sequelize 包含模型但没有表名

javascript - jquery在互函数上传递参数

javascript - HtmlService - 在选择元素中抑制 Firefox 箭头

javascript - <a href ="#"> 如何结束调用 Javascript 函数?

javascript - 为什么 javascript date1 == date2 不起作用?

javascript - 返回泛型的 TypeScript 工厂函数

php - 使用 JavaScript 从 PHP 访问 JSON 数组

javascript - 保存变量值以备将来在 peg.js 上使用

javascript - JavaScript 中的事件检查

javascript - 使用悬停或 onmouseover/onmouseout?