黄色电影一区二区,韩国少妇自慰A片免费看,精品人妻少妇一级毛片免费蜜桃AV按摩师 ,超碰 香蕉

JavaScript 最佳實(shí)踐

javascript 最佳實(shí)踐

請(qǐng)避免全局變量、new、===eval()

 

1. 避免全局變量

請(qǐng)盡量少地使用全局變量。

它包括所有的數(shù)據(jù)類型、對(duì)象和函數(shù)。

全局變量和函數(shù)可被其他腳本覆蓋。

 

2. 始終聲明局部變量

所有在函數(shù)中使用的變量應(yīng)該被聲明為局部變量。

局部變量必須通過 var 關(guān)鍵詞來聲明,否則它們將變成全局變量。

嚴(yán)格模式不允許未聲明的變量。

 

3. 在頂部聲明

一項(xiàng)好的編碼習(xí)慣是把所有聲明放在每段腳本或函數(shù)的頂部。

這么做的好處是:

  • 獲得更整潔的代碼
  • 提供了查找局部變量的好位置
  • 更容易避免不需要的全局變量
  • 減少不需要的重新聲明的可能性
// 在頂部聲明
var firstname, lastname, price, discount, fullprice;
// 稍后使用
firstname = "bill";
lastname = "gates";
price = 19.90;
discount = 0.10;
fullprice = price * 100 / discount;

也可以用于循環(huán)變量:

// 在頂部聲明
var i;
// 稍后使用
for (i = 0; i < 5; i++)  {

默認(rèn)地,javascript 會(huì)將所有聲明移至頂部(javascript hoisting)。

 

3. 初始化變量

在您聲明變量時(shí)對(duì)其進(jìn)行初始化是個(gè)好習(xí)慣。

這么做的好處是:

  • 更整潔的代碼
  • 在單獨(dú)的位置來初始化變量
  • 避免未定義值
// 在開頭進(jìn)行聲明和初始化
var firstname = "",
    lastname  = "",
    price = 0,
    discount = 0,
    fullprice  = 0,
    myarray = [],
    myobject = {};

變量初始化使我們能夠了解預(yù)期用途和預(yù)期的數(shù)據(jù)類型。

 

4. 請(qǐng)不要聲明數(shù)值、字符串或布爾對(duì)象

請(qǐng)始終將數(shù)值、字符串或布爾值視作原始值。而非對(duì)象。

如果把這些類型聲明為對(duì)象,會(huì)拖慢執(zhí)行速度,并產(chǎn)生討厭的副作用:

范例

var x = "bill";             
var y = new string("bill");
(x === y) // 結(jié)果為 false,因?yàn)?x 是字符串,而 y 是對(duì)象。

或者甚至更糟:

范例

var x = new string("bill");             
var y = new string("bill");
(x == y) // 結(jié)果是 false,因?yàn)槟銦o法比較對(duì)象。

 

5. 請(qǐng)勿使用 new object()

  • 請(qǐng)使用 {} 來代替 new object()
  • 請(qǐng)使用 "" 來代替 new string()
  • 請(qǐng)使用 0 來代替 new number()
  • 請(qǐng)使用 false 來代替 new boolean()
  • 請(qǐng)使用 [] 來代替 new array()
  • 請(qǐng)使用 /()/ 來代替 new regexp()
  • 請(qǐng)使用 function (){}來代替 new function()

范例

var x1 = {};           // 新對(duì)象
var x2 = "";           // 新的原始字符串值
var x3 = 0;            // 新的原始數(shù)值
var x4 = false;        // 新的原始布爾值
var x5 = [];           // 新的數(shù)組對(duì)象
var x6 = /()/;         // 新的正則表達(dá)式
var x7 = function(){}; // 新的函數(shù)對(duì)象

 

6. 意識(shí)到自動(dòng)類型轉(zhuǎn)換

請(qǐng)意識(shí)到數(shù)值會(huì)被意外轉(zhuǎn)換為字符串或 nan(not a number)。

javascript 屬于松散類型。變量可包含不同的數(shù)據(jù)類型,并且變量能夠改變其數(shù)據(jù)類型:

范例

var x = "hello";     // typeof x 為字符串
x = 5;               // 把 typeof x 更改為數(shù)值

如果進(jìn)行數(shù)學(xué)運(yùn)算,javascript 能夠?qū)?shù)值轉(zhuǎn)換為字符串:

范例

var x = 5 + 7;       // x.valueof() 是 12,  typeof x 是數(shù)值
var x = 5 + "7";     // x.valueof() 是 57,  typeof x 是字符串
var x = "5" + 7;     // x.valueof() 是 57,  typeof x 是字符串
var x = 5 - 7;       // x.valueof() 是 -2,  typeof x 是數(shù)值
var x = 5 - "7";     // x.valueof() 是 -2,  typeof x 是數(shù)值
var x = "5" - 7;     // x.valueof() 是 -2,  typeof x 是數(shù)值
var x = 5 - "x";     // x.valueof() 是 nan, typeof x 是數(shù)值

用字符串減去字符串,不會(huì)產(chǎn)生錯(cuò)誤而是返回 nan(not a number):

范例

"hello" - "dolly"    // 返回 nan

 

7. 使用 === 比較

== 比較運(yùn)算符總是在比較之前進(jìn)行類型轉(zhuǎn)換(以匹配類型)。

=== 運(yùn)算符會(huì)強(qiáng)制對(duì)值和類型進(jìn)行比較:

范例

0 == "";        // true
1 == "1";       // true
1 == true;      // true
0 === "";       // false
1 === "1";      // false
1 === true;     // false

 

8. 使用 parameter defaults

如果調(diào)用函數(shù)時(shí)缺少一個(gè)參數(shù),那么這個(gè)缺失參數(shù)的值會(huì)被設(shè)置為 undefined。

undefined 值會(huì)破壞您的代碼。為參數(shù)設(shè)置默認(rèn)值是一個(gè)好習(xí)慣。

范例

function myfunction(x, y) {
    if (y === undefined) {
        y = 0;
    }
}

 

9. 用 default 來結(jié)束 switch

請(qǐng)使用使用 default 來結(jié)束您的 switch 語句。即使您認(rèn)為沒有這個(gè)必要。

范例

switch (new date().getday()) {
    case 0:
        day = "sunday";
        break;
    case 1:
        day = "monday";
         break;
    case 2:
        day = "tuesday";
         break;
    case 3:
        day = "wednesday";
         break;
    case 4:
        day = "thursday";
         break;
    case 5:
        day = "friday";
         break;
    case 6:
        day = "saturday";
         break;
    default:
        day =  "unknown";
} 

 

10. 避免使用 eval()

eval() 函數(shù)用于將文本作為代碼來允許。在幾乎所有情況下,都沒有必要使用它。

因?yàn)樵试S任意代碼運(yùn)行,它同時(shí)也意味著安全問題。

下一節(jié):js 常見錯(cuò)誤

js 教程

相關(guān)文章