Javascript obj==';未定义';或obj===';未定义';或obj==null或ALL

Javascript obj==';未定义';或obj===';未定义';或obj==null或ALL,javascript,Javascript,我总是不确定哪一个是正确的,使用哪一个 通常我做(obj==null)检查。我觉得还是问问为好 我应该使用以下哪一项: if (obj == null) { alert('obj is null'); } 或 或 或 哪一个更好?我们真的需要检查未定义的吗?就这么做吧 if (obj == null) { 这将检查null和undefined 对于困惑的下一个投票者,使用==null将同时检查null和未定义的,但没有其他“错误”值 foo==“undefined”

我总是不确定哪一个是正确的,使用哪一个

通常我做
(obj==null)
检查。我觉得还是问问为好

我应该使用以下哪一项:

  if (obj == null) {
        alert('obj is null');
  }

哪一个更好?我们真的需要检查未定义的吗?

就这么做吧

if (obj == null) {
这将检查
null
undefined


对于困惑的下一个投票者,使用
==null
将同时检查
null
未定义的
,但没有其他“错误”值

foo==“undefined”语法的
typeof实际上导致的bug比修复的要多。像这样

typeof foo === undefined     // common bug

foo === "undefined"          // common bug

typeof foo === "undefnied"   // common bug
这些是非常常见的错误,也是不使用此语法的原因


以下是初学者被告知使用该语法的案例

  • 未定义
    可能已重新定义

  • 您的变量可能未声明,导致引用错误


以下是这些不是很好的理由

  • 全局
    未定义的
    在现代浏览器中无法重新定义,因此这不是问题。即使它确实被重新定义了,那么有些事情是非常错误的,需要以任何方式加以纠正。如果你隐瞒了问题,你将永远无法解决它

  • 如果开发人员试图使用一个未声明的局部变量,这意味着代码中有一个bug,引用错误应该被视为一个需要的警告,而不是隐藏的东西

  • 如果开发人员试图使用一个事先未知的未声明的全局变量,那么在
    窗口
    对象上检查该变量作为属性要比使用不安全的
    typeof foo==“undefined”
    语法更安全


是的,
null
undefined
之间存在类型区别,因此两者都需要检查。
=
运算符在类型不匹配时执行类型强制算法。这就是为什么您可以使用
==null
来检查两者。

只要这样做就可以了

if (obj == null) {
这将检查
null
undefined


对于困惑的下一个投票者,使用
==null
将同时检查
null
未定义的
,但没有其他“错误”值

foo==“undefined”
语法的
typeof实际上导致的bug比修复的要多。像这样

typeof foo === undefined     // common bug

foo === "undefined"          // common bug

typeof foo === "undefnied"   // common bug
这些是非常常见的错误,也是不使用此语法的原因


以下是初学者被告知使用该语法的案例

  • 未定义
    可能已重新定义

  • 您的变量可能未声明,导致引用错误


以下是这些不是很好的理由

  • 全局
    未定义的
    在现代浏览器中无法重新定义,因此这不是问题。即使它确实被重新定义了,那么有些事情是非常错误的,需要以任何方式加以纠正。如果你隐瞒了问题,你将永远无法解决它

  • 如果开发人员试图使用一个未声明的局部变量,这意味着代码中有一个bug,引用错误应该被视为一个需要的警告,而不是隐藏的东西

  • 如果开发人员试图使用一个事先未知的未声明的全局变量,那么在
    窗口
    对象上检查该变量作为属性要比使用不安全的
    typeof foo==“undefined”
    语法更安全



是的,
null
undefined
之间存在类型区别,因此两者都需要检查。
=
运算符在类型不匹配时执行类型强制算法。这就是为什么您可以使用
==null
来检查两者。

如果您想检查所讨论对象的存在性并防止各种JS错误,请使用以下命令:

if (typeof(abc) === 'undefined') {
    console.log('not defined');
}
证明有用性的JSFIDLE:

如果您希望检查全局变量,那么下面的操作将不使用
typeof()
(也适用于所有对象)


如果要检查所述对象是否存在,并防止各种JS ERORR,请使用以下命令:

if (typeof(abc) === 'undefined') {
    console.log('not defined');
}
证明有用性的JSFIDLE:

如果您希望检查全局变量,那么下面的操作将不使用
typeof()
(也适用于所有对象)


您已经确定了四个测试:

if (obj == null)
if (obj == null || obj == 'undefined')
if (obj == null || obj == undefined)
if (obj == null || obj === 'undefined')
其中,第一个和第三个行为相同。(
obj==null
如果
obj
未定义,将计算为
true
)*第二个和第四个根本不做你想做的,因为如果
obj
是字符串
'undefined'
(以及
obj
未定义时,由于
obj==null
的行为方式),测试将成功

至于是否需要测试未定义值,这取决于是否需要区分未定义值和空值。在大多数应用程序中,您不需要这样做。如果确实需要这样做,应该使用
obj==null
obj==undefined

如果需要防范未声明的变量,则可以使用:

if (typeof obj === 'undefined')
但在除最不寻常的情况外的所有情况下,您都应该知道在给定的上下文中是否声明了变量


*但是,如果未定义
obj
,则
obj===null
将计算为
false

您已经确定了四个测试:

if (obj == null)
if (obj == null || obj == 'undefined')
if (obj == null || obj == undefined)
if (obj == null || obj === 'undefined')
其中,第一个和第三个行为相同。(
obj==null
如果
obj
未定义,则将计算为
true
function saySomething(thing) {
    if(thing === undefined) {
        sayRandomThing();
    }else {
        sayThat(thing);
    }
}
var matches = "My awesome string".match("don't match anything");

console.log(matches === null); // true