[問題] 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