js的function和php的function,javascript - function(){} == true || function(){} != true;function(){}不为tru...

小皮2017-04-10 17:54:34

值等于是比较值的。

所以浏览器会先将运算符两边的变量/表达式的值先算出来,并转换成同类型(基本类型)的形式进行比较。

(function(){})表达式的值通过valueOf()/toString()来计算,

你可以看一下这两个返回的值是什么,并且看一下返回值可否转换成为true。

抱歉打脸,今天有的别的事情。

-----------------update-----------------

更新:

@Starch

像这种比较运算符或者一些基本概念问题,我有一个推荐:

JavaScript 5

http://ecma-international.org...

JavaScript 6

http://ecma-international.org...

你可以到对应版本的JavaScript中寻找你需要的解释。

回到本题,先来看一下 == 运算符它的原理吧:

23e9ac9e36d66f312c212a77c6a04817.png

这个就是浏览器在遇到 == 时采取的操作步骤,我来翻译一下是什么意思:

==运算符是这样被计算的:

1 让左引用(lref: left reference)成为正在计算的表达式左侧的值。

2 将左值(lval:left value)赋值为 GetValue(lval)。

3 让右引用(rref: right reference)成为正在计算的表达式右侧的值。

4 将右值(rval:left value)赋值为 GetValue(rval)。

5 返回执行rval == lval 抽象值比较的结果(参见 11.9.3)

那么在11.9.3,又是怎么规定abstract equality comparison 的呢?

ed441e6892bf57fd2933dd7f78608266.png

这就比较长了,但是也很详细。这就不一条一条的解释了。

直接看第七条就好了:

If Type(y) is Boolean, return the result of the comparison x == ToNumber(y).

那么结果就变成了:

function() {} == 1

然后再看第9条:

If Type(x) is Object and Type(y) is either String or Number,

return the result of the comparison ToPrimitive(x) == y.

最后参考我一开始写的就好了。

f0fc464e46575ac774f33a47781e8916.png

答案就是false。回复0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值