iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 4
0
Modern Web

跟著 YDKJS 作者 Kyle Simpson 打造全新 JavaScript Mindset系列 第 4

[day03] 初步介紹 JavaScript 以及 Overview

  • 分享至 

  • xImage
  •  

Understanding your code

作為一個 JavaScript 開發人員,不能不去理解程式碼的工作原理,只是期望或猜測它可以運行。

如果要避免問題(bug),唯一的辦法就是了解 JavaScript 在做甚麼。
在你腦補和真實code裡面發現分歧(divergence),代表有 bug 要發生了!

註:這個部分有點像 保哥很久以前寫過的文章 我要成為前端工程師!給 JavaScript 新手的建議與學習資源整理

很多寫 JS 的人都是「腦補」寫 code,從來沒有理解為什麼 code 可以執行,
所以一堆奇怪的bug。
對新手而言的「奇怪」,因為 JS 隨便寫都可以 run ,比較少會出現其他語言理解有錯,
不能編譯死給你看的狀況,所以因此出現神奇 bug 也很常見。

如何才算是真正理解 JavaScript?

這邊先暫且不論理解整個 JavaScript,那會是一個很長久的學習,也是這個系列的目的。

但是,如果只是想要深入理解 ++ 運算子
其實就是把 spec 演算法寫成 code,
再比對看看自己實作的結果是不是原生 JS 結果一樣就好。

  • ToNumber :後面會寫到,這是一個型別轉換的 抽象運算子(abstract operations)
    讀文件的時候很常看到這些 抽象運算子

依照 spec 寫成 code =>

這邊可以知道, ++ 運算子 一定會先執行「型別轉換」成數字,
然後才會做 + 運算子 的 +1 。
所以才會產生 用 x++ 和 x = x+1 不一樣的問題。

*註:這邊 + 運算子 其實也有小雷,因為 + 運算子 會 overloading ,後面會提到 spec


course-overview

Kyle Simpson 認為 JavaScript 有基礎三個核心支柱。

  1. Types

沒有人喜歡 Types,尤其是像 JavaScript 這樣的動態類型語言。

甚至有些人 (比如 Doug Crockford) 直接告訴你說不要管、不要用型別,但 Kyle Simpson 認為這樣是不負責的,你必須了解你使用的工具。

當然,你可以總是用 嚴格相等 (===) 來避免型別問題,但對型別不了解就是 bug 不知不覺產生的原因之一。

  • Abstract operations 是閱讀 spec 的基本,也是 JS DNA 之一,當然也有人認為是 JS 最容易混淆的部分。
  • Coercion(有人翻作型別轉換、強制轉型別,原文 Coercion 避免中文誤導理解的問題)
  1. Scope
    Lexical scopes(語彙範疇)、closure、modular pattern (模組)。
    最多人寫文章的部分,或許大家都很熟悉了。
    Kyle Simpson 用不一樣的方式讓聽眾重新理解,其實書上面也有寫(對話的方式),但是又有些改良。

  2. Objects
    這邊的 Objects Oriented 不是物件導向(class oriented)的那個 OOP,是指 how JavaScript's objects system works

這邊特別強調 JS 的系統和 C++ , Java 不一樣,但故意做很像,導致大家理解都很怪。
Kyle Simpson 認為,基於「原型鍊」的 JS 能力更強,不應該被 物件導向(class oriented) 所侷限。

JS 可以用「語法糖」做出很像真的物件導向(class oriented) 的系統,但是 C++ , Java 做不出 JS 的原型鍊系統,所以從這個角度看 JS 原型鍊能力更強。

Overview :

Kyle Simpson 一直不斷強調,你一定要「學」,但很多東西或許學會之後可以「不要用」。
其實 Kyle Simpson 有很多想法,應該都和現在主流不一樣,幾個我認為比較偏激的想法 :

  1. 他覺得用 嚴格相等 === 代表你對 JS 理解不足,尤其是不理解 Coercion。
  2. 他認為用 var 就好,不應該過度使用 let / const,並沒有意義(除非你很懂 let 的 block scope 作用區間)。
  3. 不應該用 arrow function,寫越多 code 越爛 (其實是講匿名函式的問題)。

其實寫慣 嚴格相等 === ,寫慣 ES6 (let / const ,arrow function),很想直接跳過去不讀或快轉。
但是,如同系列標題說的: 打造全新 JavaScript Mindset ,你可以不跟隨 Kyle Simpson 的意見,但是不要抱著之前寫 code 的 Mindset 來理解 Kyle Simpson 的 JS 書籍 ,或許可以放下過去的成見,試試用不同的角度理解 JS。

You absolutely should learn this system.
But you might not need some of it.


上一篇
[day02] Kyle Simpson :「 Code is for Humans 」(下)
下一篇
[day04] YDKJS (Type) : Value 才有型別,變數沒有
系列文
跟著 YDKJS 作者 Kyle Simpson 打造全新 JavaScript Mindset31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
huli
iT邦新手 2 級 ‧ 2019-09-19 23:56:46

我一直有在追 Kyle Simpson 的推特,之前有看到嚴格相等跟 arrow function 那兩個說法,覺得很猛XD

猛的點在於直接跟主流意見不同並且有自己的論點,雖然論點本身我沒有很認同就是了XD

Ashe Li iT邦新手 5 級 ‧ 2019-09-20 00:20:41 檢舉

我自己卡很久,因為他講的時候都是說「之後會提到」,話說一半真的很靠杯

這邊是我自己的文章,我就先直接爆雷了 :P
我是蠻「認同論點」,但是我「一定不會」做,太白痴了 XDD

他自己也有說:你一定要「學」,但很多東西或許學會之後可以「不要用」。

我要留言

立即登入留言