网络编程
位置:首页>> 网络编程>> JavaScript>> 类型转换的小乐趣

类型转换的小乐趣

作者:怿飞 来源:怿飞blog 发布时间:2010-11-30 21:37:00 

标签:类型,转换

玉伯 的文章 《一道大题目,嘿嘿》 中有这样一段代码:

[] == ![]

也许很多同学迷惑:咦,这个如何转换呢?

首先,我们了解下逻辑 NOT(!)运算与等号(==)运算的一些基本规则:

  1. 逻辑 NOT 运算中,如果运算数是对象,返回 fasle;

  2. 等号运算中,如果一个运算数是 Boolean 值,在运算前,会将其转换成数字:false -> 0,true -> 1;

  3. 等号运算中,如果一个运算数是对象,另一个是数字,在运算前,会将对象转换成数字。

2010年11月2日补充:对象不能直接转换成数字型,可以将其转换成字符型,再将字符型转换成数字型。

根据上面的一些规则,我们再来看看原来的表达式如何演变:

Step01: [] == ![] // 由于[]是对象,则 ![] 返回fasle,演变为 Step02。
Step02: [] == fasle // 由于 fasle 是 Boolean 值,则转换成数字 0,演变为 Step03。
Step03: [] == 0 // 由于 0是数字,[]是对象,[] 转换成数字 Number([]) -> 0,[] 转换成字符型 [].toString() -> "","" 再转换成数字型 -> 0 ,演变为 Step04。
Step04: 0 == 0 // 返回最终结果:true

思考题:

{} == ! {}; //返回什么值?
[] == [] //返回什么值?

PS:如果你对玉伯的题目很感兴趣,推荐阅读:

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com