Javascript 测试是否设置了变量
Javascript testing whether or not a variable is set
通常,我测试变量是否设置如下:
if (variable !== '') {
do something...
}
我知道还有其他方法可以测试变量,例如typeof
但我看不到任何优势 - 这是测试是否设置变量的合适方法吗?我应该注意它有什么问题吗?
两个原因:
1) 如果变量是通过获取空输入框的内容来设置的怎么办?
if(someScenario){
var variable = $('empty-box').val(); }
也许这只在某些情况下才会完成,例如当someScenario
为真时。 稍后,您要检查是否已设置该变量。 您的均值返回 false 而不是 true。关键是,你可以想出你得到错误答案的场景。
没有理由不以可接受的方式去做。
if(typeof variable !== 'undefined')
它不慢,没有真正的缺陷,只是多了几个角色。
2)最重要的是,使用typeof
可以完全清楚你在问什么。 可读性至关重要,如果另一个程序员阅读了第一个代码,他们会认为你在检查它不是一个空字符串。使用typeof
的方法可以非常清楚地了解您的条件正在寻找什么,并减少以后出错的几率。
如果已声明variable
但可能没有值,则您的代码:
if (variable !== '') {
测试它是否不是空字符串。这就是你想要的吗?空字符串可能是有效值。最好测试undefined
,或者显式初始化为一个值,然后你可以将其视为"无效"(可能是null
,或任何合适的)。
如果根本没有声明variable
则上述代码将导致错误,因此执行将在该点停止 - 您无法测试不存在的变量的值。因此,例如,如果您尝试测试在可能尚未调用的函数中创建的全局变量,或者您可能正在使用多个 JS 文件,并且需要测试一个变量,该变量可能由其他文件创建,也可能不是由其他文件创建,那么唯一的方法是:
if (typeof variable != "undefined") {
由于您使用的是严格的相等性测试,因此以下内容都将返回 true:
- 假
- 定义
- 零
- 0
检查返回false
的唯一时间是传入空字符串时。
这就是你想要的吗?
查看coffeescript的存在主义运算符,通过在此页面上搜索"存在运算符": http://coffeescript.org/
您的方法的功能问题是,您可能会在脚本之前的某个时间点无意中将空白字符串分配给变量,并且您的逻辑块现在将做错误的事情。
从风格的角度来看,您的解决方案不太理想,因为您检查变量是否存在的意图不明确。 第一次阅读您的代码的人可能会误解您编写的内容"我希望有一个名为变量的变量设置为空白字符串",而不是"如果此变量不存在,请执行某些操作"。
这可能是非常主观的,但我的建议是避免使用代码,需要检查是否设置了变量(a.o.t.具有某些值或类型)。
考虑一下这个剪影
var a=false;
if (some_condition) a="Blah";
if (typeof(a)=='string') ....
if (a===false) ...
这确保了a
始终被设置,同时使其易于与''
、null
或0
区分开来
- 如何在Bootstrap Modal中为动态点击生成的变量设置jade属性
- Javascript使用变量设置属性
- 敲除js变量设置类似于调用函数
- 使用输入变量设置元素的值
- 为什么我们将控制器变量设置为等于“0”;这个“;在角度上
- 将外部控制器的范围变量设置为角度
- 谷歌地图标记在通过变量设置标记和经度时不保持不变
- 尝试在 jquery ajax 帖子中将变量设置为URL 的一部分
- 如果循环中至少有一个元素返回 false,如何将变量设置为 false
- 如何将宽度和高度变量设置为浏览器窗口的宽度和高度
- 如何将变量设置为外部内容
- 需要将变量设置为特定的数字范围
- 执行批处理文件的Javascript,该文件包含基于每个会话的环境变量设置
- 如何在jquery中基于变量设置某个东西的宽度
- 将变量设置为等于本地JSON文件
- 根据Angular中的单独变量设置下拉默认值
- 如何使用JavaScript变量设置函数集css宽度
- 如何为一个javascript变量设置give多个值
- 如何将javascript变量设置为php变量并将其存储在数据库中
- 如何在javascript中为变量设置一行setter