你们有没有人在JavaScript中使用显式数据转换? 例如:
//ModificationAllowed is an integer (1 or 0) value from registry
canModifyRecord = Boolean(application.settings('ModificationAllowed'));
if (canModifyRecord) {
... do something
}
我希望尽可能保持我的代码干净,但显式转换可能是多余的?
答案 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
}