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