JavaScript


JavaScript,一種中高階程式語言,通過解釋執行,是一種物件導向(基於原型 prototype-based programming)的直譯語言,支援物件導向編程,指令式編程,以及函數語言程式設計。

JavaScript 支援許多 C 語言的結構化編程語法,例如 if 條件語句、while 迴圈、switch 語句、do-while 迴圈 等。但作用域是一個例外:JavaScript 只支援使用 var 關鍵字來定義變數的函式作用域。ECMAScript 加入了 let 關鍵字來支援塊級作用域,意味著 JavaScript 現在既支援函式作用域又支援塊級作用域。正如 C語言 一樣,JavaScript 中的運算式和語句是不同的。與 C 語言不同的是 JavaScript 支援自動在語句末添加分號。

JavaScript 是一種腳本語言,其原始碼在發往用戶端執行之前不需要經過編譯,而是將文字格式的字元代碼發送給瀏覽器由瀏覽器解釋執行。直譯語言的弱點是安全性較差,而且在 JavaScript 中,如果一條執行不了,那麼後續的程式碼也無法執行。其解決辦法是使用 try{} catch(){} 。

維基百科:https://en.wikipedia.org/wiki/JavaScript

線上教學:
http://www.runoob.com/js/js-tutorial.html
http://www.kaiching.org/2012/10/javascript-tutorial.html


JavaScript 動態創建 Form 或在既有表單增加項目:http://www.jianshu.com/p/047692d10316

Javascript 常用的陣列(Array)操作大全:http://sweeteason.pixnet.net/blog/post/41263148

淺談js多維陣列和hash陣列定義和使用、js陣列操作常用方法:
https://codertw.com/%E5%89%8D%E7%AB%AF%E9%96%8B%E7%99%BC/262733/

只使用 JavaScript 的 2D 打磚塊遊戲:https://developer.mozilla.org/zh-TW/docs/Games/Tutorials/2D_Breakout_game_pure_JavaScript



為什麼 Node.js 不適合大型和商業專案https://yami.io/you-might-not-need-nodejs/

Node.js 是一個比較奇特的存在。它本身就是 Javascript,但是因為採用了 Chrome 的 V8 engine 的關係,使得 Javascript 可以跑在伺服器中成為後端語言。 Node.js 的特色就是極快的執行速度,它具有無阻塞 (non-blocking) 和事件驅動 (event-driven) 等的特色,適合用在高併發的服務上,例如萬人即時聊天系統等等。且同是 Javascript 的關係,前後端程式碼也較容易整合。另外,Node.js 本身也是伺服器,不必依賴於 Apache 或 NginX 上面。

Node.js 的缺點是它的 Async 異步架構容易讓新手混淆,不知如何控制程式流程。另外,Node.js 也不適合用在需要高密集 CPU 運算的場合,所以一般來說很少將 Node.js 拿來製作動態網站或商務系統等,大多用來製作聊天功能或手機 app 的底層應用,或者一個網站中對併發需求特別高的功能抽出來給 Node.js 做。

『Node.js 之父 Ryan 目前在 Google Brain 一手建立 Node.js 世界,但是在訪談中,竟然推薦大家使用 Go 語言,而不要使用 Node.js 當作後端 (假如您想要建構一個龐大的系統)。內文中提到 Node.js Callback 的缺陷在 Node.js 出現了 async 了有效了解決大量使用 Callback。Ryan 也非常驚訝地說,他沒想到在 Node.js Client 端竟然如此熱門。要建立小量的開發系統,他非常推薦使用 Node.js,但是如果您要建立龐大的分散式 DNS 系統,我覺得不會推薦你使用 Node。』

說到 Client Side 工具,Node.js 的確在 Web 領域佔有一席之地,大量的 Node.js 工具 (像是 Webpack, Gulp, Imagemin 等圖片壓縮工具) 幫助建置 Web 網站。

詳細原文可以參考: https://www.mappingthejourney.com/single-post/2017/08/31/episode-8-interview-with-ryan-dahl-creator-of-nodejs/



以 Javascript 實作星級評分 (用 CSS 寫星星形狀) (附完整解說):http://www.kittywei.com/native-javascript-to-achieve-star-rating-2/

倒數計時:http://design2u.me/blog/122/phpjavascriptcss-countdown-to-the-example



JavaScript取得畫面大小

網頁可見區域寬:document.body.clientWidth
網頁可見區域高:document.body.clientHeight
網頁可見區域寬:document.body.offsetWidth(包括邊線和捲軸的寬)
網頁可見區域高:document.body.offsetHeight(包括邊線的寬)
網頁正文全文寬:document.body.scrollWidth
網頁正文全文高:document.body.scrollHeight
網頁被卷去的高(ff):document.body.scrollTop
網頁被卷去的高(ie):document.documentElement.scrollTop
網頁被卷去的左:document.body.scrollLeft
網頁正文部分上:window.screenTop
網頁正文部分左:window.screenLeft
螢幕解析度的高:window.screen.height
螢幕解析度的寬:window.screen.width
螢幕可用工作區高度:window.screen.availHeight
螢幕可用工作區寬度:window.screen.availWidth
你的螢幕設置是 window.screen.colorDepth(位彩色)
你的螢幕設置 window.screen.deviceXDPI(像素/英寸)



函數的多種寫法與應用限制
http://sweeteason.pixnet.net/blog/post/40371736

Javascript 的函數有三種寫法,使用上會有些差異。
其中有一個非常重要的特性,在 javascript 中不論函數本身在哪裡,都會被提升到最頂端。
而具名 或 匿名函數只有變數宣告會被提升,函數的定義則不會被提升。

函數宣告式
function add(a,b) { }

具名函數 or 具名表示式
var addfun = function add(a,b) { }

匿名函數 or 函數的表示式
var addfun = function (a,b) { }






程式語言編年史

程式語言編年史原文 下面這張圖片描繪了整個程式語言的歷史。包括各種程式語言的發明人、程式語言的特點和適用領域、被什麼網站或公司使用等 (檢視 完整高清圖 )。 之所以會有那麼多不同的程式語言是因為設計程式語言的初衷不同、對語言學習曲線的追求不同、不同程式之間的執行成本差異...