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

看板Ajax作者 (天真可愛CQD)時間11年前 (2014/06/04 13:19), 11年前編輯推噓3(303)
留言6則, 4人參與, 最新討論串2/3 (看更多)
: 在良葛格型態轉換章節最後有提到一句 : "在弱型別語言中,型態轉換往往自動發生,最好還是實際測試了解結果, : 避免不必要的型態轉換而發生誤判或錯誤的運算結果。" : 意思難道是說 "我根本不知道在型態轉換到底是怎麼轉的,反正測測看就知道了" ? 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 跑出來害我找半天啊混蛋... -- 你們這些只會躲在家裡發些缺乏社會知識討論串的傢伙 --護士魔女蔻睦姬 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 106.187.99.209 ※ 文章網址: http://www.ptt.cc/bbs/Ajax/M.1401859165.A.B56.html ※ 編輯: GALINE (106.187.99.209), 06/04/2014 13:21:45

06/04 14:14, , 1F
http://ppt.cc/vmyf 不小心把funky看成fucking
06/04 14:14, 1F

06/04 18:00, , 2F
最近換工作也是從Java轉PHP 有點不太適應 = ="
06/04 18:00, 2F

06/04 20:36, , 3F
.length 時,length 會先被當成 constant 判斷,這時通常
06/04 20:36, 3F

06/04 20:37, , 4F
會先被判斷成未定義,如果 display error 有開就會有錯誤
06/04 20:37, 4F

06/04 20:37, , 5F
不過這個警告是 Notice 不是 warning 以上的等級就是了
06/04 20:37, 5F

06/05 00:13, , 6F
對,notice 關掉了,有用到會亂噴 notice 的第三方 lib...
06/05 00:13, 6F
文章代碼(AID): #1JZgnTjM (Ajax)
討論串 (同標題文章)
文章代碼(AID): #1JZgnTjM (Ajax)