> For the complete documentation index, see [llms.txt](https://mistborn.gitbook.io/til-coding/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://mistborn.gitbook.io/til-coding/javascript/untitled.md).

# An Introduction to JavaScript

## What is JavaScript?

JavaScript 讓網頁動起來的語言\
\
不同瀏覽器有不同的 "引擎"\
1\. Chrome and Opera -  [V8](https://en.wikipedia.org/wiki/V8_\(JavaScript_engine\)) \
2\. Firefox -  [SpiderMonkey](https://en.wikipedia.org/wiki/SpiderMonkey) \
3\. Safari - [WebKit](https://en.wikipedia.org/wiki/WebKit#JavaScriptCore)\
\
引擎如何運作 ?\
JavaScript > machine language > run<br>

## What can in-browser JavaScript do?

* 新增、修改網頁內容 ( HTML )、改變外觀 ( CSS )
* 對使用者動作做出反應 (滑鼠移動、點擊 )
* 對伺服器發出請求，下載或上傳檔案
* 存取 cookie ( 紀錄使用者資訊的資料 )
* 存取用戶端資料 ( local storage )

## What CAN’T in-browser JavaScript do?

* 不能存取使用者硬碟的資料，除非使用者同意 ( 下載 / 上傳檔案 )
* 不同網站之間無法互相存取資料 ( Same Origin Policy )
* 不同網站之間可以提取資料，但需要額外設定新的參數 ( HTTP header )
* 在非瀏覽器的環境下或瀏覽器安裝插件(使用者同意下)，JavaScript 沒有以上的限制。

## Languages “over” JavaScript

JavaScript 不能滿足所有人，許多相關的新語言誕生，像是 CoffeeScript、TypeScript、Dart 等等，\
這些語言在執行前會被轉譯成 JavaScript。<br>
