Javascript:!变量和变量之间的详细差异== false?

时间:2015-06-16 08:44:17

标签: javascript algorithm

我不小心得到undefined == trueundefined == false两个都返回false。

!undefined返回true。

这是个问题:

!someVariablesomeVariable == false之间的算法区别是什么?

如果我想再解释一下,请在浏览器的控制台中输入undefined == false ? 't' : 'f',然后返回'f'(如上所述)。

但如果您输入!undefined ? 't' : 'f',则会返回't'

显然他们之间存在差异,以及他们如何工作。

更新 我在撰写!someVarsomeVar == false后询问javascript的用途。我想第二个将它们转换成可比值并比较它们?关于第一个是什么?

3 个答案:

答案 0 :(得分:2)

来自ECMAScript specification

  

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会比较ab的实际值。

例如。:: 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或其他任何变量上的详细差异。