iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 9
0
自我挑戰組

如何成為工程師? (從工地到前端工程師)系列 第 9

[Day 9] Javascript, wtf? 花的發

背景

Javascript 是在1995年 布蘭登·艾克發明的, 當時因為時間很趕.老闆需要一個語言在遊覽器實現一些小功能, 譬如在網頁可以有雪在飄. 所以javascript 在10天就完成了. 但是當時可能因為開發太快也留下很多語言本身的問題跟雷.

經過了這麼多年, Javascript也成為全世界最大的語言. 當時的一些bug, 也留到現在. ECMA(決定javascript規則的團體)也決定不會去修改語言.

因為現在網頁有太多依賴這些bug, 如果改了很多網站就壞掉了跟多. 其實也還好, 只要注意一些問題就好了. 那我來分享一些我碰到的雷.

Javascript 的雷

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....

let's dance

參考文件


上一篇
[Day 8] JS 物件導向, Object Oriented Programming, wtf?
下一篇
[Day 10] React, 我一個前端框架
系列文
如何成為工程師? (從工地到前端工程師)30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言