使用比较是否安全;如果(foo)“;而不是",;如果(foo==null)";关于JavaScript中的非原语类型?
假设foo声明为非基本类型变量,但可能未初始化,是否有可能用于非基本对象比较,如下所示:使用比较是否安全;如果(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) { ... } 如果它不相等,那为什么。你说的“非基本类型”是指对象?是的,所有
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)