摘要:這段代碼工作正常,盡管沒有用分號在某些場景下是很管用的,特別是,有時候可以幫助減少代碼錯誤。比如不好的寫法盡管這段代碼能正常工作,但代碼中我們應盡量避免使用。
前言在我們平時工作中寫代碼是最頻繁的事情了,但我們的代碼真的"好看"嗎?
預計本文閱讀時間(10分鐘)
正文 1.1--語句結尾我們來看一段代碼
//合法的代碼
var name = "Dreams";
function sayName() {
alert(name);
}
//合法的代碼,但不推薦這樣寫
var name = "Dreams"
function sayName() {
alert(name)
}
這里我們可以看到上面兩段代碼的區別就是在于一段加了分號,一段沒有加,那么問題來了,我們到底該不該加分號?
這里其實有賴于分析的自動分號插入(Automatic Semicolon Insertion, ASI)機制,Javascript代碼省略分號也是可以正常工作的。ASI會自動尋找代碼中應當使用分號但實際沒有分號額位置,并插入分號。大多數場景下ASI都會正確插入分號,不會產生錯誤。但ASI的分號插入規則非常復雜且很難記住,因此推薦大家不要省略分號。看一下這段代碼:
// 原始代碼
function getData() {
return
{
title: "Dreams",
author: "Dreams"
}
}
//分析器會將它理解成
function getData() {
return;
{
title: "Dreams",
author: "Dreams"
};
}
在這段代碼中,函數getData()的本意是返回一個包含一些數據的對象。然而,return之后新起了一行,導致return后被插入了一個分號,這會導致函數返回值是undefined. 可以通過將左花括號移至與return同一行的位置來修復這個問題。
//這段代碼工作正常,盡管沒有用分號
function getData() {
return {
title: "Dreams",
author: "Dreams"
}
}
ASI在某些場景下是很管用的,特別是,有時候ASI可以幫助減少代碼錯誤。當某個場景我們認為不需要插入分號而ASI認為需要插入時,常常會產生錯誤。所以我們盡量養成加分號的習慣,在某種意義上加上分號還提高程序的性能哦!
1.2--換行當一行長度達到了單行最大字符數限制時,就需要手動將一行拆成兩行。通常我們會在運算符后換行,下一行會增加兩個層級的縮進。比如這樣。
在這個例子中,逗號時一個運算符,應當作為前一行的行尾。這個換行位置非常重要,因為ASI機制會在某些場景下在行結束的位置插入分號。總是將一個運算符置為行尾,ASI就不會自作主張地插入分號,也就避免了錯誤的發生。
1.3--命名
我們只要是代碼,都會涉及變量和函數,因此變量和函數命名對于增強代碼可讀性至關重要。那么在js中,ECMAScript推薦我們遵循**駝峰式大小寫(Camel Case)**的命名方式.這種命名方式是小寫字母開始的,后續每個單詞首字母都大寫,比如:
var thisMyName;
var anotherVariable;
var aVeryLongVariableName;
函數的命名
我們推薦函數函數前用動詞開頭
//好的寫法
var count = 10;
var myName = "Dreams"
var found = true
//不好的寫法:變量看起來像函數
var getCount = 10;
var isFound = true;
//好的寫法
function getName() {
return myName;
}
//不好的寫法:函數看起來像變量
function theName() {
return myName;
}
命名是一種學問,更是一門技術!,通常我們應盡量保持盡可能的簡短,抓重點的命名方式。通過函數命就大概可以看出這個是干什么的函數。記住寫代碼永遠不是在給自己寫,而是在給你下一個接手的人寫,所以代碼寫的規范對大家都有好處 我們推薦的函數有:can has is get set 例如:canDo hasClass isBlack getData setData
1.4--nullnull是一個特殊值,但我們常常誤解它,將它和undefined搞混。在下列場景中應當使用null.
用來初始化一個變量
用來和一個已經初始化的變量比較,這個變量可以是也可以不是一個對象
當函數的參數期望是對象時,用作參數傳入。
當函數的返回值期望是對象時,用作返回值傳出
還有下面一些場景不應當使用null.
不要使用null來檢測是否傳入了某個參數。
不要用null來檢測一個未初始化的變量
示例代碼:
//好的用法
var person = null;
function getPerson() {
if (condition) {
return new Person("Dreams");
} else {
return null;
}
}
var person = getPerson();
if (person !== null) {
doSomething();
}
//不好的寫法:用來和未初始化的變量比較
var person;
if (person != null) {
doSomething()
}
//不好的寫法:用來和未初始化的變量比較
var person;
if (person != null) {
doSomething();
}
//不好的寫法:檢測是否傳入了參數
function doSomething(arg1,arg2,arg3,arg4) {
if (arg4 != null) {
doSomethingElse();
}
}
1.5--undefined
undefined是一個特殊值,我們常常把它和null搞混。其中一個讓人頗感困惑的就是null == undefined結果是true。然而,這兩個值的用途卻各不相同。那些沒有被初始化的變量都有一個初始值,即undefined,表示這個變量等待被賦值。比如:
//不好的寫法
var person;
console.log(person === undefined);//true
盡管這段代碼能正常工作,但代碼中我們應盡量避免使用undefined。這個值常常和返回"undefined"的typeof運算符混淆。事實上,typeof的行為也很讓人費解,因為不管值是undefined的變量還是未聲明的變量,typeof運算結果都是"undefined",比如:
//foo未被聲明
var person;
console.log(typeof person);//"undefined"
console.log(typeof foo)//"undefined"
在這段代碼中,person和foo都會導致tpyeof返回"undefined" 當變量未聲明時,如果你使用了一個可能(或可能不會)賦值為一個對象的變量時,則將其賦值為null
//好的做法
var person = null;
console.log(person === null);//true
將變量初始值賦值為null表明了這個變量的意圖,他最終很可能賦值為對象。typeof運算符運算null的類型時返回"object",這樣就可以和undefined區分開了
1.6--對象字面量聲明數組和對象時推薦下面的做法
//好的寫法
var book = {}
var numbers = [1,2,3,4]
//不好的寫法
var book = new Object();
var numbers = new Array(1,2,3,4)
結語
本文內容參考至<<編寫可維護的javascript>>
在日常工作中我們應當合理使用上述方法對變量/方法/對象/數組進行管理,而不是胡亂的起名和管理,這樣會對我們項目后續的維護不利,如果大家還有什么好的習慣,可以在評論區提出哦。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/7356.html
摘要:一旦到達頂層全局作用域,可能找到,也可能沒有找到,查找過程都必須停止。當引擎執行查詢時,如果查詢在所有嵌套的作用域中遍尋不到所需的變量,引擎就會拋出異常。代表作用域判別失敗相關,而則代表作用域判別成功了,但是對結果的操作是非法或不合理的。 什么是作用域 對于幾乎所有編程語言,最基本的功能之一就是能夠存儲變量的值,并且能在之后對這個值進行訪問和修改。這樣就會帶來幾個問題,這些變量存儲在哪...
摘要:圍觀本文需自備,,以及。使用打開,并點擊,會看到模擬器以及此項目對應的內容,效果如下如果想要修改顯示內容,請打開,里面是一堆模樣的東西。接下來,我們按照教程,來展示一張電影海報,為了方便,我們直接修改。 原文鏈接:http://www.tinghaige.com/ 本著什么都要攙和的原則,一起來看看React Native是如何開發iOS APP。 圍觀本文需自備Mac OSX ,...
摘要:如果解析失敗則終止運行。如果新對象的并不匹配當前對象的則拋出異常。替換當前對象為新對象。是替換,也就是說會覆蓋到目標元素之前本身所具有的全部樣式繼承的不算。除此以外,下返回的屬性和值全是大寫,為了避免日后出現意外,還是比較好。 一、cssText之起步 那些年,我們是這樣設置樣式的: xxx.style.width = 233px; xxx.style.position = fix...
摘要:如果解析失敗則終止運行。如果新對象的并不匹配當前對象的則拋出異常。替換當前對象為新對象。是替換,也就是說會覆蓋到目標元素之前本身所具有的全部樣式繼承的不算。除此以外,下返回的屬性和值全是大寫,為了避免日后出現意外,還是比較好。 一、cssText之起步 那些年,我們是這樣設置樣式的: xxx.style.width = 233px; xxx.style.position = fix...
摘要:如有錯誤,歡迎指正。如果使用了進行反向代理,那么和后端的之間默認是用協議通信的。如果不是這樣,最好設置為,因為這會造成額外的開銷。一個比較好的處理方式是放在或級別單獨處理。 無論是前端還是后端,在部署項目時,時常免不了用到Nginx,小項目也時常做個反向代理啥的。今天就簡單直接,聊一下其中的一個點——gzip。如有錯誤,歡迎指正。 一般服務器端常用的是 Ubuntu、CentOS、Li...
閱讀 5282·2021-09-22 15:59
閱讀 1863·2021-08-23 09:42
閱讀 2566·2019-08-29 18:42
閱讀 3451·2019-08-29 10:55
閱讀 2064·2019-08-27 10:57
閱讀 1763·2019-08-26 18:27
閱讀 2728·2019-08-23 18:26
閱讀 2922·2019-08-23 14:40