精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

JavaScript最佳實踐:幫你提升代碼質量

開發 前端
每天學一些新東西可以讓一個理性之人走上不凡之路。而作為開發人員,不斷的學習新東西則是我們工作的一部分, 不論這些新東西是不是來源于積極的學習經驗。

每天學一些新東西可以讓一個理性之人走上不凡之路。而作為開發人員,不斷的學習新東西則是我們工作的一部分, 不論這些新東西是不是來源于積極的學習經驗。

在本篇教程中,我將指出一些重要的 JavaScript ***實踐,讓你不必去用另外一種艱難的方式來了解它們。準備好去升級你的代碼吧!

 [[182138]]

1. 避免對全局作用域的污染

聲明變量是一件很有趣的事情。有時候即使你不想這樣做,但也有可能會定義出全局變量。在如今的瀏覽器中,全局變量都被存儲在 window 對象中。而因為有許多的東西都在那個里面,所以你有可能把一些默認值都給覆蓋掉了。

假設你有一個 HTML 文件,里面包含了一個 <script> 標記,而這個標記內含 (或者通過引用一個 JavaScript 文件而加載) 如下內容:

1
2
var foo = 42;
console.log(foo);

這段代碼很明顯會讓控制臺輸出 42。不過因為代碼并不是放到一個函數里面去執行的,因此其執行的上下文就會是全局的那個。因此,變量就會被附加到 window 對象上。這就意味著 window.foo 的值也會是 42。

這樣是挺危險的,因為你可以把已經存在的全局變量給覆蓋掉:

1
2
3
4
function print () {
   // do something
}
print();

當執行 window.print (或者只是執行 print) 的時候, 它不會打開打印彈窗,因為我們已經將原生的打印彈窗邏輯給覆蓋掉了。

解決這個問題的方案相當簡單; 我們需要一個會在定義后立即被調用到的閉包函數, 如下所示:

1
2
3
4
5
6
7
8
9
// Declare an anonymous function
(function () {
   var foo = 42;
   console.log(window.foo);
   // → undefined
   console.log(foo);
   // → 42
})();
//^ and call it immediately

或者你也可以選擇將 window 以及其它全局的東西(例如 document)都作為參數傳給那個函數(這樣做也可能對性能會有所提升):

1
2
3
4
5
(function (global, doc) {
  global.setTimeout(function () {
     doc.body.innerHTML = "Hello!";
  }, 1000);
})(window, document);

因此你得使用閉包函數來避免創建出什么全局的東西來。注意在這里因為要專注于代碼本身,所以我不會在后面的代碼片段中使用閉包函數。

提示: browserify 是另外一種避免創建全局變量的方式。它采用了你在 Node.js 同樣會用到的 require 函數的方式。

順便說一下, Node.js 會自動將你的文件封裝進函數里面。它們看起來先下面這樣:

1
2
(function (exports, require, module, __filename, __dirname) {
// ...

  因此,如果你認為 require 函數式全局的,好吧,并不是。它無非就是一個函數的參數。

  你知道嗎?

  因為 window 對象包含了所有的全局變量,又因為它自己也是全局的,因此 window 自己內部也引用了它自己:

1
2
window.window.window
// => Window {...}

  這是一位 window 對象是一個循環引用對象。下面展示了如何創建這樣的一個對象:

1
2
3
4
5
6
7
// Create an object
var foo = {};
// Point a key value to the object itself
foo.bar = foo;
// The `foo` object just became a circular one:
foo.bar.bar.bar.bar
// → foo

  或者,為了展示你對 JavaScript 的***的熱愛之情,你可以當回發燒友,代碼如下:

  是的,你可以幾乎沒完沒了(也有可能會等到瀏覽器崩潰)的展開這個對象。

 2. 好的 use strict 使用習慣

  要嚴格使用 use strict! 這無非就是在你的代碼中加了一行,給你的腳本增加更多的小把戲。

  例如:

1
2
3
4
5
6
7
8
// This is bad, since you do create a global
without having anyone to tell you
(function () {
   a = 42;
   console.log(a);
   // → 42
})();
console.log(a);
// → 42

  使用 use strict, 你就可以獲取到更多一點的錯誤信息:

1
2
3
4
5
(function () {
   "use strict";
   a = 42;
   // Error: Uncaught ReferenceError: a is not defined
})();

  你可能想知道為什么可以將 "use strict" 放在封裝函數的外面。這的確是可以的,不過這樣它就會被應用到全局。這還不是太壞,但是如果有代碼是來自于其它的庫,或者你要把所有的東西都打包到一個文件里面去的話,這樣做就會有影響的。

 3. 嚴格相等

  這個比較簡短。如果你在 JavaScript 中 (像其它的編程語言中那樣)使用 == 來比較 a 和 b,可能會發現其運行的方式有點怪: 如果你有一個字符串和一個數字如下,它們會相等 (==):

1
2
"42" == 42
// → true

  對于一些明顯的緣故 (例如驗證操作), ***就是使用嚴格等于(===):

1
2
"42" === 42
// → false

 4. 使用 && 和 || 來制造點小把戲

  根你需要做的事情,你可以使用邏輯操作符來讓代碼更簡短。

  取默認值

1
2
3
4
5
6
7
8
9
10
11
12
"" || "foo"
// → "foo"
undefined || 42
// → 42
// Note that if you want to handle 0 there, you need
// to check if a number was provided:
var a = 0;
a || 42
// → 42
// This is a ternary operator—works like an inline 
if-else statement
var b = typeof a === "number" ? a : 42;
// → 0

  不用拿 if 表達式來檢查某些東西是不是為真的,你也可以簡單地這樣做:

1
2
3
expr && doSomething();
 
// Instead of:
1
2
3
if (expr) {
   doSomething();
}

  如果你需要通過 doSomething(): 來決定返回的結果,這樣做更酷:

1
2
3
function doSomething () {
   return { foo: "bar" };
}
1
var expr = true;
1
2
3
var res = expr && doSomething();
res && console.log(res);
// → { foo: "bar" }

  你可能不會贊同我在這方面的看法,但像我說的這樣做其實效果更理想。如果你并不想像這樣來對你的代碼進行混淆,但其實這就是那些 JavaScript 簡化器實際會做的事情。

  如果你來問我,我會說這樣做雖然讓代碼更加簡短了,但仍然是可讀的。

 5. 對值的類型進行轉化

  有幾種方法可以根據你的想法來進行轉化。最常用的方式有如下這些:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
// From anything to a number
 
var foo = "42";
var myNumber = +foo; // shortcut for Number(foo)
// → 42
 
// Tip: you can convert it directly into a negative number
var negativeFoo = -foo; // or -Number(foo)
// → -42
 
// From object to array
// Tip: `arguments` is an object and in general you want 
to use it as array
var args = { 0: "foo", 1: "bar", length: 2 };
Array.prototype.slice.call(args)
// → [ 'foo', 'bar' ]
 
// Anything to boolean
/// Non non p is a boolean p
var t = 1;
var f = 0;
!!t
// → true
!!f
// → false
 
/// And non-p is a boolean non-p
!t
// → false
!f
// → true
 
// Anything to string
var foo = 42;
"" + foo // shortcut for String(foo)
// → "42"
 
foo = { hello: "world" };
JSON.stringify(foo);
// → '{ "hello":"world" }'
 
JSON.stringify(foo, null, 4); // beautify the things
// →
// '{
//    "hello": "world"
// }'
 
// Note you cannot JSON.stringify circular structures
JSON.stringify(window);
// ⚠ TypeError: JSON.stringify cannot serialize cyclic 
structures.

 6. 代碼風格/風格指南

  在新的項目中要讓所有的文件都遵循相同的代碼風格。對于現有的項目,就使用現有的代碼風格, 除非你就只是決定要變一變它的風格(提示: 同你的搭檔就此進行一下討論)。甚至你要創建和記錄你自己的代碼風格,然后一直去遵循它。

  現有的一些不同的代碼風格如下:

 額外的福利小提示:

  你應該記住的其它一些重要的 JavaScript ***實踐就是那些能幫助你對代碼進行格式化的工具。下面是其中的一些:

  • js-beautify: 美化你的代碼

  • UglifyJS(2): 混淆/最小化你的代碼

  • jshint: 檢測 JavaScript 代碼中的錯誤或者潛在問題

  • jscs: 可以配置的樣式指南檢測器

  ***一個就是: 不要總是 console.log,要對你的代碼進行調試。

  祝你編程愉快!

  原文地址:https://www.codementor.io/johnnyb/tutorials/javascript-best-practices-du107mvud

責任編輯:張燕妮 來源: oschina
相關推薦

2014-02-04 19:48:07

重構代碼質量

2022-03-25 09:22:42

代碼開發

2023-03-16 08:01:56

TypeScript開源編程語言

2025-04-11 03:00:55

2024-05-14 15:28:09

Python類型提示開發

2012-08-09 09:10:56

代碼審查代碼

2023-09-13 08:00:00

JavaScript循環語句

2013-12-03 09:34:26

iOS應用開發實踐高質量Objectiv

2024-06-14 12:04:33

2017-02-06 09:20:23

JavaScript實踐

2016-06-20 11:32:27

JS原型class

2021-05-07 09:00:00

JavaScript開發代碼

2011-09-20 10:41:45

Web

2016-07-08 15:02:47

云計算

2012-11-01 13:23:38

JSLintJavaScript代碼

2024-08-06 12:35:42

C#代碼重構

2024-10-30 08:08:45

2018-01-12 14:37:34

Java代碼實踐

2018-05-10 15:06:43

Java Web分層實踐

2011-03-04 10:11:09

JavascriptAPI
點贊
收藏

51CTO技術棧公眾號

欧美黄色www| 欧美精品一级二级三级| 欧美国产二区| 在线免费观看视频网站| 中文字幕一区二区三区久久网站 | 99热成人精品热久久66| 1pondo在线播放免费| 精东粉嫩av免费一区二区三区| 九九视频直播综合网| 亚洲成人日韩在线| 中文字幕成人| 欧美午夜激情视频| 综合操久久久| 五月天婷婷在线观看| 麻豆国产91在线播放| 久久久亚洲成人| 女人十八毛片嫩草av| 99亚洲乱人伦aⅴ精品| 欧美主播一区二区三区美女| 黄色网zhan| 国产三级在线| av资源网一区| 91精品视频网站| 久久久久99精品成人片我成大片| 天天插综合网| 亚洲欧美日韩国产中文| 欧美在线a视频| 88xx成人免费观看视频库| 亚洲黄色片在线观看| 日韩欧美一区二区三区四区 | 激情综合色综合久久综合| 97在线看福利| 久久久久免费看| 久久高清精品| 亚洲小视频在线| 人体私拍套图hdxxxx| 爱情电影网av一区二区| 91久久国产最好的精华液| 日韩国产一级片| 色呦呦在线资源| 亚洲欧洲精品成人久久奇米网| 欧美一区二区福利| 亚洲aaa在线观看| www.在线欧美| 国产美女在线精品免费观看| 精品人妻久久久久一区二区三区| 久久精品国产精品亚洲红杏 | 国产一区二区在线观| 欧美三级日本三级少妇99| 国产成人久久婷婷精品流白浆| 丁香影院在线| 一区二区三区免费网站| 久久av喷吹av高潮av| 国产三区在线观看| 成人免费一区二区三区视频| 亚洲精品在线视频观看| av影片在线看| 色天堂在线视频| av中文字幕av| 性色av一区二区三区四区| 国产亚洲毛片在线| 欧美精品久久久久久久久| avove在线播放| 欧美极品一区二区三区| 欧美激情精品在线| 精品亚洲永久免费| 亚洲激情综合| 欧洲亚洲妇女av| 久久亚洲精品石原莉奈| 久久午夜激情| 国产精品视频久久| 国产免费高清av| 国产成人免费视频一区| 国产精品制服诱惑| 五月天婷婷激情网| 国产亚洲一区二区三区四区| 天天综合色天天综合色hd| 91精品国产91久久久久游泳池| 国产精品国产自产拍高清av王其| 中国成人在线视频| 宅男网站在线免费观看| 亚洲电影第三页| 精品国产成人av在线免| 欧美jizz18| 欧美裸体一区二区三区| 亚洲国产日韩在线一区| 精品国产影院| 中文字幕日韩精品在线| 欧美精品久久久久久久久46p| 国产精品v日韩精品v欧美精品网站 | 亚洲一区欧美一区| 欧洲黄色一级视频| 日韩天堂在线| 日韩三级免费观看| 无码人妻精品一区二区三区温州 | 日韩一级在线视频 | 日韩无码精品一区二区| 影视先锋久久| 欧美精品在线播放| 依依成人综合网| 精品一区二区三区日韩| 国产嫩草一区二区三区在线观看 | 日韩在线播放av| 国产亚洲精品av| 日韩黄色免费网站| 国产福利不卡| 午夜在线小视频| 亚洲va韩国va欧美va精品| 男操女免费网站| 荡女精品导航| 色婷婷综合久久久久| 日本少妇性高潮| 激情综合网av| 欧洲成人一区二区| 草草影院在线| 7777精品伊人久久久大香线蕉完整版| 好吊色视频一区二区三区| 日韩国产一区二区| 欧美综合一区第一页| 国产视频在线免费观看| 国产偷国产偷精品高清尤物 | 麻豆av福利av久久av| 成人免费看片| 欧美亚洲综合一区| 在线观看国产免费视频| 欧美精品99| 国产精品永久免费在线| 日韩精品福利| 午夜精品福利一区二区蜜股av| 国产探花在线观看视频| 波多野结衣一区| 欧美中文字幕精品| 黑人乱码一区二区三区av| 中文字幕佐山爱一区二区免费| 成人在线观看黄| 黑色丝袜福利片av久久| 色综合91久久精品中文字幕| 亚洲综合网av| 国产精品丝袜黑色高跟| 国产女女做受ⅹxx高潮| 日本一道高清一区二区三区| 欧美激情影音先锋| 精品区在线观看| 亚洲男帅同性gay1069| 亚洲美女性囗交| 日韩1区2区| 国产精品高清在线观看| 美女做暖暖视频免费在线观看全部网址91 | 欧美日韩综合一区二区| 狠狠久久亚洲欧美| 在线观看日韩羞羞视频| 欧美激情三区| 久久久精品免费视频| 91亚洲欧美激情| 国产精品成人一区二区三区夜夜夜 | 免费一级suv好看的国产网站| 免费在线视频一区| 亚洲欧洲一区二区福利| 成人a在线观看高清电影| 伊人一区二区三区久久精品| 欧美成人精品网站| 国产精品污www在线观看| 超碰成人在线播放| 一本精品一区二区三区| 成人区精品一区二区| 国产夫妻在线播放| 国产视频精品久久久| 无码人妻精品一区二区三区蜜桃91 | 日韩国产一区二| 午夜视频久久久| 4438五月综合| 欧美精品电影免费在线观看| 天堂av资源在线| 色吊一区二区三区| 欧美黄色激情视频| 蜜臀av性久久久久蜜臀aⅴ| 中日韩在线视频| 91精品丝袜国产高跟在线| 555www成人网| 免费观看在线黄色网| 日韩视频一区二区在线观看| 日本熟妇成熟毛茸茸| 久久精品夜色噜噜亚洲aⅴ| 色一情一区二区| 亚洲国产激情| 手机看片福利永久国产日韩| 国产精品一区二区三区四区在线观看 | 久久丫精品国产亚洲av不卡| 蜜臂av日日欢夜夜爽一区| 男人天堂新网址| 精品国产aⅴ| 91精品美女在线| wwww亚洲| 日韩在线视频网站| 无码精品人妻一区二区三区影院| 在线观看视频一区| 欧美精品久久久久性色| 久久久99精品免费观看不卡| 亚洲一区二区三区三州| 久久aⅴ乱码一区二区三区| mm131午夜| 久久91麻豆精品一区| 99久久久精品免费观看国产| 亚州一区二区三区| 欧美人成在线视频| youjizz在线播放| 精品成人佐山爱一区二区| 中文字幕 日韩有码| 精品久久久久久久大神国产| 国产黄a三级三级| 91片在线免费观看| 日本少妇一区二区三区| 日韩国产在线观看| 波多野结衣家庭教师在线| 香蕉综合视频| 色涩成人影视在线播放| 激情亚洲另类图片区小说区| 国产主播精品在线| 日韩美女在线看免费观看| 国模gogo一区二区大胆私拍| 高清全集视频免费在线| 亚洲视频在线视频| 五月婷婷六月激情| 日韩一区国产二区欧美三区| 中文字幕777| 欧美午夜激情小视频| 国产午夜福利片| 一区二区视频免费在线观看| 狂野欧美性猛交| 国产亚洲午夜高清国产拍精品 | 中文字幕av不卡| 三级电影在线看| 99免费精品视频| www.17c.com喷水少妇| 国产一区在线不卡| 超碰人人草人人| 麻豆91精品视频| 牛夜精品久久久久久久| 日本中文字幕一区二区有限公司| 成年人视频网站免费观看| 国产欧美在线| 久久综合九色综合88i| 亚洲欧洲综合| 国产精品一区二区免费在线观看| 黄色精品一区| 国产中文字幕乱人伦在线观看| 欧美日韩午夜| 成年人网站国产| 99国内精品| 波多野结衣家庭教师在线播放| 日韩五码在线| 欧美激情国产精品日韩| 久久av最新网址| 黄色一级免费大片| 免费成人在线网站| 黄大色黄女片18第一次| 九九**精品视频免费播放| 国产免费中文字幕| 国产精品2024| 91传媒理伦片在线观看| 99国产精品国产精品久久| 黄瓜视频污在线观看| 久久九九全国免费| 激情高潮到大叫狂喷水| 日韩美女精品在线| 欧美极品aaaaabbbbb| 亚洲成人av电影| 91在线视频在线观看| 欧美日韩国产中文| 国产视频www| 亚洲第一区第二区| 黄色国产在线| 久久精品2019中文字幕| 欧美xxxx黑人又粗又长| 97久久精品人人澡人人爽缅北| 亚洲精品中文字幕| 国产欧美一区二区白浆黑人| 色悠久久久久综合先锋影音下载| 国产在线一区二| 成人羞羞动漫| 妞干网在线播放| 久久精品九九| 最好看的中文字幕| 久久综合九色综合欧美就去吻| 久久日免费视频| 一区二区三区四区在线播放| 亚洲精品男人的天堂| 777久久久精品| 欧美日韩激情视频一区二区三区| xvideos国产精品| 日产福利视频在线观看| 国产精品丝袜视频| jizz18欧美18| 亚洲精品在线免费看| 在线精品福利| 嫩草视频免费在线观看| 久久综合精品国产一区二区三区| 99久久久免费精品| 日韩欧美高清视频| av免费在线不卡| 亚洲最新在线视频| 日韩少妇视频| 国产精品丝袜久久久久久高清 | 新呦u视频一区二区| 欧美日本久久| 一区二区三区 日韩| 91在线你懂得| 清纯粉嫩极品夜夜嗨av| 欧美无砖专区一中文字| 天堂网在线观看视频| 久久久精品在线观看| 日韩在线免费| 免费久久99精品国产自| 午夜国产精品视频免费体验区| 天美星空大象mv在线观看视频| 99这里只有久久精品视频| 国产午夜手机精彩视频| 欧美中文字幕不卡| 亚洲欧美日韩精品永久在线| 欧美精品在线观看| 精品三级在线| 日韩欧美一区二区在线观看| 久久高清国产| 久久精品aⅴ无码中文字字幕重口| 中文字幕一区av| 欧美高清69hd| 亚洲欧美日韩一区二区三区在线| av日韩国产| 国产欧美日韩在线播放| 一区二区在线影院| 污网站在线免费| 中文字幕av免费专区久久| 成年人视频免费| 亚洲午夜色婷婷在线| 欧美成人性网| 欧美日韩国产高清视频| 亚洲欧美卡通另类91av| 50一60岁老妇女毛片| 亚洲午夜久久久久久久久电影院| 99久久免费国产精精品| 久久久精品国产一区二区| 久久av影院| 亚洲欧美久久234| 久久99精品久久久久久国产越南| www亚洲色图| 欧美日韩精品欧美日韩精品一综合| 国产小视频在线观看| 国产精品18久久久久久首页狼| 一本久久青青| 亚洲精品高清无码视频| 国产欧美视频一区二区三区| 涩涩视频在线观看| 中文字幕日韩欧美在线| 欧美天堂一区| 黄色一级片网址| 国产成人精品一区二区三区四区| 免费毛片在线播放免费| 精品国产成人系列| www.51av欧美视频| 久久精品中文字幕一区二区三区 | 国产精品免费一区豆花| av影片在线一区| wwwwwxxxx日本| 一区二区三区在线高清| 人人妻人人澡人人爽久久av| 91爱视频在线| 欧美美女一区| 伊人免费视频二| 亚洲va欧美va人人爽| 国产精品麻豆一区二区三区| 国产欧美亚洲精品| 欧美日韩网站| 91网站免费入口| 制服丝袜成人动漫| 欧美aaa免费| 欧美日韩在线不卡一区| 美女诱惑一区二区| 毛片a片免费观看| 亚洲人成电影网| 国产专区精品| 国产午夜伦鲁鲁| 国产精品另类一区| 丰满人妻一区二区三区免费| 91精品国产精品| 欧美gayvideo| 挪威xxxx性hd极品| 欧美在线一二三四区| 伊人福利在线| 欧美日韩一区在线播放| 国产一区欧美二区| 精品在线播放视频| 日韩中文字幕第一页| 91亚洲无吗| 欧美日韩在线观看不卡| 亚洲一区免费视频| 国产尤物视频在线| 高清视频一区二区三区| 天堂影院一区二区| 欧美成人精品欧美一级| 亚洲性猛交xxxxwww|