我现在沉迷于ES2015 +奢侈品,现在有几个项目,我想知道我是否可以摆脱那些讨厌的拐杖来检查新仙境中的undefined
。
ES2015 +中的typeof varName === 'undefined'
已经有了更短但更精确的方法吗?
当然我可以使用default parameters,但这也感觉就像是一项不必要的任务。
function coolFn(a = null){
if (a===null) console.log("no a supplied");
}
答案 0 :(得分:70)
只需检查varName === undefined
。
在较旧的浏览器中,可以为全局undefined
变量分配备用值,导致该测试失败,但在ES2015 +中现在是不可能的。
请注意,除了查看undefined
之外,无法区分显式传递arguments.length
作为参数,而不是将参数全部删除。
答案 1 :(得分:22)
typeof varName === 'undefined'
有用的唯一情况是,当您不知道变量varName
是否已被声明时。
如果您不知道您的变量是否已声明,那么您的代码会出现严重问题。
在其他情况下,您有更好的选择:
varName === void 0
这将检测varName
是否未定义。
void
是一个接收参数的运算符(您可以使用任何而不是0
),并返回undefined。
varName === undefined
此应该检测varName
是否未定义。
但是,请注意全局undefined
可能已被覆盖(在ES5之前)或被其他值遮蔽。因此,我更喜欢void
,它也更短。
varName == null
这将检测varName
是否未定义或为空。
!varName
这将检测varName
是否为假(未定义,null,0,空字符串,NaN,false)。