我所知道的Javascript

Coder發表於2013-08-11

javascript到了今天,已經不再是我10多年前所認識的小指令碼了。最近我也開始用javascript編寫複雜的應用,所以覺得有必要將自己的javascript知識梳理一下。同大家一起分享javascript給我們帶來的福利。

索引

工具

Online Javascript interpreter[線上javascript解析器]

可以線上執行javascript程式碼。這篇文章中的所有程式碼都在裡面執行過。用它來做javascript實驗,它是不錯的選擇。

執行地址:http://math.chapman.edu/~jipsen/js/

Html5 線上執行

地址:W3School線上測試工具 –canvas

JQuery線上執行

地址:W3School線上測試工具-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

地址:http://jquery.com/

如果要跨域呼叫,那麼要使用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://jquery.com

學習外掛開發:http://learn.jquery.com/plugins

學習組織程式碼:http://learn.jquery.com/code-organization/concepts/

JQuery UI

基於JQuery的UI庫,裡面的拖動,排序等效果足以勝任絕大部分介面的操作要求。

地址:http://jqueryui.com

補充一下。如果你是在移動裝置上使用JQuery UI的sortable功能,那你還得引用https://github.com/furf/jquery-ui-touch-punch。注意設定sortable的handle屬性,即讓其拖動區域限制在一個範圍內,否則,如果排序項超過了滿屏,那麼整個螢幕將不能被上下滑動。

JQuery Mobile

JQuery 的移動開發框架

地址:http://jquerymobile.com/

在移動裝置開發上,最好使用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();

如果上面這段程式碼是在瀏覽器下,那它返回的是瀏覽器可視部分的寬度和高度。

相關文章