Javascript 两个操作数之间的相等比较,其中一个操作数可能未定义

Javascript 两个操作数之间的相等比较,其中一个操作数可能未定义,javascript,Javascript,上面是检查操作数1和操作数2之间是否相等的if语句,其中操作数1在某些情况下可能是未定义的。我想知道操作数1的类型是否为“未定义”是不必要的 因为您使用的是==运算符而不是==运算符,所以只有当操作数2永远不会为空时,才不需要使用该运算符 但是您可以将if语句更改为使用==运算符,只有操作数2真正等于操作数1时,该运算符才会传递,这意味着操作数2也是未定义的 您可以在此处阅读更多信息: A显示了这里写的内容 在数据库世界中,空(或未定义)什么都不是,这意味着您无法将其与任何东西进行比较 SQ

上面是检查操作数1和操作数2之间是否相等的
if
语句,其中操作数1在某些情况下可能是
未定义的
。我想知道操作数1的
类型是否为“未定义”
是不必要的

因为您使用的是
==
运算符而不是
==
运算符,所以只有当
操作数2
永远不会为
空时,才不需要使用该运算符

但是您可以将
if语句更改为使用
==
运算符,只有
操作数2
真正等于
操作数1
时,该运算符才会传递,这意味着
操作数2
也是
未定义的

您可以在此处阅读更多信息:

A显示了这里写的内容


数据库
世界中,
(或
未定义
)什么都不是,这意味着您无法将其与任何东西进行比较

SQL示例:

if (typeof operand1 != "undefined" && operand1 == operand2) {
}
是一个错误,因为没有任何东西等于null,null不等于任何东西,它只是不存在

javascript
中不是这样的
,您可以将事物与
null
未定义的
进行比较,但是您必须小心使用
类型错误
,如下所示:

SELECT *
FROM   table_name t
Where  t.operand1 = null

在检查两个变量的值是否相等之前,我要说的唯一一次是,当其中一个(
operan1
)可能未定义时,有必要进行
typeof
检查,以防止出现
ReferenceError


.

@gdoron我没有说
未定义
,我说的是未定义,因为在中,作用域链中没有名为
操作数1
的变量。谢谢您的回答。你提出了一个很好的观点。我只希望我能接受不止一个答案。我想你的小提琴有错。即使
typeof operan1!=“未定义”
存在。@ahmoo小提琴是用来演示
引用错误的。尝试取消注释我注释的位。您的最后一个示例不正确。这将是
TypeError
,就像
未定义的
一样,它有属性,也不能有属性。@gdoron您能详细解释一下“只有当操作数2永远不会是错误值时,它才是不必要的”的意思吗?假设操作数2可以是假值,我想看一个例子,其中'typeof operan1!=“未定义”是必需的。Thx@ahmoo. 答案有点错误,我改正了。无论如何,你可以在我添加到答案中的演示中看到一个例子。现在清楚了吗?@gdoron-是的,这个例子和你的进一步解释现在已经清楚了。谢谢非常感谢。
var x;
x.foo; // TypeError!