国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > JS > 正文

Javascript 一些需要注意的細節(jié)(必看篇)

2024-05-06 16:38:20
字體:
供稿:網(wǎng)友

1.使用 === 代替 ==

JavaScript 使用2種不同的等值運算符:===|!== 和 ==|!=,在比較操作中使用前者是最佳實踐。

“如果兩邊的操作數(shù)具有相同的類型和值,===返回true,!==返回false。”——JavaScript:語言精粹

然而,當使用==和!=時,你可能會遇到類型不同的情況,這種情況下,操作數(shù)的類型會被強制轉(zhuǎn)換成一樣的再做比較,這可能不是你想要的結(jié)果。

2.Eval == 邪惡

起初不太熟悉時,“eval”讓我們能夠訪問JavaScript的編譯器(譯注:這看起來很強大)。從本質(zhì)上講,我們可以將字符串傳遞給eval作為參數(shù),而執(zhí)行它。

這不僅大幅降低腳本的性能(譯注:JIT編譯器無法預(yù)知字符串內(nèi)容,而無法預(yù)編譯和優(yōu)化),而且這也會帶來巨大的安全風險,因為這樣付給要執(zhí)行的文本太高的權(quán)限,避而遠之。

3.省略未必省事

從技術(shù)上講,你可以省略大多數(shù)花括號和分號。大多數(shù)瀏覽器都能正確理解下面的代碼:

if(someVariableExists)   x = false 

然后,如果像下面這樣:

if(someVariableExists)   x = false   anotherFunctionCall(); 

有人可能會認為上面的代碼等價于下面這樣:

if(someVariableExists) {   x = false;   anotherFunctionCall(); }

不幸的是,這種理解是錯誤的。實際上的意思如下:

if(someVariableExists) {   x = false; } anotherFunctionCall();

你可能注意到了,上面的縮進容易給人花括號的假象。無可非議,這是一種可怕的實踐,應(yīng)不惜一切代價避免。僅有一種情況下,即只有一行的時候,花括號是可以省略的,但這點是飽受爭議的。

if(2 + 2 === 4) return 'nicely done'; 

未雨綢繆

很可能,有一天你需要在if語句塊中添加更多的語句。這樣的話,你必須重寫這段代碼。底線——省略是雷區(qū)。

4.將腳本放在頁面的底部

記住——首要目標是讓頁面盡可能快的呈獻給用戶,腳本的夾在是阻塞的,腳本加載并執(zhí)行完之前,瀏覽器不能繼續(xù)渲染下面的內(nèi)容。因此,用戶將被迫等待更長時間。

如果你的js只是用來增強效果——例如,按鈕的單擊事件——馬上將腳本放在body結(jié)束之前。這絕對是最佳實踐。

5.避免在For語句內(nèi)聲明變量

當執(zhí)行冗長的for語句時,要保持語句塊的盡量簡潔,例如:

糟糕:

for(var i = 0; i < someArray.length; i++) {   var container = document.getElementById('container');   container.innerHtml += 'my number: ' + i;   console.log(i); } 

注意每次循環(huán)都要計算數(shù)組的長度,并且每次都要遍歷dom查詢“container”元素——效率嚴重地下!

建議:

var container = document.getElementById('container'); for(var i = 0, len = someArray.length; i < len; i++) {   container.innerHtml += 'my number: ' + i;   console.log(i); } 

6.構(gòu)建字符串的最優(yōu)方法

當你需要遍歷數(shù)組或?qū)ο蟮臅r候,不要總想著“for”語句,要有創(chuàng)造性,總能找到更好的辦法,例如,像下面這樣。

var arr = ['item 1', 'item 2', 'item 3', ...]; var list = '<ul><li>' + arr.join('</li><li>') + '</li></ul>';

我不是你心中神,但請你相信我(不信你自己測試)——這是迄今為止最快的方法!

使用原生代碼(如 join()),不管系統(tǒng)內(nèi)部做了什么,通常比非原生快很多。

7.減少全局變量

“只要把多個全局變量都整理在一個名稱空間下,擬將顯著降低與其他應(yīng)用程序、組件或類庫之間產(chǎn)生糟糕的相互影響的可能性。”——Douglas Crockford

var name = 'Jeffrey'; var lastName = 'Way'; function doSomething() {...} console.log(name); // Jeffrey -- 或 window.name// 更好的做法var DudeNameSpace = {   name : 'Jeffrey',   lastName : 'Way',   doSomething : function() {...} } console.log(DudeNameSpace.name); // Jeffrey

注:這里只是簡單命名為 "DudeNameSpace",實際當中要取更合理的名字。

8.給代碼添加注釋

似乎沒有必要,當請相信我,盡量給你的代碼添加更合理的注釋。當幾個月后,重看你的項目,你可能記不清當初你的思路。或者,假如你的一位同事需要修改你的代碼呢?總而言之,給代碼添加注釋是重要的部分。

// 循環(huán)數(shù)組,輸出每項名字(譯者注:這樣的注釋似乎有點多余吧)for(var i = 0, len = array.length; i < len; i++) {  console.log(array[i]); } 

9.擁抱漸進增強

確保javascript被禁用的情況下能平穩(wěn)退化。我們總是被這樣的想法吸引,“大多數(shù)我的訪客已經(jīng)啟用JavaScript,所以我不必擔心。”然而,這是個很大的誤區(qū)。

你可曾花費片刻查看下你漂亮的頁面在javascript被關(guān)閉時是什么樣的嗎?(下載 Web Developer 工具就能很容易做到(譯者注:chrome用戶在應(yīng)用商店里自行下載,ie用戶在Internet選項中設(shè)置)),這有可能讓你的網(wǎng)站支離破碎。作為一個經(jīng)驗法則,設(shè)計你的網(wǎng)站時假設(shè)JavaScript是被禁用的,然后,在此基礎(chǔ)上,逐步增強你的網(wǎng)站。

10.不要給"setInterval"或"setTimeout"傳遞字符串參數(shù)

考慮下面的代碼:

setInterval( "document.getElementById('container').innerHTML += 'My new number: ' + i", 3000 );

不僅效率低下,而且這種做法和"eval"如出一轍。從不給setInterval和setTimeout傳遞字符串作為參數(shù),而是像下面這樣傳遞函數(shù)名。

setInterval(someFunction, 3000);

11.不要使用"with"語句

乍一看,"with"語句看起來像一個聰明的主意。基本理念是,它可以為訪問深度嵌套對象提供縮寫,例如……

with (being.person.man.bodyparts) {   arms = true;   legs = true; }

而不是像下面這樣:

being.person.man.bodyparts.arms = true; being.person.man.bodyparts.legs= true; 

不幸的是,經(jīng)過測試后,發(fā)現(xiàn)這時“設(shè)置新成員時表現(xiàn)得非常糟糕。作為代替,您應(yīng)該使用變量,像下面這樣。

var o = being.person.man.bodyparts; o.arms = true; o.legs = true; 

12.使用{}代替 new Ojbect()

在JavaScript中創(chuàng)建對象的方法有多種。可能是傳統(tǒng)的方法是使用"new"加構(gòu)造函數(shù),像下面這樣:

ar o = new Object(); o.name = 'Jeffrey'; o.lastName = 'Way'; o.someFunction = function() {   console.log(this.name); }

然而,這種方法的受到的詬病不及實際上多。作為代替,我建議你使用更健壯的對象字面量方法。

更好的做法

var o = {   name: 'Jeffrey',   lastName = 'Way',   someFunction : function() {    console.log(this.name);   } };

注意,果你只是想創(chuàng)建一個空對象,{}更好。

13.使用[]代替 new Array()

這同樣適用于創(chuàng)建一個新的數(shù)組。

例如:

var a = new Array(); a[0] = "Joe"; a[1] = 'Plumber';// 更好的做法:var a = ['Joe','Plumber'];

“javascript程序中常見的錯誤是在需要對象的時候使用數(shù)組,而需要數(shù)組的時候卻使用對象。規(guī)則很簡單:當屬性名是連續(xù)的整數(shù)時,你應(yīng)該使用數(shù)組。否則,請使用對象”——Douglas Crockford

14.定義多個變量時,省略var關(guān)鍵字,用逗號代替

var someItem = 'some string'; var anotherItem = 'another string'; var oneMoreItem = 'one more string';// 更好的做法var someItem = 'some string',   anotherItem = 'another string',   oneMoreItem = 'one more string';

應(yīng)而不言自明。我懷疑這里真的有所提速,但它能是你的代碼更清晰。

15.使用Firebug的"timer"功能優(yōu)化你的代碼

在尋找一個快速、簡單的方法來確定操作需要多長時間嗎?使用Firebug的“timer”功能來記錄結(jié)果。

function TimeTracker(){  console.time("MyTimer");  for(x=5000; x > 0; x--){}  console.timeEnd("MyTimer"); } 

16.閱讀,閱讀,反復(fù)閱讀

雖午餐之余或上床睡覺之前,實在沒有什么比一本書更合適了,堅持放一本web開發(fā)方面書在你的床頭柜。

以上這篇Javascript 一些需要注意的細節(jié)(必看篇)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持VeVb武林網(wǎng)。


注:相關(guān)教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 莱西市| 安阳县| 恩施市| 科技| 大埔县| 宁陕县| 巴中市| 陇南市| 邯郸县| 葫芦岛市| 临洮县| 云龙县| 綦江县| 昭苏县| 营山县| 虞城县| 萝北县| 清河县| 文登市| 惠州市| 荥经县| 曲周县| 渭源县| 南和县| 昭苏县| 马山县| 丁青县| 阿拉尔市| 常山县| 鱼台县| 崇文区| 斗六市| 马公市| 朝阳市| 庄浪县| 湖州市| 仁化县| 玉屏| 屏东市| 白城市| 漳浦县|