一般来说,我测试一个变量是否设置了这样的东西:
if (variable !== '') {
do something...
}
我知道还有其他方法可以测试变量,typeof
但我没有看到任何优势 - 这是测试是否设置变量的合适方法吗?我应该注意它有什么问题吗?
一般来说,我测试一个变量是否设置了这样的东西:
if (variable !== '') {
do something...
}
我知道还有其他方法可以测试变量,typeof
但我没有看到任何优势 - 这是测试是否设置变量的合适方法吗?我应该注意它有什么问题吗?
两个原因:
1)如果通过获取空输入框的内容来设置变量怎么办?
if(someScenario){
var variable = $('empty-box').val(); }
也许这仅在某些情况下才会这样做,例如何时someScenario
为真。稍后,您要检查是否设置了该变量。你的手段返回假而不是真。关键是,你可以想出你得到错误答案的场景。
没有理由不以公认的方式去做。
if(typeof variable !== 'undefined')
它没有变慢,没有真正的缺陷,只是多了几个字符。
2)最重要的是,使用typeof
可以完全清楚您的要求。可读性至关重要,如果另一个程序员阅读了第一个代码,他们会认为您正在检查它是否不是空字符串。使用的方法typeof
可以完全清楚您的条件正在寻找什么,并减少以后出错的几率。
如果variable
已声明但可能没有值,那么您的代码:
if (variable !== '') {
测试它是否不是空字符串。那是你要的吗?空字符串可能是有效值。最好测试undefined
,或将其显式初始化为一个值,然后您可以将其视为“无效”(可能是null
,或任何适合的值)。
如果variable
根本没有声明,上面的代码会导致一个错误,以至于执行会在那个时候停止——你不能测试一个不存在的变量的值。因此,例如,如果您尝试测试在可能尚未调用的函数内创建的全局变量,或者您可能正在使用多个 JS 文件并且需要测试可能或可能不会的变量已由其他文件之一创建,那么唯一的方法是:
if (typeof variable != "undefined") {
通过在此页面上搜索“存在运算符”来查看咖啡脚本的存在运算符:http: //coffeescript.org/
您的方法的功能问题是,您可能在脚本之前的某个时刻无意中为变量分配了一个空白字符串,而您的逻辑块现在会做错事。
从风格的角度来看,您的解决方案不太理想,因为您检查变量是否存在的意图并不明确。第一次阅读您的代码的人可能会误解您所写的意思是“我希望有一个名为 variable 的变量设置为空白字符串”而不是“如果此变量不存在,请执行某些操作。”
由于您正在使用严格的相等测试,以下都将返回 true:
您的支票将返回的唯一一次false
是您传入一个空字符串。
那是你要的吗?
这可能是非常主观的,但我的建议是避免代码,需要检查是否设置了变量(aot 具有某些值或类型)。
考虑这个snipplet
var a=false;
if (some_condition) a="Blah";
if (typeof(a)=='string') ....
if (a===false) ...
这确保 ,a
总是被设置,同时保持它很容易与''
,null
或0