原創|行業資訊|編輯:龔雪|2015-05-11 09:40:53.000|閱讀 528 次
概述:JavaScript一種直譯式腳本語言,是一種動態類型、弱類型、基于原型的語言。本文就為大家介紹一些優化JavaScript的小技巧。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
JavaScript一種直譯式腳本語言,是一種動態類型、弱類型、基于原型的語言,內置支持類型。它的解釋器被稱為JavaScript引擎,為瀏覽器的一部分,廣泛用于客戶端的腳本語言,最早是在HTML(標準通用標記語言下的一個應用)網頁上使用,用來給HTML網頁增加動態功能。
不僅如此,JavaScript還是很多新手踏入編程世界的第一個語言。既可以用來顯示瀏覽器中的簡單提示框,也可以通過nodebot或nodruino來控制機器人。能夠編寫結構清晰、性能高效的JavaScript代碼的開發人員,現如今已成了招聘市場最受追捧的人。
在這篇文章中,小編將為大家分享一些JavaScript的技巧、秘訣和最佳實踐。不管是瀏覽器的JavaScript引擎,還是服務器端JavaScript解釋器,均適用。
==和!=操作符會在需要的情況下自動轉換數據類型。但===和!==不會,它們會同時比較值和數據類型,這也使得它們要比==和!=快。
[10] === 10 // is false [10] == 10 // is true '10' == 10 // is true '10' === 10 // is false [] == 0 // is true [] === 0 // is false '' == false // is true but true == "a" is false '' === false // is false
function Person(firstName, lastName){ this.firstName = firstName; this.lastName = lastName; } var Saad = new Person("Saad", "Mousliki");
函數在創建之后直接自動執行,通常稱之為自調用匿名函數(Self-Invoked Anonymous Function)或直接調用函數表達式(Immediately Invoked Function Expression )。格式如下:
(function(){ // 置于此處的代碼將自動執行 })(); (function(a,b){ var result = a+b; return result; })(10,20)
下面這樣的用法,可以防止迭代時進入到對象的原型屬性中。
for (var name in object) { if (object.hasOwnProperty(name)) { // do something with name } }
在jQuery選擇器中,可以臨時存儲整個DOM元素。
var navright = document.querySelector('#right'); var navleft = document.querySelector('#left'); var navup = document.querySelector('#up'); var navdown = document.querySelector('#down');
var numbersArray = [1,2,3,4,5]; var from = numbersArray.indexOf("foo") ; // from is equal to -1 numbersArray.splice(from,2); // will return [5]
注意:傳給splice的索引參數不要是負數,當是負數時,會從數組結尾處刪除元素。
和函數構造器(Function consturctor)的開銷較大,每次調用,JavaScript引擎都要將源代碼轉換為可執行的代碼。
var func1 = new Function(functionCode); var func2 = ;
使用with()可以把變量加入到全局作用域中,因此,如果有其它的同名變量,一來容易混淆,二來值也會被覆蓋。
當判斷有超過兩個分支時使用switch/case要更快一些,而且也更優雅,更利于代碼的組織,當然,如果有超過10個分支,就不要使用switch/case了。
下面這樣,便可以給定對象作為參數,來創建以此為原型的新對象:
function clone(object) { function OneShotConstructor(){}; OneShotConstructor.prototype = object; return new OneShotConstructor(); } clone(Array).prototype ; // []
function escapeHTML(text) { var replacements= {"<": "<", ">": ">","&": "&", "\"": """}; return text.replace(/[<>&"]/g, function(character) { return replacements[character]; }); }
變量沒有聲明而直接賦值得話,默認會作為一個新的全局變量,要盡量避免使用全局變量。
Java、C#和PHP等語言都實現了專門的字符串去空格函數,但JavaScript中是沒有的,可以通過下面的代碼來為String對象函數一個trim函數:
String.prototype.trim = function(){return this.replace(/^\s+|\s+$/g, "");};
JavaScript引擎已經有了trim()的原生實現。
通常情況下,WebSocket連接創建后,如果30秒內沒有任何活動,服務器端會對連接進行超時處理,防火墻也可以對單位周期沒有活動的連接進行超時處理。
為了防止這種情況的發生,可以每隔一定時間,往服務器發送一條空的消息。可以通過下面這兩個函數來實現這個需求,一個用于使連接保持活動狀態,另一個專門用于結束這個狀態。
var timerID = 0; function keepAlive() { var timeout = 15000; if (webSocket.readyState == webSocket.OPEN) { webSocket.send(''); } timerId = setTimeout(keepAlive, timeout); } function cancelKeepAlive() { if (timerId) { cancelTimeout(timerId); } }
別忘了在寫代碼時使用一個代碼美化工具。使用JSLint(一個語法檢查工具)并且在上線前壓縮代碼(比如使用JSMin)。注:現在代碼壓縮一般推薦 UglifyJS (//github.com/mishoo/UglifyJS2)
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:慧都控件網