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