JavaScript中显式数据转换的优缺点

时间:2013-10-11 15:09:20

标签: javascript

你们有没有人在JavaScript中使用显式数据转换? 例如:

//ModificationAllowed is an integer (1 or 0) value from registry
canModifyRecord = Boolean(application.settings('ModificationAllowed'));
if (canModifyRecord) {
   ... do something
}

我希望尽可能保持我的代码干净,但显式转换可能是多余的?

3 个答案:

答案 0 :(得分:3)

是和否。这一切都取决于具体情况。

如果我正在为模型表示获取数据,那么是。我会确保我存储的数据输入正确。

如果我使用来自用户或服务器的数据进行计算,那么是。我将所有内容转换为Number()parseFloat

但是对于布尔检查,如果我的检查是本地化而未在应用程序的其他地方使用,那么我通常不会为了简洁起见而进行转换。但是确保正确的类型(例如!!黑客)不会造成伤害。

所以作为经验法则:

  • 数据是否可以在其他地方重复使用?然后确保正确的类型。
  • 数据范围是否仅限于当前方法/功能?然后,只有转换它带来实际价值(如计算)。否则,类型自动转换通常没问题。

答案 1 :(得分:3)

如果您只使用该变量作为if条件的条件,则转换为布尔值是多余的,就像您在此处一样。在ECMAScript术语中,if使用ES5的converts its condition to a boolean ToBoolean已经same mechanism used by Boolean(arg),这是non-strict equality algorithm

其他情况受到转换的影响,值得注意的是相等测试(无论是严格还是非严格):

"foo" == true            // false
Boolean("foo") == true   // true

这是因为{{3}}的行为严重依赖于类型。特别是,请参阅步骤6和7了解布尔到其他比较行为,它将非布尔操作数转换为数字。

答案 2 :(得分:1)

使用!!将变量转换为布尔值,对我来说很容易

canModifyRecord = !!application.settings('ModificationAllowed');
if (canModifyRecord) {
   ... do something
}