欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2017年07月08日 08:37:05   投稿:jingxian  
下面小編就為大家?guī)?lái)一篇Javascript 一些需要注意的細(xì)節(jié)(必看篇)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

1.使用 === 代替 ==

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

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

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

2.Eval == 邪惡

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

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

3.省略未必省事

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

if(someVariableExists) 
  x = false 

然后,如果像下面這樣:

if(someVariableExists) 
  x = false 
  anotherFunctionCall(); 

有人可能會(huì)認(rèn)為上面的代碼等價(jià)于下面這樣:

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

不幸的是,這種理解是錯(cuò)誤的。實(shí)際上的意思如下:

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

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

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

未雨綢繆

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

4.將腳本放在頁(yè)面的底部

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

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

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

當(dāng)執(zhí)行冗長(zhǎng)的for語(yǔ)句時(shí),要保持語(yǔ)句塊的盡量簡(jiǎn)潔,例如:

糟糕:

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

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

建議:

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)方法

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

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

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

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

7.減少全局變量

“只要把多個(gè)全局變量都整理在一個(gè)名稱空間下,擬將顯著降低與其他應(yīng)用程序、組件或類庫(kù)之間產(chǎn)生糟糕的相互影響的可能性?!薄狣ouglas 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

注:這里只是簡(jiǎn)單命名為 "DudeNameSpace",實(shí)際當(dāng)中要取更合理的名字。

8.給代碼添加注釋

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

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

9.擁抱漸進(jìn)增強(qiáng)

確保javascript被禁用的情況下能平穩(wěn)退化。我們總是被這樣的想法吸引,“大多數(shù)我的訪客已經(jīng)啟用JavaScript,所以我不必?fù)?dān)心?!比欢@是個(gè)很大的誤區(qū)。

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

乍一看,"with"語(yǔ)句看起來(lái)像一個(gè)聰明的主意?;纠砟钍?它可以為訪問(wèn)深度嵌套對(duì)象提供縮寫(xiě),例如……

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

而不是像下面這樣:

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

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

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

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

在JavaScript中創(chuàng)建對(duì)象的方法有多種??赡苁莻鹘y(tǒng)的方法是使用"new"加構(gòu)造函數(shù),像下面這樣:

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

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

更好的做法

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

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

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

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

例如:

var a = new Array(); 
a[0] = "Joe"; 
a[1] = 'Plumber';

// 更好的做法:
var a = ['Joe','Plumber'];

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

14.定義多個(gè)變量時(shí),省略var關(guān)鍵字,用逗號(hào)代替

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)化你的代碼

在尋找一個(gè)快速、簡(jiǎn)單的方法來(lái)確定操作需要多長(zhǎng)時(shí)間嗎?使用Firebug的“timer”功能來(lái)記錄結(jié)果。

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

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

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

以上這篇Javascript 一些需要注意的細(xì)節(jié)(必看篇)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • JavaScript中的編碼和解碼函數(shù)

    JavaScript中的編碼和解碼函數(shù)

    本文主要介紹了JavaScript中的編碼和解碼函數(shù)。具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧
    2017-02-02
  • JavaScript實(shí)現(xiàn)大文件上傳的示例代碼

    JavaScript實(shí)現(xiàn)大文件上傳的示例代碼

    這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)大文件上傳功能的示例代碼,文中的代碼講解詳細(xì),對(duì)我們學(xué)習(xí)JavaScript有一定幫助,感興趣可以跟隨小編一起學(xué)習(xí)一下
    2022-11-11
  • 詳解在HTTPS 項(xiàng)目中使用百度地圖 API

    詳解在HTTPS 項(xiàng)目中使用百度地圖 API

    這篇文章主要介紹了在HTTPS 項(xiàng)目中使用百度地圖 API,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Javascript 遍歷頁(yè)面text控件詳解

    Javascript 遍歷頁(yè)面text控件詳解

    本篇文章主要是對(duì)Javascript遍歷頁(yè)面text控件進(jìn)行了介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助
    2014-01-01
  • ES6新特性之解構(gòu)、參數(shù)、模塊和記號(hào)用法示例

    ES6新特性之解構(gòu)、參數(shù)、模塊和記號(hào)用法示例

    這篇文章主要介紹了ES6新特性之解構(gòu)、參數(shù)、模塊和記號(hào)用法,結(jié)合實(shí)例形式分析了解構(gòu)、參數(shù)、模塊和記號(hào)的功能、用法及相關(guān)使用注意事項(xiàng),需要的朋友可以參考下
    2017-04-04
  • php讀取sqlite數(shù)據(jù)庫(kù)入門(mén)實(shí)例代碼

    php讀取sqlite數(shù)據(jù)庫(kù)入門(mén)實(shí)例代碼

    本文介紹了php讀取sqlite數(shù)據(jù)庫(kù)的簡(jiǎn)單例子,php編程中操作sqlite入門(mén)實(shí)例,有需要的朋友可以參考下
    2014-06-06
  • JavaScript實(shí)現(xiàn)將數(shù)組數(shù)據(jù)添加到Select下拉框的方法

    JavaScript實(shí)現(xiàn)將數(shù)組數(shù)據(jù)添加到Select下拉框的方法

    這篇文章主要介紹了JavaScript實(shí)現(xiàn)將數(shù)組數(shù)據(jù)添加到Select下拉框的方法,涉及javascript數(shù)組操作及頁(yè)面元素動(dòng)態(tài)賦值的相關(guān)技巧,需要的朋友可以參考下
    2015-08-08
  • 微信小程序?qū)W習(xí)之wxs使用教程

    微信小程序?qū)W習(xí)之wxs使用教程

    這篇文章主要給大家介紹了關(guān)于微信小程序?qū)W習(xí)之wxs使用教程的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • 圖片連續(xù)不間斷滾動(dòng)像冊(cè)

    圖片連續(xù)不間斷滾動(dòng)像冊(cè)

    圖片連續(xù)不間斷滾動(dòng)像冊(cè)...
    2007-01-01
  • 利用JS實(shí)現(xiàn)文字的聚合動(dòng)畫(huà)效果

    利用JS實(shí)現(xiàn)文字的聚合動(dòng)畫(huà)效果

    這篇文章主要給大家介紹了利用JS如何實(shí)現(xiàn)文字的聚合動(dòng)畫(huà)效果,實(shí)現(xiàn)的效果非常不錯(cuò),類似粒子動(dòng)畫(huà)的效果,有需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-01-01

最新評(píng)論