Re: [問題] js型態轉換問題

作者: GALINE (天真可愛CQD)   2014-06-04 13:19:21
: 在良葛格型態轉換章節最後有提到一句
: "在弱型別語言中,型態轉換往往自動發生,最好還是實際測試了解結果,
: 避免不必要的型態轉換而發生誤判或錯誤的運算結果。"
: 意思難道是說 "我根本不知道在型態轉換到底是怎麼轉的,反正測測看就知道了" ?
http://dorey.github.io/JavaScript-Equality-Table/unified/
這裡很清楚的列出 javascript == 跟 === 的對應
其實有點複雜,我相信大部分人不會想要用腦袋去記這個東西
所以真的有需要的話要嘛查表,要嘛寫 code 實驗
這是有規範,但是沒什麼規律的東西...
當然能夠記起來最好,這可以少踩很多地雷
: 但是在型態轉換中 java 語言可以清晰清楚地寫出轉換規則及邏輯
如果你先寫習慣了 Java 這種強形態的語言,來碰弱形態的語言應該都會有這種感覺
根本的原因是 Java 不喜歡幫你自動作型別轉換,但是 Javascript 喜歡自動幫你轉換
所以 Java 不同類別之間的比較一定是不一樣,Javacript 就要看他怎麼轉...
個人覺得比起搞清楚 javascript 怎麼自動轉換,減少 javascript 自動轉換的機會
且儘量用 === 會是更安全的做法...
====
講到自動轉型我就想到 PHP....
剛從 Java 跳槽 PHP 的時候要取陣列長度下意識的寫了這樣的 Code
$ary = array(1, 2, 3); // [1,2,3], 長度是 3
$length = $ary.length; // 這行是錯的,正確做法是 count($ary)
// 「.」是 PHP 的字串串接,加上找不到
// 「length」變數定義的時候會自動轉成字串"length"
// 回傳值是字串 "Arraylength"
if ($length>2) {
// 永遠跑不進來,字串被 cast 成整數 0,所以一定小於 2
// 拿去做四則運算程式也不會有錯誤訊息
}
這 code 以 PHP 明明寫錯的離譜,但是沒有任何 warning 跑出來害我找半天啊混蛋...
作者: cyclone350 (老子我最神)   2014-06-04 14:14:00
http://ppt.cc/vmyf 不小心把funky看成fucking
作者: duck10704 (duck)   2014-06-04 18:00:00
最近換工作也是從Java轉PHP 有點不太適應 = ="
作者: kerash (.TW)   2014-06-04 20:36:00
.length 時,length 會先被當成 constant 判斷,這時通常會先被判斷成未定義,如果 display error 有開就會有錯誤不過這個警告是 Notice 不是 warning 以上的等級就是了
作者: GALINE (天真可愛CQD)   2014-06-05 00:13:00
對,notice 關掉了,有用到會亂噴 notice 的第三方 lib...

Links booklink

Contact Us: admin [ a t ] ucptt.com