Javascript 确定一个对象';有效性
上下文: 我试图确保传递给函数的对象在使用之前是有效的。我想知道这两种方法之间是否有区别,一种在语法上比另一种更冗长。如果Chrome、IE、FF等现代用户代理使用的所有JavaScript引擎的功能和行为都相同,我宁愿使用更简单的版本。如果不是,我希望使用安全的赌注,这样无论JavaScript引擎的实现如何,我的代码都能按预期运行 问题: 给定以下函数,有两条语句由注释部分表示。Javascript 确定一个对象';有效性,javascript,Javascript,上下文: 我试图确保传递给函数的对象在使用之前是有效的。我想知道这两种方法之间是否有区别,一种在语法上比另一种更冗长。如果Chrome、IE、FF等现代用户代理使用的所有JavaScript引擎的功能和行为都相同,我宁愿使用更简单的版本。如果不是,我希望使用安全的赌注,这样无论JavaScript引擎的实现如何,我的代码都能按预期运行 问题: 给定以下函数,有两条语句由注释部分表示。 不管JS引擎(或用户代理)如何,语句1是否产生与语句2相同的结果?为什么呢 function f(obj) {
不管JS引擎(或用户代理)如何,语句1是否产生与语句2相同的结果?为什么呢
function f(obj) {
if(obj) { // statement 1
console.log('obj is valid');
}
if(obj !== null && obj!==undefined) { // statement 2
console.log('obj is invalid');
}
}
不,它们是不同的
if(obj)
测试真实值。在JavaScript中,除了”
、0
、false
、NaN
、null
和undefined
(可能还有一些我忘记了…)
但是,如果其中一个falsy值是您可以接受的值,例如零或false
?零的数量
是一个完全合法的值,对于isTotallyLame
,也是false
。因此,您需要一个允许这些值通过的测试。你需要测试你的存在
if(obj!==null&&obj!==undefined)
测试是否存在。只有null
或undefined
会使测试失败。这意味着空字符串”
、零0
、甚至false
都是有效值,因为它们是设置值
然而,正如@Tim所指出的,生存的首选标准测试如下:
if (typeof obj !== "undefined" && obj !== null)
我更喜欢对象的类型“未定义”&&obj!==空我认为你的第一个几乎一样好,而你的第二个完全相同,但如果你将它与不存在伟大答案和注释的数组索引一起使用,我的不会给出错误,这正是我需要知道的。谢谢大家!