javascript到了今天,已經不再是我10多年前所認識的小指令碼了。最近我也開始用javascript編寫複雜的應用,所以覺得有必要將自己的javascript知識梳理一下。同大家一起分享javascript給我們帶來的福利。
索引
工具
Online Javascript interpreter[線上javascript解析器]
可以線上執行javascript程式碼。這篇文章中的所有程式碼都在裡面執行過。用它來做javascript實驗,它是不錯的選擇。
執行地址:http://math.chapman.edu/~jipsen/js/
Html5 線上執行
JQuery線上執行
Closure Compiler
這是google提供的一款用於編譯javascript的工具。所謂編譯,是將一般可讀的javascript程式碼編譯成緊湊的,短小的javascript程式碼。其效果類似於jquery-x.min.js。
下載地址:https://developers.google.com/closure/compiler/
執行命令:java -jar compiler.jar --js=..\carports\assets\www\js\dataProxy.js --js_output_file=..\carports\assets\www\js\deploy.js
注意,檔案路徑中不能包含空格。
參見文件:https://developers.google.com/speed/articles/compressing-javascript
Javascript Performance
這是一款評估javascript應用效能的工具,它整合在google chrome的開發者工具中。在大型的javascript應用中,非常有必要對效能進行評估和跟蹤。
使用方法介紹:https://developers.google.com/chrome-developer-tools/docs/cpu-profiling
庫
JQuery
如果要跨域呼叫,那麼要使用jsonp
個人推薦jsonp的相關文章:http://www.ibm.com/developerworks/cn/web/wa-aj-jsonp1/
Angular Js
官方網址:http://angularjs.org
InfoBox
功能:在google地圖上實現自定義顯示層,是google地圖的infoWindow的加強版。
地址:http://google-maps-utility-library-v3.googlecode.com/svn/tags/infobox/
Json2Html
功能:將json物件轉換成html dom物件
地址:https://github.com/moappi/json2html
JQuery
一個應用非常廣泛的Javascript庫
學習外掛開發:http://learn.jquery.com/plugins
學習組織程式碼:http://learn.jquery.com/code-organization/concepts/
JQuery UI
基於JQuery的UI庫,裡面的拖動,排序等效果足以勝任絕大部分介面的操作要求。
補充一下。如果你是在移動裝置上使用JQuery UI的sortable功能,那你還得引用https://github.com/furf/jquery-ui-touch-punch。注意設定sortable的handle屬性,即讓其拖動區域限制在一個範圍內,否則,如果排序項超過了滿屏,那麼整個螢幕將不能被上下滑動。
JQuery Mobile
JQuery 的移動開發框架
在移動裝置開發上,最好使用tap事件而不是click事件,否則會遇到預想不到的麻煩。
Google Map
官方網址:https://developers.google.com/maps/documentation/javascript/tutorial?hl=zh-CN
注意,在手機裝置上,必須指定地圖的寬度和高度,否則地圖將不會被顯示。
Ceaser
官方地址:http://matthewlein.com/ceaser/
一個不錯的移動動畫效果
參考資料
Javascript 參考: http://www.javascriptkit.com/jsref
Javascript 參考:http://w3schools.com/jsref/default.asp
CSS 參考:http://www.w3school.com.cn/css/
技能
問題:JQuery Mobile中字型顯示不清晰
在樣式定義中,使用text-shadow:none來移除重影。當然,也可以用text-shadow來加上自己需要的字型陰影。
問題:JQuery Mobile中,tap事件會被執行兩次
在事件處理其中,加上e.preventDefault();。程式碼如下:
$(document).on(“tap”, ".selector”, null, function(e){
e.preventDefault();
//code in the handler;
});
問題:Google地圖上的線路如何計算
使用google.maps.DirectionsService。
問題:prototype中的this指的是什麼物件?
this指的是物件本身。
如:
function fn() { }; fn.prototype.name = "hello"; fn.prototype.do = function () { alert(this.name); }; var f = new fn(); f.name = "hello1"; f.do();//hello1
問題:如何實現列表的拖動排序
使用JQuery UI 提供的sortable()外掛。
問題:Javascript中的布林型別就是true和false嗎?
錯誤,true和false只是布林型別的字面量,且唯一的兩個字面量,Javascript中的所有型別都可以通過Boolean函式,得到布林型別。因此,準確的說,Javascript中的布林型別是通過Boolean函式得到的型別。
因此,以下程式碼是正確的。
window.myObj = window.myObj || {}; var s = “something”; if(s){ alert(s); } var n = 3; if(n) { alert(n); }
問題:物件多值排序
var gps = [ [29,106], [29.33, 106.5323], [29.8890, 106.23321] ]; //以維度和經度進行排序 gps.sort(function(v1, v2){ var lat = v1[0] – v2[0]; var lng = v1[1] – v2[1]; if(lat) return lat; if(lng) return lng; return 0; });
問題:如何判斷全域性x物件是否為空
if(window[“x”]) { console.log(“not null”); } else { console.log(“null or not defined”); }
問題:如何判斷變數x是否被定義
typeof(x) === ‘undefined’
問題:如何在JQuery Mobile中監聽”按住”事件和“鬆開”事件
$(document).on(“taphold”, “.selector”, null, function(e){ //處理按住時的相關事件 }); $(document).on(“vmouseup”, “.selector”, null, function(e){ //處理手鬆開後的事件 });
問題:如果有效率地使用jQuery監聽事件
雖然從概念上,我們可以用以下程式碼,使用jQuery來監聽元素上觸發的事件,但這樣做會導致記憶體開銷增加,使事件傳遞的距離增大從而導致不必要的效能降低。
$(document).on(‘click’, 'selector’, function(e){});
建議在最近的父節點來監聽事件,程式碼如下。
$(‘最近的父節點’).on('click','監聽的元素選擇器,多個選擇器用,號隔開',function(){ //你的程式碼});
問題:獲取當前jQuery物件下的直接子元素
$(“.selector”).children();
問題:用jQuery Mobile獲取裝置的寬度和高度
$.mobile.window.width();
$.mobile.window.height();
如果上面這段程式碼是在瀏覽器下,那它返回的是瀏覽器可視部分的寬度和高度。