在jQuery的核心风格指南建议两种不同的方法来检查一个变量是否被定义.
typeof variable === "undefined"variable === undefinedobject.prop === undefined为什么jQuery对全局变量使用一种方法而对本地和属性使用另一种方法?
在JavaScript中,有两个基本上说'我不存在'的值 - undefined和null.
程序员未分配任何内容undefined的属性将是,但为了使属性成为必需null,null必须明确分配给它.
我曾经认为需要null因为undefined原始价值和null对象.它不是,即使typeof null会产生'object':实际上,两者都是原始值 - 这意味着既不能undefined也不null能从构造函数返回,因为它们都将被转换为空对象(必须抛出错误来宣告构造函数中的失败).
它们也都false在布尔上下文中进行求值.唯一真正的区别我能想到的是,一个计算结果为NaN,其他0的数字环境.
那么为什么会出现这两种情况undefined,null如果这只会让那些null在试图找出属性是否已经设置时错误检查的程序员感到困惑?
我想知道的是,如果有人有一个合理的例子,那就是必须使用null而不是用来表示undefined.
因此,普遍的共识似乎undefined是"没有这样的财产",而null意味着"财产确实存在,但没有价值".
我可以忍受,如果JavaScript实现实际上会强制执行此行为 - 但它undefined是一个完全有效的原始值,因此可以很容易地将其分配给现有属性以破坏此合同.因此,如果要确定属性是否存在,则必须使用in运算符或hasOwnProperty()任何方式.再一次:对于undefined和的单独值的实际用途是null什么?
我实际上undefined在我想要取消设置不再使用但我不想要的属性值时使用delete.我应该用null吗?
jQuery是否以更简洁的方式提供了一种方法来进行测试?
更新 我应该离开jQuery.这只是一个JavaScript问题.这对我来说太久了!我正在测试是否有外部定义的模块已加载或未加载.看来我可以用它代替:
if (window.someVar)
Run Code Online (Sandbox Code Playgroud)
如果这是一个不好的做法,请纠正我.在我的例子中,如果定义了someVar,它将是一个对象.它不会被定义为假.