undefined
是一个词,意思是not defined
。
null
是一个对象
让我们看看这段代码
function saySomething(thing) {
if(thing === undefined) {
sayRandomThing();
}else {
sayThat(thing);
}
}
在这种情况下,我会检查是否给出了参数,或者换句话说,是否定义了参数。
请注意,变量名称thing
已声明,但未定义。所以在这种情况下thing === undefined
就足够了,你不需要做更多的 verbose typeof thing === "undefined"
。
没有理由使用这个词null
。因为null
是一个对象,它与我们的thing
.
只是另一个注释。typeof thing === "undefined"
当您实际上不知道变量是否已声明时需要。但是,正如文档所说:
但是,应该避免这种技术。JavaScript 是一种静态范围的语言,因此可以通过查看变量是否在封闭上下文中定义来了解变量是否已定义。唯一的例外是全局作用域,但全局作用域绑定到全局对象,因此可以通过检查全局对象上是否存在属性来检查全局上下文中的变量是否存在(使用 in 运算符,例如)
我应该什么时候使用null
?
来自https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/null
在 API 中,通常在可以预期对象但没有相关对象的地方检索 null。
null
是一个对象。null
当一个函数应该返回一个对象或数组,但在某些情况下应该告诉我们“找不到对象”(空对象的不同情况{}
意味着:我找到了对象,它是空的)时, Javascript 核心使用。以方法match
为例。
var matches = "My awesome string".match("don't match anything");
console.log(matches === null); // true
在您的脚本中,作为开发人员,您知道变量应该是什么类型。你应该知道你应该使用哪种条件。记住:
- 如果您不知道变量是否已声明,请
if(typeof varName === "undefined")
在其他检查之前使用。
- 如果您不知道变量是否已定义,请
if(varName === undefined)
在其他检查之前使用。
- 如果您知道变量是否已定义并且它是一个对象,请检查是否为空
if(varName === null)
需要严格相等运算符 ( ===
) 因为varName == undefined
还检查是否varName
为 null