我不小心得到undefined == true
和undefined == false
两个都返回false。
但!undefined
返回true。
这是个问题:
!someVariable
和someVariable == false
之间的算法区别是什么?
如果我想再解释一下,请在浏览器的控制台中输入undefined == false ? 't' : 'f'
,然后返回'f'
(如上所述)。
但如果您输入!undefined ? 't' : 'f'
,则会返回't'
。
显然他们之间存在差异,以及他们如何工作。
更新
我在撰写!someVar
或someVar == false
后询问javascript的用途。我想第二个将它们转换成可比值并比较它们?关于第一个是什么?
答案 0 :(得分:2)
11.9.1等于运算符(==)
生产EqualityExpression:EqualityExpression == RelationalExpression的计算方法如下:
让lref成为评估EqualityExpression的结果。让lval成为 的GetValue(LREF)。让rref成为评估的结果 RelationalExpression。设rval为GetValue(rref)。返回结果 执行抽象相等比较rval == lval。 (见11.9.3)。
11.4.9逻辑非运算符(!)
制作UnaryExpression :! UnaryExpression评估为 如下:
让expr成为评估UnaryExpression的结果。让oldValue成为 ToBoolean(的GetValue(表达式))。如果oldValue为true,则返回false。返回 真。
你正在看的是两个表达方式:
!someVariable
将使用ToBoolean()
并反转结果。
someVariable == false
将通过相等比较评估为真或假。
另请注意,==
和===
不是一回事。
答案 1 :(得分:2)
undefined
不是布尔值,因此当您使用!
运算符时,您的值将首先转换为布尔值。
但是==
运算符只是检查你的值。
所以如果你想从undefined == false
获得真实,你应该像Boolean(undefined) == false ? 't' : 'f'
或像!!undefined == false
==
会将两边转换为Number(undefined) == Number(false)
之类的数字,因为Number(undefined)
是NaN且Number(false)
为0,结果为false。
就像'true' == true
是假的,但Boolean('true') == true
是真的
答案 2 :(得分:0)
'!'操作员首先简单地反转在它前面发生的变量/结果的值,然后检查它
但a==b
会比较a
和b
的实际值。
例如。:: Object p=null;
if(!(p==null))System.out.println("hi");
在上述情况下,p==null
将返回true,但!
将反转结果并检查该结果的真实性,即如果p
不为空,则打印"喜&#34 ;.
我们知道::
inverse of undefined is undefined
和 undefined is not equal to any value among true or false
因为true
是二进制1而false
是二进制0但undefined
是垃圾值而null
也是一些垃圾价值
因此,在使用==
运算符结果进行比较时,将始终为false ,但!undefined
本身为undefined
,因此结果为true
。
希望,这将有助于您了解!
和==
在undefined
或其他任何变量上的详细差异。