obj == 'undefined' OR obj === 'undefined' OR
obj == 'undefined' OR obj === 'undefined' OR obj == null OR ALL
我总是不确定哪个是正确的,使用哪个。
通常我会(obj == null)
检查。我想最好只是问。
我应该使用以下哪一项:
if (obj == null) {
alert('obj is null');
}
或
if (obj == null || obj == 'undefined') {
alert('obj is null or undefined');
}
或
if (obj == null || obj == undefined) {
alert('obj is null or undefined');
}
或
if (obj == null || obj === 'undefined') {
alert('obj is null or undefined');
}
哪一个更好,我们真的需要检查未定义吗?
只是做
if (obj == null) {
这将检查null
和undefined
。
对于困惑的反对者,使用== null
将同时检查null
和undefined
,但没有其他"错误"值。
typeof foo === "undefined"
语法实际上导致的错误多于修复的错误。像这些...
typeof foo === undefined // common bug
foo === "undefined" // common bug
typeof foo === "undefnied" // common bug
这些是非常常见的错误,也是不使用此语法的原因。
以下是初学者被告知使用该语法的情况......
undefined
可能已被重新定义您的变量可能未声明,从而导致引用错误
以下是这些不是很好的理由的原因
全局
undefined
无法在现代浏览器中重新定义,因此这不是问题。即使它确实被重新定义,那么有些事情也非常错误,需要以任何一种方式进行修复。如果您隐藏问题,您将永远无法修复它。如果开发人员尝试使用未声明的局部变量,则意味着代码中存在错误,并且 ReferenceError 应被视为理想的警告,而不是要隐藏的内容。
如果开发人员尝试使用事先无法知道的未声明的全局变量,则检查该变量是否为
window
对象的属性比使用不安全的typeof foo === "undefined"
语法更安全。
是的,null
和undefined
之间存在类型区别,因此两者都需要检查。当类型不匹配时,==
运算符执行类型强制算法。这就是为什么您可以使用== null
来检查两者的原因。
您已经确定了四个测试:
if (obj == null)
if (obj == null || obj == 'undefined')
if (obj == null || obj == undefined)
if (obj == null || obj === 'undefined')
其中,第一个和第三个行为相同。(obj == null
将计算true
是否未定义obj
。*第二个和第四个根本不做你想要的,因为如果obj
是字符串'undefined'
(以及当obj
未定义时,由于obj == null
的行为方式(,测试将成功。
,这取决于是否需要区分未定义值和空值。在大多数应用程序中,您不需要这样做。如果您确实需要这样做,您应该使用 obj === null
和 obj === undefined
.
如果需要防范未声明的变量,则可以使用:
if (typeof obj === 'undefined')
但在除最不寻常的情况外,您应该知道在给定上下文中是否已声明变量。
*但是,obj === null
将评估为false
是否定义obj
。
undefined
是一个表示not defined
的词。
null
是一个对象
让我们看看这段代码
function saySomething(thing) {
if(thing === undefined) {
sayRandomThing();
}else {
sayThat(thing);
}
}
在这种情况下,我会检查参数是否给定,或者换句话说,参数是否被定义。
请注意,变量名称thing
已声明,但未定义。因此,在这种情况下thing === undefined
就足够了,您无需执行更冗长的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
是一个对象。Javascript 核心使用null
函数应该返回对象或数组,但在某些情况下应该告诉我们"找不到对象"(空对象的不同情况{}
这意味着:我找到了对象,它是空的(。例如,方法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)
检查是否为 null
需要严格相等运算符(===
(,因为它还会检查varName
是否为空varName == undefined
如果要检查相关对象是否存在并防止各种 JS 错误,请使用以下内容:
if (typeof(abc) === 'undefined') {
console.log('not defined');
}
jsFiddle证明有用性:http://jsfiddle.net/tJyfg/1/
如果你想检查一个全局变量,那么以下内容将在不使用typeof()
的情况下完成这个技巧(也适用于所有对象(......
if (!window.abc) {
console.log('not defined');
}
- 为什么会出现错误;未捕获的类型错误:undefined不是函数;
- /undefined在我的404错误日志中多次出现
- RequireJS向模块传递配置总是返回undefined
- Angular 2.0 with JavaScript or TypeScript?
- JSON数组数据返回Undefined
- 为什么会出现错误,“UncaughtTypeError:undefined不是函数”
- Array.lenght = undefined
- mongoose.connect undefined不是一个函数
- JavaScript”;.方法“;返回undefined
- Uncaught TypeError:undefined不是函数-ember js
- SharePoint 2010 Jquery/JSON Rest Multiple OR语句-如何
- Jquery - table.row(tr) is undefined
- GWT (or javascript) library for couchDB
- jQuery可以't获取data-*属性值,返回undefined
- noty.js is returning undefined
- 将对象的列表c#传递给javascript:undefined变量时出错
- $routeParams is undefined
- obj == 'undefined' OR obj === 'undefined' OR
- results[0].formatted_address return undefined or null
- getElementId returns null or undefined