[问题] js型态转换问题

楼主: cyclone350 (老子我最神)   2014-06-04 12:28:40
大家好,这几天再看一些 javascript 的东西
虽然我页面的javascript都用的顺顺的...
但是有些观念真的是超级难以理解...
举一个例子...
在型态转换这方面...
> 2 + 3 + '4'
54
可以理解成 2 + 3 = 5, 5 + '4' 时 5会被转成 String '5'
这没问题
可以想成 number + String 会被转成 String
而 true 跟 false 的 boolean 转换规则 true 代表 1,false 代表 0
所以会有以下例子
>false == 0
true
>5==true
false
这也没问题
另外还有一个规则就是"除了0、NaN、''、null、undefinied是假的(false)之外,其它
都是真的(true)。"
这也可以想像...
不过细节部分就很模糊了... 例如
>false == 0
true
他到底是把 false 转成 0,还是把 0 转成 false ?
是否跟位置有关?
以下就是一个 WTF
> typeof null
'object'
> 0==null
false
>1+null
1
经过书本或网络上有看过 'object' 做运算或比较会先呼叫 valueof 方法,若没有
valueof方法则呼叫 toString 方法
> 0==null
false
所以可能代表 null 不能转成 0 (透过 valueof 或 toString)
可是 1+null = 1
null 又被转成 0 了........????????
以下更 WTF
>null == undefined
true
>1+null
1
>1+undefined
NaN
到底是怎么转的....
而且
> typeof undefined
undefined
>typeof null
object
那 null == undefined 到底是转成什么鬼东西?
在良葛格型态转换章节最后有提到一句
"在弱型别语言中,型态转换往往自动发生,最好还是实际测试了解结果,
避免不必要的型态转换而发生误判或错误的运算结果。"
意思难道是说 "我根本不知道在型态转换到底是怎么转的,反正测测看就知道了" ?
并不是要呛良葛格的意思...
但是在型态转换中 java 语言可以清晰清楚地写出转换规则及逻辑
而 javascript 却是说 测测看结果 ?
更怪的是这个
> typeof null;
object
> null instanceof Object;
false
我在看 javascript 书时也常常出现 "这很怪", "这没规范", "这样写在某些地方可以执
行"
而且还把js称作 "bug丛生的javascript" (by 驾驭javascript的68个具体作法)
虽然我觉得我根本不了解js,不过我在web页面仍然可以写出可以跑得 js 或 jquery
我仍然可以套用 jquery UI , 写 Ajax, 使用 js 做基本客户端互动接口。
对各位而言,javascript 是一个怎么样的语言?
不知道是我根本没搞懂js,还是js本身就是一个不想让人懂的语言?
型态转换有没有一个具体的逻辑可以来讲解?
作者: GoalBased (Artificail Intelligence)   2014-06-04 12:34:00
不要钻牛角尖= =JS当然也会有一个转换的标准方式阿 只是没关心罢了
作者: mmis1000 (秋月恋枫)   2014-06-04 12:40:00
ecma 规范里都有写啊
作者: ck574b027 (荒围!定厝!贼!妹!)   2014-06-04 17:06:00
NaN != NaN 才叫做 WTF
作者: mmis1000 (秋月恋枫)   2014-06-04 17:20:00
不是一个数字 不等于 不是一个数字,很奇怪吗?
作者: turtleknight (turtle)   2014-06-04 18:04:00
写coffeescript阿XD
作者: carylorrk (carylorrk)   2014-06-05 15:10:00
JavaScript 是 Web 时代的组语...

Links booklink

Contact Us: admin [ a t ] ucptt.com