Javascript 是在1995年 布蘭登·艾克發明的, 當時因為時間很趕.老闆需要一個語言在遊覽器實現一些小功能, 譬如在網頁可以有雪在飄. 所以javascript 在10天就完成了. 但是當時可能因為開發太快也留下很多語言本身的問題跟雷.
經過了這麼多年, Javascript也成為全世界最大的語言. 當時的一些bug, 也留到現在. ECMA(決定javascript規則的團體)也決定不會去修改語言.
因為現在網頁有太多依賴這些bug, 如果改了很多網站就壞掉了跟多. 其實也還好, 只要注意一些問題就好了. 那我來分享一些我碰到的雷.
1. Float 數字, Javascript 不能處理很大或很小的數字. 這好像是因為javascript 使用如果有處理很大的書字要注意. 想要真的理解背後的原理可以 Google IEEE 754 , floating-point. 我程度不夠.
```js
999999999999999 // -> 999999999999999
9999999999999999 // -> 10000000000000000
10000000000000000 // -> 10000000000000000
10000000000000000 + 1 // -> 10000000000000000
10000000000000000 + 1.1 // -> 10000000000000002
```
```js
0.1 + 0.2 // -> 0.30000000000000004
(0.1 + 0.2) === 0.3 // -> false
```
2. Weak Type + String concatentation. 有時候後端API 傳給你的數字有時候是 Number, 有時候是string,就很容易碰到這個bug. 請看以下範例
console.log('5' + 3); // '53'
console.log('5' - 3); // 2
基本上只要記得轉type就好了
3. Auto Semicolon: javascript 會每一行自動加入分號. 所以有時候會有問題
function test() {
return
2 + 2;
}
console.log(test()); // Uncaught SyntaxError: Unexpected token :
如何避免, 不要沒事亂斷行跟要有寫 分號的習慣. (我自己是沒有在寫分號的)
其實程式語言跟女朋友一樣, 大家都是有缺失的. 我們要接受跟包容它. 因為他們的優點大於缺點. 好像有一點脫軌了, 回歸正題.
但是說真的, 每一個語言不管是C, PHP, Java, Ruby都有自己很奇怪的點. 但是我們只要我們知道怎麼避免它的雷, 應該就還好. 我要用兩位名人的名言來為這篇文章做個ending.
There are only two kinds of languages: the ones people complain about and the ones nobody uses. -Bjarne Stroustrup (某位很厲害的programmer)
接受我們不能改變的,改變我們能改變的。 -某人
Let's Dance....