使用比较是否安全;如果(foo)“;而不是",;如果(foo==null)";关于JavaScript中的非原语类型?

使用比较是否安全;如果(foo)“;而不是",;如果(foo==null)";关于JavaScript中的非原语类型?,javascript,Javascript,假设foo声明为非基本类型变量,但可能未初始化,是否有可能用于非基本对象比较,如下所示: if (foo) { ... } 还是像这样做更长的时间更好 // not using "===" here on purpose, because the variable is non-primitive, so the value can't be 0 or empty string if (foo != null) { ... } 如果它不相等,那为什么。你说的“非基本类型”是指对象?是的,所有

假设foo声明为非基本类型变量,但可能未初始化,是否有可能用于非基本对象比较,如下所示:

if (foo) {
...
}
还是像这样做更长的时间更好

// not using "===" here on purpose, because the variable is non-primitive, so the value can't be 0 or empty string
if (foo != null) {
...
}
如果它不相等,那为什么。

你说的“非基本类型”是指对象?是的,所有对象都是真实的,因此通过
if(foo)
将它们与
foo
变量可能包含的任何虚假值区分开来就足够了,例如原始值
未定义
null


但是,请注意,在JavaScript中不能“将变量声明为非基元类型”,因此必须通过其他方式确保它从不具有真实的基元值。如果您可以确保它始终包含一个对象,那么您根本不需要条件。

根据我的经验,我发现在布尔表达式中精确指定所需内容是最安全的,而且永远不依赖类型强制

如果不希望它等于0或null或空字符串,则:

if (foo !== 0 && foo !== '' && foo !== null) {
  /* note that if foo = undefined, this will still get executed. */
}
一些库(如
下划线
)或框架(如
角度
)具有方便的函数,可以实现类似的功能,因此您可以执行以下操作:

if (_.isObject(foo) === true) {
  /* execute this */
}

假设
foo
是一个对象,
if(foo)
将传递给任何对象。Man,
null
是原始的。在你的假设下,测试总是会通过的。请检查。是的,是的,但我说的是变量,而不是空值。如果变量没有初始化,我需要找出它,因此我将其与null进行比较。这正好相反,我猜您的意思是If(foo!=null)