国产自产第一-国产自产对白一区-国产自产精品-国产自产区44页-国产自产在线-国产自产自拍-国产自产自拍视频-国产自精品

金喜正规买球

如何編寫高質量的Javascript代碼

轉帖|其它|編輯:郝浩|2011-03-17 13:49:37.000|閱讀 415 次

概述:這篇文章不僅僅從代碼本身來考慮如何優(yōu)化編碼,也從代碼的設計階段來考慮,包括書寫API文檔,同事的review,使用JSLint。這些習慣都能幫助你編寫更加高質量的、更易于理解的、可維護的代碼(讓你的代碼在多年之后仍使你引以為傲)。

# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>

  優(yōu)秀的Stoyan Stefanov在他的新書中(《Javascript Patterns》)介紹了很多編寫高質量代碼的技巧,比如避免使用全局變量,使用單一的var關鍵字,循環(huán)式預存長度等等。

  這篇文章不僅僅從代碼本身來考慮如何優(yōu)化編碼,也從代碼的設計階段來考慮,包括書寫API文檔,同事的review,使用JSLint。這些習慣都能幫助你編寫更加高質量的、更易于理解的、可維護的代碼(讓你的代碼在多年之后仍使你引以為傲)。

  編寫可維護的代碼

  軟件的BUG修復需要花費大量的精力。尤其當代碼已經發(fā)布之后,隨著時間的增長,維護的成本愈發(fā)的高。當你一發(fā)現BUG的時候,就立即去修復,這時候你的代碼還是熱乎的,你也不需要回憶,因為就是剛剛寫好的。但是當你做了其他任務,幾乎完全忘記了這份代碼,這時候就需要:

  • 重新學習和理解問題
  • 理解代碼是如何解決問題的

  另外一個問題是,在大項目或者大公司里面,經常是解決BUG的人不是產生BUG的人,而且也不是發(fā)現BUG的人。所以減少理解代碼的時間就是最重要的問題,無論這個代碼是你自己以前寫的還是團隊中的其他成員寫的,因為我們都想去搞搞新的有意思的東西,而不是去維護那些個陳舊的代碼。

  還有一個開發(fā)中的普遍問題就是,往往讀代碼的時間比寫代碼的時間還要多。有時候你鉆研一個問題,可以花整整一個下午的時間來考慮代碼的編寫。這個代碼當時是可以工作的,但是隨著開發(fā)的進行,其他東西發(fā)生了很大的變化,這時候也就需要你自己來重新審查修改編寫代碼。比如:

  • 還有BUG沒有解決
  • 添加了新的功能
  • 程序需要在新的環(huán)境中運行(比如一個新上市的瀏覽器)
  • 代碼有問題
  • 代碼需要重寫因為修改了架構甚至要使用另一個語言

  因為這些原因,也許你當時一個下午寫好的代碼,后面需要花費幾周的時間來閱讀。所以編寫可維護的代碼對于軟件的成功至關重要。

  可維護的代碼包括:

  • 可讀性
  • 連續(xù)性
  • 預見性
  • 看起來是一個人寫的
  • 有文檔

  最少化全局變量

  Javascript使用函數來約定作用域。一個在函數內部聲明的變量在外部是不可見的。所以,全局變量也就是聲明在任何函數之外的或者沒有被聲明的變量。

  Javascript中,在任何函數之外有個可訪問的全局對象,每一個你創(chuàng)建的全局變量都是這個對象的一個屬性。在瀏覽器中,為了方便,通常用window來指代這個全局變量。下面的代碼就是說明如何創(chuàng)建一個全局變量:

myglobal = "hello"; // antipattern
console.log(myglobal); // "hello"
console.log(window.myglobal); // "hello"
console.log(window["myglobal"]); // "hello"
console.log(this.myglobal); // "hello

  全局變量的問題

  全局變量的問題在于,他在你的所有代碼或者一個頁面中都共享。他們在同一個命名空間下面,這通常會造成變量名沖突–兩個同名的變量,但是確實不同的用處。

  通常在一些頁面中需要引入一些其他人的代碼,比如:

  • 第三方的JS庫
  • 廣告伙伴的腳本
  • 第三方的用戶行為分析或者統(tǒng)計腳本
  • 不同的組件、按鈕等等

  加入其中一個第三方組件定義了一個全局變量:result。然后在你的程序中,也定義了一個全局變量result。最后的這個result會覆蓋點之前的result,這樣第三方的腳本就會停止工作。

  所以,為了對其他的腳本友好,在一個頁面中使用越少的全局變量越好。在后面會有一些方法來告訴你如何減少全局變量,比如使用命名空間,或者自執(zhí)行的匿名函數,但是最好的避免全局變量的方法就是使用var關鍵字來聲明變量。

  因為javascript的兩個特性,創(chuàng)建一個全局變量非常的簡單。第一,你可以使用一個甚至沒有聲明的變量,第二,在javascript中,所有未聲明的變量都會成為全局對象的一個屬性(就像一個聲明了的全局變量一樣)。看看這個例子:

function sum(x,y){
result = x + y;
return result;
}

  在這個代碼中,result在沒有被聲明的情況下就被使用了,這個代碼也能很好的工作,但是在調用了這個函數之后,就會多一個名為result的全局變量,這是所有問題的根源了。

  解決這個問題的辦法就是使用var:

function sum(x,y){
var result = x + y;
return result;
}

  兩外一個不好的習慣就是在聲明變量的時候使用鏈式的方法來賦值,這時候,a是局部變量,但是b就成為了全局變量。

function foo(){
var a=b=0;
....
}

  這是因為,b = 0這個表達式先執(zhí)行,執(zhí)行的時候b并沒有被聲明,所以b就成為了全局變量,然后返回這個表達式的值0,給聲明了的變量a,換句話說,就好像你輸入的是:

var a = (b=0);

  如果你已經聲明變量,那么這種鏈式的賦值沒有問題:

function foo(){
var a,b;
...
}

  另外一個避免使用全局變量的原因是考慮到程序的可移植性。如果你想讓你的代碼在不同的環(huán)境中都可以工作,那么使用全局變量就很可能會與新的系統(tǒng)中的全局變量沖突(或許在之前的系統(tǒng)中沒有問題)。

  忘記var的影響

  使用var聲明的全局變量和沒有使用var生成的全局變量還有一個區(qū)別在于刪除:

  使用var聲明創(chuàng)建的全局變量不能被刪除

  沒有使用var聲明的全局變量可以被刪除

  這說明沒有使用var聲明生成的全局變量不是真正的變量,他們只是全局對象的屬性。屬性可以通過delete刪除,但是變量不行:

// define three globals
var global_var = 1;
global_novar = 2; // antipattern
(function () {
global_fromfunc = 3; // antipattern
}());

// attempt to delete
delete global_var; // false
delete global_novar; // true
delete global_fromfunc; // true

// test the deletion
typeof global_var; // "number"
typeof global_novar; // "undefined"
typeof global_fromfunc; // "undefined"

  在ES5的嚴格模式下,給一個為聲明的變量賦值會報錯。

  讀取全局對象

  在瀏覽器中,你可以通過window變量來讀取全局對象(除非你在函數內部重新定義了window對象)。但在有的環(huán)境中,可能不叫window,那么你可以使用下面的代碼來獲取全局對象:

var global = (function(){
return this;
})();

  這樣可以獲取到全局對象的原因是在function的內部,this指向全局對象。但是這在ES5的嚴格模式下會不起作用,你需要適配一些其他模式。當你開發(fā)自己的庫的時候,你可以把你的代碼封裝在一個立即函數中,然后將this作為一個參數傳進來。

  單個var模式

  在你的代碼的頂部只是用一個var關鍵字,會有以下的好處:

  • 對于所有需要的變量,在一個地方就可以全部看到
  • 避免使用一個未定義的變量
  • 幫助你記憶聲明的變量,減少全局變量
  • 更精簡的代碼

  書寫很簡單:

function func() {
var a = 1,
b = 2,
sum = a + b,
myobject = {},
i,
j;
// function body...
}

  通過一個var和逗號來聲明多個變量。在聲明的時候給變量賦默認值也是不錯的做法,可以避免一些邏輯錯誤,提高代碼的可讀性。而后你閱讀的代碼的時候也可以根據變量的默認值來方便的猜測變量的用途。

  你也可以在聲明變量的時候做一些實際的工作,比如sum = a + b;另外,在操作DOM元素的時候,你也可以把DOM元素的引用保存在一個變量中:

function updateElement() {
var el = document.getElementById("result"),
style = el.style;
// do something with el and style...
}

  濫用了的var

  JavaScript允許你在函數內部有多個var語句,但是卻都表現的如同在函數的頂部聲明一樣。這個特性在你使用一個變量然后在后面又聲明了這個變量時會導致一些奇怪的邏輯問題。對于JavaScript來說,只要變量在同一個作用域,那么就認為是聲明了的,就算是在var語句之前使用也一樣。看看這個例子:

myname = "global"; // global variable
function func() {
alert(myname); // "undefined"
var myname = "local";
alert(myname); // "local"
}
func();

  在這個例子中,或許你期望第一次會彈出global,第二次彈出local。因為第一次的時候沒有還沒有使用var聲明myname,這是應該是全局變量的myname,第二次聲明了,然后alert之后應該是local的值。而事實上不是這樣的,只要你在函數中出現了var myname,那么js就認為你在這個函數中聲明了這個變量,但是在讀取這個變量的值的時候,因為var語句還沒有執(zhí)行,所以是undefined,很奇怪的邏輯吧。上面的代碼相當于:

myname = "global"; // global variable
function func() {
var myname; // same as -> var myname = undefined;
alert(myname); // "undefined"
myname = "local";
alert(myname); // "local"
}
func();

  我們來解釋一下這個現象,在代碼的解析中,分兩個步驟,第一步先處理變量函數的聲明,這一步處理整個代碼的上下文。第二步就是代碼的運行時,創(chuàng)建函數表達式以及未定義的變量。實際上,我們只是假設了這個概念,這并不在ECMAScript的規(guī)范中,但是這個行為常常就是這樣解釋的。

  for循環(huán)

  在for循環(huán)中你會去迭代一些數組元素或者一些HTML元素。for循環(huán)常常如此:

for (var i = 0; i < myarray.length; i++) {
// do something with myarray[i]
}

  這樣寫的問題在于,每一次迭代的時候都會計算數組的長度,尤其在這個參數不是一個數組而是一組HTML元素的時候會降低你的程序的性能。

  HTML元素的集合在頁面上,這樣每次都會去再頁面上查找相應的元素,這是非常耗時的。所以對于for循環(huán),你需要預先保存數組的長度,這樣寫:

for (var i = 0, max = myarray.length; i < max; i++) {
// do something with myarray[i]
}

  這樣緩存了參數的長度,在每次迭代的時候就不用再去查找計算了。

  在查找HTML元素集合的時候,緩存參數長度可以帶來可觀的性能提升,Safari下面提高兩倍的速度,在IE7下面提高190倍的速度。

  需要注意的是,當你需要操作修改DOM元素的數量的時候,你肯定希望這個值是隨時更新的而不是一個常量。

  使用下面的單一var模式,你也可以把var提到循環(huán)之外:

function looper() {
var i = 0,
max,
myarray = [];
// ...
for (i = 0, max = myarray.length; i < max; i++) {
// do something with myarray[i]
}
}

  這個模式可以增強整個代碼的連續(xù)性,但是不好的一點是當你重構代碼的時候復制粘貼就沒那么容易了。例如:如果你想在其他函數中也使用這個循環(huán),那你需要確定在新的函數中處理好了i和max(或許還需要刪掉這個)。

  這個函數還有兩個點可以優(yōu)化的:

  • 可以少一個變量(不需要max)
  • 遞減到0,一個數字與0比較比這個數字與另外一個數字比較更快

  所以就可以寫為:

var i, myarray = [];
for (i = myarray.length; i--;) {
// do something with myarray[i]
}

  針對第二點:

var myarray = [],
i = myarray.length;
while (i--) {
// do something with myarray[i]
}

  這是兩個比較微小的點的優(yōu)化。另外,JSLint可能對于i–會有意見。

  for-in循環(huán)

  for-in循環(huán)用來迭代非數組的對象。使用for-in循環(huán)通常也成為枚舉。

  從技術上來說,你也可以用for-in來循環(huán)數組,因為數組也是對象,但是不推薦。如果數組有一些自定義的擴展函數,那么就會出錯。另外,對象屬性的順序在for-in循環(huán)中也是不確定的。所以最好還是用普通的循環(huán)來循環(huán)數組用for-in來循環(huán)對象。

  在循環(huán)對象的過程中,使用hasOwnProperty()方法來檢驗是對象本身的屬性還是原型鏈上的屬性很重要。

  看看下面的這個例子。

// the object
var man = {
hands: 2,
legs: 2,
heads: 1
};

// somewhere else in the code
// a method was added to all objects
if (typeof Object.prototype.clone === "undefined") {
Object.prototype.clone = function () {};
}

  在這個例子中,我們有一個簡單的稱作man的對象字面量。在其他man定義之前或之后的地方,對象原型有一個很有用的clone()方法。因為原型鏈的原因,所有的對象都自動獲得了這個方法。為了在枚舉man對象的時候出現clone方法,你需要使用hasOwnProperty方法來區(qū)別。如果沒有區(qū)別來自原型鏈的方法,那么就會有一些意想不到的事情發(fā)生:

// 1.
// for-in loop
for (var i in man) {
if (man.hasOwnProperty(i)) { // filter
console.log(i, ":", man[i]);
}
}
/* result in the console
hands : 2
legs : 2
heads : 1
*/
// 2.
// antipattern:
// for-in loop without checking hasOwnProperty()
for (var i in man) {
console.log(i, ":", man[i]);
}
/*
result in the console
hands : 2
legs : 2
heads : 1
clone: function()
*/

  另外一種使用方法如下:

for (var i in man) {
if (Object.prototype.hasOwnProperty.call(man, i)) { // filter
console.log(i, ":", man[i]);
}
}

  這樣寫的好處是可以防止man重新定義了hasOwnProperty方法導致的沖突。如果不想寫這么長的一串,你也可以這樣:

var i, hasOwn = Object.prototype.hasOwnProperty;
for (i in man) {
if (hasOwn.call(man, i)) { // filter
console.log(i, ":", man[i]);
}
}

  嚴格意義上講,不適用hasOwnProperty也不是什么錯誤。根據任務的難度和你對代碼的自信程度,你也可以不用這個直接循環(huán)。但是當你不確定的時候,最好還是使用這個方法檢測一下。

  另外一種格式上的改變(不會通過jsLint的檢查),去掉for的大括號,然后把if放在同一行。這樣做的好處可以讓循環(huán)體更加突出,縮進也就少一些:

// Warning: doesn't pass JSLint
var i, hasOwn = Object.prototype.hasOwnProperty;
for (i in man) if (hasOwn.call(man, i)) { // filter
console.log(i, ":", man[i]);
}

  不要擴展內建的原型

  擴展原型的構造函數,可以提供一些很強大的功能,但是有時候他太強大了。

  有時候你會去擴展Object(),Array(),Fucntion()的原型方法,這樣會導致可維護性的問題,因為這會讓你的代碼的移植性變差。其他的開發(fā)人員使用你的代碼的時候,可能只需要原生的方法,并不需要額外的功能。

  另外,你添加進去的方法,如果在循環(huán)的時候沒有使用hasOwnProperty方法就會被遍歷出來,這會讓人很迷惑。

  所以,最好還是不要擴展基本的對象。除非是下面的情況:

  • 你確定在將來根據ECMAScript規(guī)范,瀏覽器會添加相應的原型方法,那么是可以的,你只不過是提前實現了這個功能。
  • 你確定的你要實現的方法不存在–或許有時候在代碼的其他的地方實現了,或者有的瀏覽器支持,這都是不行的。
  • 有非常清晰的文檔,并且與團隊成員溝通過

  如果在這些情況之下,那么你就可以添加,最好是下面這種形式:

if (typeof Object.prototype.myMethod !== "function") {
Object.prototype.myMethod = function () {
// implementation...
};
}

  switch模式

  按照下面的風格寫switch的話,可以提高你的代碼可讀性和健壯性:

var inspect_me = 0,
result = '';
switch (inspect_me) {
case 0:
result = "zero";
break;
case 1:
result = "one";
break;
default:
result = "unknown";
}

  需要注意下面幾個方面:

  • 將case和switch對齊。
  • case的內容縮進
  • 每一個case之后都有一個清晰的break
  • 避免順序往下執(zhí)行case,非要如此的話,文檔一定要寫清楚
  • 最后使用default,保證在沒有命中case的情況下也有反饋

  避免隱藏的類型轉換

  Javascript在你比較兩個變量的時候會進行類型的轉換,這就是為什么 false == 0或者”" == 0會返回true。

  為了避免這種隱藏的類型轉換帶來的迷惑,最好使用===或者!==操作符來比較:

var zero = 0;
if (zero === false) {
// not executing because zero is 0, not false
}
 
// antipattern
if (zero == false) {
// this block is executed...
}

  還有另外一種流派持這樣的觀點:當==夠用時使用===就是多余的。比如,當你使用typeof的時候你知道會返回string,所以沒必要使用嚴格的檢驗。然而,JSLint要求嚴格檢驗;他最大程度使代碼在閱讀的時候減少歧義,(“這個==是故意呢還是疏漏?”)。

  避免使用

  如果你在你的代碼中使用。如果代碼是在運行時動態(tài)確定的,那么也有其他更安全的辦法。例如使用方括號形式訪問元素的屬性:

// antipattern
var property = "name";
alert(;
 
// preferred
var property = "name";
alert(obj[property]);

  使用還有安全問題,比如你運行網絡上的一段代碼,而這段代碼又被別人篡改了。在處理Ajax請求返回的JSON數據的時候,最好還是使用瀏覽器內建的處理方法,如果對于低端的瀏覽器不支持的,可以從JSON.org上下載對應的處理庫。

  另外還要記住使用setTimeout、setInterval以及Function的構造函數的是,傳入的字符串的參數,js的處理方法跟類似,所以也要注意。因為,js會把你傳入的字符串解析執(zhí)行:

// antipatterns
setTimeout("myFunc()", 1000);
setTimeout("myFunc(1, 2, 3)", 1000);
 
// preferred
setTimeout(myFunc, 1000);
setTimeout(function () {
myFunc(1, 2, 3);
}, 1000);

  使用Function的構造函數,跟生成全局變量的辦法就是使用匿名函數。

  看看下面這個例子,只有un變量最終是全局的:

console.log(typeof un); // "undefined"
console.log(typeof deux); // "undefined"
console.log(typeof trois); // "undefined"
 
var jsstring = "var un = 1; console.log(un);";
; // logs "1"
 
jsstring = "var deux = 2; console.log(deux);";
new Function(jsstring)(); // logs "2"
 
jsstring = "var trois = 3; console.log(trois);";
(function () {
;
}()); // logs "3"
 
console.log(typeof un); // number
console.log(typeof deux); // undefined
console.log(typeof trois); // undefined

  會影響到作用域,而Function則相當于一個沙盒。例如:

(function () {
var local = 1;
; // logs 3
console.log(local); // logs 3
}());
 
(function () {
var local = 1;
Function("console.log(typeof local);")(); // logs undefined
}());

  使用parseInt()轉換處理數字

  使用parseInt()你可以將字符串轉為數字。這個方法支持第二個表示進制的參數,常常被忽略。問題常常在處理一段以0開始的字符串的時候。在ECMAS3標準中,以0開始表示八進制,但是在ES5中又改了,所以為了避免麻煩,最好還是標明第二個參數。

var month = "06",
year = "09";
month = parseInt(month, 10);
year = parseInt(year, 10);

  在這個例子中,如果你使用parseInt(year),就會返回0,因為09被認為是8進制數字,然而9是非法的八進制字符,所以返回0。

  其他的可以把字符串轉為數字的方法有:

+"08" // result is 8
Number("08") // 8

  這些通常都比parseInt()快一些,因為parseInt并不只是簡單的轉換。但是如果你的輸入是&rdquo;08 hello”這樣的,那么parseInt()也會返回8,但是其他的方法就只能返回NaN。

  編碼規(guī)范

  編碼的時候遵循一定的規(guī)范,可以讓你的代碼增強可移植性,并且更加便于閱讀和理解。加入團隊的新人,在閱讀了代碼規(guī)范之后,可以更加快速的溶入團隊,并理解其他人員開發(fā)的代碼。

  在一些討論會議上,規(guī)范往往都是爭論的焦點(比如縮進的形式)。所以如果你打算為你團隊的編碼規(guī)范提一些建議,那就準備好一場激烈的辯論和反對意見。要記住,建立和實施規(guī)范是非常重要的。

  縮進

  代碼如果沒有縮進,那基本上沒法閱讀了。比這更糟的是不規(guī)范的縮進,看著好像縮進了,但是亂七八糟摸不著頭腦。所以縮進的使用必須規(guī)范。

  有些開發(fā)人員喜歡使用tab鍵來縮進,因為在每一個編輯器里面都可以自己設置想要的tab值。有的人喜歡四個空格。如果團隊遵循統(tǒng)一的規(guī)范,這也不是什么問題。比如本文就是四個空格,這也是JSLint推薦的。

  那么什么該縮進呢?很簡單,大括號。這樣就是說包括函數體,循環(huán),ifs,switch,以及對象字面量的屬性。看看這個例子:

function outer(a, b) {
var c = 1,
d = 2,
inner;
if (a > b) {
inner = function () {
return {
r: c - d
};
};
} else {
inner = function () {
return {
r: c + d
};
};
}
return inner;
}

  大括號

  應該使用大括號,尤其在那些可用可不用的地方,如果你的if語句或者for循環(huán)只有一句話,那么大括號不是必須的,但是這種時候最好用大括號。這可以讓代碼保持一致,并且便于升級。

  假設你的for循環(huán)只有一句。你可以不用大括號,也不會有什么錯誤。

// bad practice
for (var i = 0; i < 10; i += 1)
alert(i);

  但是假如你以后要在這個循環(huán)里面添加其他東西呢?

// bad practice
for (var i = 0; i < 10; i += 1)
alert(i);
alert(i + " is " + (i % 2 ? "odd" : "even&quot;));

  這時候,雖然第二個alert有縮進,但他還是在循環(huán)之外的。所以,無論何時,都應該是用大括號。if語句一樣:

// bad
if (true)
alert(1);
else
alert(2);
 
// better
if (true) {
alert(1);
} else {
alert(2);
}

  大括號位置

  開發(fā)人員也經常爭論大括號的位置,放在同一行還是下一行呢?

  在具體的例子中,這是個見仁見智的問題。但也有例外,假如程序根據不同的位置做不同的解析呢?這是因為插入分號機制,js對此并不挑剔,他會在你沒有添加分號的行之后幫你添加。這在函數返回一個對象字面量然后大括號寫在下一行的時候出問題:

// warning: unexpected return value
function func() {
return
// 下面的讀取不到
{
name : "Batman"
}
}

  如果你想讓這個函數返回一個有name屬性的對象字面量,這個函數是做不到的,因為插入的分號,返回的應該是一個undefied值。

  所以,最后的結論是,必須使用大括號,并且寫在同一行。

function func() {
return {
name : "Batman"
};
}

  關于分號:跟大括號一樣,必須寫。這不只是推行嚴格的寫程序的規(guī)范,更是在必要的時候解決一些不清楚的地方,比如前面的例子。

  空格

  正確的使用空格也可以增加程序的可讀性和連貫性。寫句子的時候你會在逗號和句號之后有一些停頓。在js中可以模仿這樣的邏輯。

  應該使用空格地方有:

  • 循環(huán)中的分號之后
  • 循環(huán)中的變量初始化for (var i = 0, max = 10; i < max; i += 1) {…}
  • 數組中的逗號分隔符之后var a = [1, 2, 3];
  • 對象字面量中的逗號var o = {a: 1, b: 2}
  • 函數參數間myFunc(a, b, c)
  • 在函數聲明時候的大括號前面function myFunc() {}
  • 匿名函數var myFunc = function () {};

  另外一些使用空格比較好的地方就是在那些操作符的兩邊,比如+, -, *, =, <, >, <=, >=, ===, !==, &&, ||, +=,等等。

// generous and consistent spacing
// makes the code easier to read
// allowing it to "breathe"
var d = 0,
a = b + 1;
if (a && b && c) {
d = a % c;
a += d;
}
 
// antipattern
// missing or inconsistent spaces
// make the code confusing
var d = 0,
a = b + 1;
if (a && b && c) {
d = a % c;
a += d;
}

  最后一個關于空格要注意的,大括號前面的空格。最好使用空格:

  • 在函數定義,id-else,case,循環(huán)以及對象字面量的大括號前面使用空格
  • 在大括號}與else、while之間使用空格

  反對增加空格的一個說法是增加文件體積,但是在壓縮之后并不存在這個問題。提高代碼可讀性經常被忽視的一個方面就是垂直的空格,你可以使用空行來分開代碼,就好像寫文章時候的段落一樣。

  命名規(guī)范

  可以提高代碼移植性和可維護性的一個方面是命名規(guī)范。也就是說,在取變量名的時候總是采取一貫的做法。

無論采用什么樣的命名規(guī)范,其實都不是很重要,重要的是確定下來這個規(guī)范,然后遵守它。

  構造函數首字母大寫

  javascript中沒有類,但是可以使用new來達到同樣的目的。

  因為構造函數也是函數,如果能從名字上就能區(qū)別它是構造函數還是普通函數,對于開發(fā)者是非常有用的。所以將構造函數的首字母大寫,普通函數的首字母小寫作為提示。這樣一眼就能區(qū)別。

  單詞的分隔

  當你的變量名或者函數名是由好幾個單詞構成的時候,如果能順利區(qū)分變量名由那幾個單詞構成,也是非常不錯的體驗。這種命名規(guī)范成為駝峰式。所謂駝峰式就是以小寫字母開始,后面的每個單詞第一個字母大寫。

  對于構造函數第一個字母大寫,MyConstructor(),對于普通的函數,就采用駝峰式myFunction(),  calculateArea()。

  那么變量怎么辦呢,有的人使用駝峰式,但是更好的辦法是使用下劃線來區(qū)分。first_name,favorite_bands, 以及 old_company_name。這也可以讓你一眼就能區(qū)分函數和變量。

  其他命名規(guī)范

  有時候,開發(fā)人員也會使用命名規(guī)范來替代和彌補一些語言的特性。

  例如,在javascript中,并沒有提供定義常量的辦法(雖然有Number.MAX_VALUE),所以開發(fā)人員使用全大寫的名稱來表示不可更改的常量。var PI = 3.14, MAX_WIDTH = 800。

  另外一種規(guī)范是使用全局變量名的首字母。這樣做可以強化開發(fā)者使全局變量最少,并且容易辨認。

  另外一種規(guī)范是在函數中模擬私有成員。雖然可以在javascript中實現私有變量,但是開發(fā)人員為了更加容易區(qū)別,所以給他加一個下劃線的前綴。例如:

var person = {
getName: function () {
return this._getFirst() + ' ' + this._getLast();
},
 
_getFirst: function () {
// ...
},
_getLast: function () {
// ...
}
};

  在這個例子中,getName是一個公有函數,是API的一部分,_getFirst,_getLast本意是私有的。雖然仍然是公有函數,但hi加上了這個前綴,表示在以后的版本中不保證能運行,所以不應該被直接使用。注意在JSLint中不推薦這樣做,除非你設置nomen選項為false。

  還有其他幾種表示私有成員的規(guī)范:

  • 在末尾使用下劃線,比如name_以及getElements_
  • 使用一個下劃線表示保護成員_protected,兩個下劃線表示私有成員__private
  • 在firefox中,有些不是語言原生的變量,以兩個下劃線開始,兩個下劃線結束__proto__以及__parent__

  寫注釋

  必須給你的代碼寫注釋,就算它看起來不會被別人接手。有時候,你研究完一個問題,然后你看著代碼覺得那是顯而易見的,但是過一兩周之后回頭再看,你也會摸不著頭腦的。

  當然,也不能過分的注釋:每個變量每一行代碼都注釋。但是通常都需要對函數的功能,參數,返回值寫文檔,以及一些其他的復雜的邏輯和算法。想想,你的代碼的閱讀者,只需要讀注釋就能大體上了解你的代碼在做什么需要什么,這比直接讀代碼理解要快的多。當你有五六行的代碼是做一個具體的任務,那么閱讀者就可以通過一行代碼了解你的目的,然后跳過這些代碼。關于注釋,沒有硬性的比例說是多少代碼需要多少注釋。有時候,有些代碼(比如正則表達式)注釋的內容肯定比代碼本身多。

  寫注釋是必須遵守的規(guī)范,而且要保持注釋的更新,一個過時的注釋帶給人的迷惑還不如不寫注釋。


標簽:

本站文章除注明轉載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn

文章轉載自:博客園

為你推薦

  • 推薦視頻
  • 推薦活動
  • 推薦產品
  • 推薦文章
  • 慧都慧問
掃碼咨詢


添加微信 立即咨詢

電話咨詢

客服熱線
023-68661681

TOP
主站蜘蛛池模板: 日韩精品在 | 欧美日韩国产在线观看 | 欧美成人网站在线 | 久久精华一曲二曲三曲 | 成人猫咪社区 | 爆操人妖| 国产美女在线观看 | 日韩另类视频 | 欧美日韩国产一区二区 | 日韩欧美插| 在线国产三级片 | 国产精品偷伦免费观看 | 深爱五月激情五月 | A片小视频| 超碰成人人人操 | 资源天堂一区二区 | 欧美三区视频 | 欧美高清性爱视频 | 国产人妖黑妖人... 国产人妖第二 | 国产正品一区 | 成人三级电影 | 女同一区 | 午夜看片免费 | 国产99页 | 一区二区三区伦理片 | 国偷自拍 | 日韩字幕在线观看 | 一区二区三区伦理片 | 久草资源福利站 | 日韩免费无 | 日韩日韩日韩日韩 | 深夜福利视频一区二区 | 日韩在线观看欧美尤物 | 午夜福利精品在线观看 | 日韩国产在线不 | 日韩成人教师在线观 | 91网页| 成人午夜免费在线视频 | 日韩欧美国产完整版 | 国产乱人视频免费观看 | 午夜黄片免费看 | 日韩精品精品第一区 | 成人黄片免费看 | 日韩欧美另类在线视频 | 午夜福利鸡 | 国产sm调| 国产第2页| 人人操夜夜操 | 国产又粗又大又爽视频 | 一区二区视 | 国产青青草 | 国产精品激情在线观看 | 三级在线无码观看 | 夜夜嗨一区二区三区 | 玖玖爱精品视频 | 成人污视频网站 | 午夜视频官网 | 久久加勒比 | 欧美日韩在线免费观看 | 日韩精品欧美大片 | 国产视频午夜 | 国产美女视频网站 | 国产视频三区 | 成人午夜剧场视频网站 | 国产欧美久 | 玖玖爱电影 | 成人瑟瑟在线观看 | 久久er| 国产三级视频在线播放 | 日韩一级不卡 | 在线免费观看福利姬 | 92在线视频| 国产视频高清 | 自拍第一页在线 | 三级片视频网站 | 日韩欧美三级伦理 | 另类视频| 偷自拍99| 99这里只有精品 | 国产主播专区 | 免费黄色av网址 | 成人深夜福利网站 | 成人免费观看片 | 极品精品| 日韩国产在线一区二区 | 午夜在线电影院 | 丝袜美腿中出 | 久久不卡影院 | 国产精品露脸精 | 国产不卡免费 | 国产精品国产18 | 国产极品国产极品 | 精品国产一区二区久 | 日韩伦理片 | 国产亚洲无码在线观看 | 黄色毛片免费观看 | 深夜成人在线观看 | 国产麻豆久久 | 国产大片在线观看 | 国产精品一级 | 国产乱在线 | 亚洲国产成人av | 欧美1区| 日韩欧美另类加勒比 | 日韩午夜免费观看 | 成人影院中文字幕 | 国产探花一区 | 成人福利网站在线观看 | 日韩精品极品 | 午夜成人精品网 | 97视频在线免费观看 | 国产精品极品白 | 日韩成人精品在线观看 | 日韩欧美小视频 | 日韩精品一区二区中 | 成人动漫h在线观看 | 三级无码孕妇免费 | 国产资源网 | 日韩国产在线不卡高清 | 欧美精品在线观看 | 深夜福利视频网 | 精品国自产在线观看 | 国产20页| 伦利理午夜理论片 | 91色站| 极品精品| 日韩欧美手机在线 | 另类图片激情 | 夜夜操狠狠干 | 日韩欧美一页综合区 | 日韩欧美一区国产在线 | 三级成人网站 | 日韩精品亚洲电影天堂 | 日本草莓视频在线观看 | 日韩电影亚洲 | 成人青草亚洲国产 | 神马午夜电影 | 国产黑丝在线 | 午夜福利视频在线观看 | 三级熟女| 国产精品久久久久不卡 | 四虎最新地址 | 天天拍天天操 | 亚洲国产精品色色 | 日韩喷水 | 国产精品xx | 亚洲性网站 | 日韩专区国产在线 | 97超碰免费| 国产一卡二卡在线 | 五月婷婷六月丁香综合 | 日韩成人不卡 | 成人一区精品在线观看 | 日韩国产午夜在线精品 | 97操操| 国产妇妻操逼 | 国产白领| 国产无码在线影院 | 97精品一区 | 日韩精品影视 | 欧美日韩精品一区二区 | 国产三级视频观看 | 三级中文字幕不卡 | 成人精品在线观看 | 成人美女 | 国产高清乱理 | 国产xxxx | 日韩国产综合精选 | 不卡的无码在线观看 | 国产91精品夜未央! 国产91精品新入口 国产91精品系 | 欧美精品2 | 日韩av电影一区 | 成人h视频 | 成人日韩国产在线 | 成人国产欧美大片一区 | 日韩v亚洲v欧美 | 亚洲美女爱爱 | 国产三级完整版 | 国产区一区| 国产做爱视频网站18 | 天天干天天日天天操 | 欧美视频色| 成人午夜福利在线视频 | 福利网址 | 成人免费A片白浆 | 成人高清在线播放视频 | 欧美性爱站 | 国产看色免费 | st人妖婷婷 | 午夜成人婷婷免费影院 | 日本东京热视频 | 日韩欧美国产免费观看 | 日韩视频免费 | 欧美成人免费观看 | 国产91网站在线 | 老司机操逼视频 | 最新国产中文字幕 | 成人伊人 | 国产乱论 | 国产乱伦大全 | 日韩中文在线青柠影 | 亚洲啊v | 日韩一区二区在线31 | 日韩精品免费视频一区 | 日韩国产二区不卡在线 | 日韩二区在线 | 日韩欧美一区在线 | 在线天堂1| 在线观看日本黄色网址 | 国产尤物 | 成人免费午夜 | 韩国日本三级在线 | 成人国产精品秘 | 日韩美女爱爱 | 福利姬视频网站 | AV在线一区二区三区 | 午夜伦理电影院 | 香蕉福利导航 | 成人AV麻豆 | 日韩理论影院 | 不卡av在线观看 | 国产熟女露脸 | 日韩成人AV一区二区 | 日韩亚洲欧美在线观 | 日韩欧美亚洲 | 国产91精品秘入口 | 成人午夜免费影院 | 91自拍亚洲 | 日韩亚洲中文午夜 | 日韩一区二区三免 | 四房激情网 | 成人免费网址 | 亚洲图片小说综合 | 国内自拍在线 | 国产三级HD三级精品 | 三级无码孕妇免费 | 欧美精品欧美精品系列 | 中文字幕久久影视 | 岛国av免费观看 | 日韩中文字幕在线有码 | 午夜电影院 | 三级视屏| 夜夜嗨影院 | 亚洲国产激情 | 制服丝袜家庭乱伦 | 日韩不卡高 | 亚洲人成乱码精品一区 | 岛国大片在线一 | 午夜成人AⅤ在线观看 | 91视频免费在线观看 | 精品黄网 | 成人污污视频在线观看 | 日韩第五页 | 国产丰满岳 | 熟妇熟女乱 | 国产精品自拍露脸视频 | 日韩精品社区 | 国产人妻精品 | 精品精免费精品产品 | 日韩成人午夜电影 | 成人福利影视在线观看 | 亚洲精选在线 | 高潮喷水无码 | 日韩亚洲中文国产 | 国产少萝视频麻豆 | 三级黄视频在线观看 | 日韩理论电影在线播放 | 成人三级视频在线观看 | 国产正品一区 | 日韩一区欧美一区 | 三级视频国 | 福利在线新资源 | 四虎最新网| 成人三级伦理片 | 日韩福利一区 | 日韩无码电影 | 日韩电影理论 | 日韩成人视频网 | 尤物视频网在线观看 | 亚洲成人激情小说网 | 色77成人影院 | 人妻专区 | 无码网站在线观看 | 日韩在线中文天天更新 | 日韩亚洲国产综合高清 | 成人羞羞无遮 | 国産精品久久久久久久 | 岛国av.无码专区 | 91天堂影院| 国产成人精品三级麻豆 | 国产精品亚洲精品性色 | 国产精品福利 | 成人午夜a级毛 | 欧美性爱第2页 | 国产精品一二三 | 草逼123 | 国产免费人成 | 国产又粗又大又爽 | 日韩精品社区 | 国产日韩网站 | 麻豆传媒在线观看 | 日韩a级电影 | 日韩福利视频网 | 无码免费不卡 | 国产午夜国产 | 黄色av电影在线观看 | 一区二区蜜桃臀 | 久久不卡在线 | 国产综合成人 | 华人性爱自拍 | www三级网站 | 欧美性爱一 | 精品毛片 | 成人一区二免费视频 | 日韩中文在线卡通动漫 | 日韩欧美一区二区尤物 | 国产熟女网站 | 日韩特黄一级e片 | 精品一区二区三区三区 | 久久国产一区二区 | 蜜桃一区| 91视频国产区 | 日韩在线免费看网站 | 深夜被窝福利 | 午夜人人| 黑人免费视频 | 日韩一区中文 | 日韩美女在线观看 | 国产成人无码三级 | 日韩大片网址 | 日韩aⅴ黄日韩a影片 | 日韩欧美一区国产在线 | 成人午夜电影在线 | 国产l精品国产亚洲 | 国产区在线观看 | 成人免费网站 | 欧美黄色性爱网站 | 无码午夜视频在线观看 | 日韩欧美一二三区激情 | 日韩伦理片在线观看 | 亚洲导航深夜福利 | 老牛影视入口 | 福利导航在线 | 国产又粗又黄又爽又硬 | 男男三级免费看 | 激情五月深爱五月 | 午夜福利成人片在线看 | 口爆深喉| 丰满多毛的大陰户特写 | 五月婷婷六月丁 | 三级中文亚洲精品字幕 | 国产91丝袜在线18 | 97综合| 日本色一道 | 97资源人人操 | 日韩亚洲中文 | 日韩欧美亚洲中文乱码 | 国产原创视频在线 | 久久综合大全 | 日韩精品系列在线 | 日韩国产亚洲综 | 五月婷婷丁香网 | 国产又黄又粗 | 成人毛片网 | 国产日屄 | 真实国产亂伦视频 | 日韩AV一二三 | 夜色邦福利网 | 国产偷拍自拍视频 | 午夜影院黄色 | 国产精品成人国产乱 | 国产乱伦视频网站 | 黄色三级网站免费 | 高潮喷水无码 | 深爱五月激情五月 | 日韩欧美在线中文字幕 | 最新的黄色网址 | 99九九视频| 国产在线观看三级 | 成人免费高清在 | 成人A级片免费 | 日韩超级大片中文字幕 | 国产91线观看| 玖玖爱网站免费 | 国产福利电影在 | 最新版天堂资源在线 | 麻豆网站| 亚洲国产三级在线观看 | 岛国免费在线观看 | 日韩午夜理论免费网站 | 免费国产麻豆 | 国产三级网站 | 上床啪啪啪在线网站 | 91茄子| 欧美性爱地址 | 国产a在亚洲线播放 | 日韩精品国产另类专区 | 国模一区二区三区 | 国产淫网 | 玖玖电影网 | 国产超级 | 深夜福利网站在线观看 | 国内外成人在线 | 日韩一三区开心影院 | 久色悠悠| 这里只有精品久久 | 日本激情小说 | 日韩欧美亚洲免费在线 | 91丨露脸丨熟女精品 | 在线播放无码不卡 | 午夜成人精品免费看 | 深夜福利免费在线观看 | 日韩中文字幕丝袜 | 美女免费视频网站 | 激情小说综合 | 久久eea| 图片区偷拍自拍 | 亚洲成人激情小说 | 天天艹夜夜干 | 国产在线看不卡 | 国产91精彩视频 | 午夜精品白在线观看 | 91丨九色丨国产在线 | 成人午夜福利视频在线 | 精东无码| 国产在线观看三级 | 日韩欧美国产动漫在线 | 日韩高清无码一区二区 | 91操碰 | 国产家教老| 三级视频在线观看 | 玖玖爱综合 | 97超碰人人摸人人干 | 久久麻豆浪潮av | 国产草视频 | 日韩中文字幕不卡 | 国产91精品成人不 | 午夜视频国产 | 91视频日韩 | 国产久久一区二区 | 日韩精品中文一区二区 | 免费成人黄色 | 天天干天天日天天射 | 视频在线一区二区 | 国产福利影院 | 三级无码在线观看 | 日韩亚洲一区图 | 日韩中文字幕57页 | 午夜无码福| 成人黄A片免费 | 日韩欧美亚洲福利 | 在线观看污网站 | 日韩亚洲欧美国产精品 | 亚洲国产精品成人AV | 天美mv免费入 | 在线观看成人三级片 | 国产在线麻豆 | 性做久久久久久久久 | 日韩一级大片国产 | 69老司机在线播放 | 深夜福利在线免费 | 深夜福利亚洲 | 九九精品九九 | 欧美日韩精品一区 | 国产性爱在线观看 | 超碰人人干人人 | 久久国产综合精品 | 国产91免费不 | 日韩中文字幕在线欧美 | 国产l精品国产亚洲 | 超碰在线人人操 | 日韩一区二区国色天香 | 天美mv观看在线完整 | 国产精品自在拍 | 午夜视频网 | 91草莓视频| 九九九九精品视频 | 另类潮喷 | 日韩福利电影 | 日逼123| 岛国大片在线观看 | 国产屁屁 | 日韩人兽精品在线 | 欧美专区一区 | 在线不卡人妖 | 午夜成人影视网 | 国产欧美在线 | 日韩一区二区三区免费 | 99精品偷拍 | 意大利熟女复古毛茸茸 | 三级黃色男人的天堂 | 久草smc| 自拍视频精品 | 午夜福利免费 | 午夜成人精品在线观看 | 日韩电影限制级 | 黄色高清网站 | 自拍偷拍自拍 | 成人交性视频免费看 | 成人奭片 | 最新精品国偷自产在线 | 丁香五月婷婷影院 | 日韩精品一级一区 | 日韩精品一二 | 成人午夜福利视 | 色五月婷婷激情网 | 动漫一区二区三区 | 久爱青草| 午夜福利国产 | 日韩在线视频在线 | 屁屁影院第一页 | 都市激情第一页亚洲 | 亚洲五月天婷婷丁香 | 国产精品网站 | 自拍偷怕第一页 | 国产精品人aⅴ | 伊人涩涩爱| 色偷偷免费视频 | 微拍一区 | 黑人免费视频 | 美女爆乳网站 | 另类色图| 成人在线三级片 | 国产精品网站在线观看 | 福利1区| 午夜福利成人视频 | 三级在线观看免费大全 | 亚洲性久久影院 | 人妻系列无码 | 午夜黄色 | 丁香五月天婷婷综合 | 精品久久娱乐 | 日韩男女精品 | 欧美在线一区二区不卡 | 美国十次成人 | 三级A片免费看 | 国产厕所 | 成人午夜福利在线看 | 美女视频黄色 | 三级综合自拍欧美 | 三级A片网站 | 久久麻豆浪潮av | 日韩成人一级视频 | 国产第20页 | 亚洲自拍国 | 国产视频三 | 久久99久久99| 尤物精品在线观看 | 午夜免费观看 | 日韩电影2| 成人羞羞视频在 | 欧美视频一区二区 | 日韩无码AV一区二区 | 日韩欧美国产传媒 | 麻豆秘精品国产免费 | 午夜福利成人在线 | 日韩加勒比一 | 国产乱婬果冻传媒 | 国产大秀视频 | av色综合| 老熟女HD| 亚洲有码在线 | 日韩一级大片国产 | 在线中文国产 | 浓毛熟女X66AV| 中文字幕国产第一页 | 国产成人啪精品 | 日韩成人黄色片 | 在线日韩成人 | 成人三级片在线 | 黄色日本视频 | 日韩免费一区二区三区 | 亚洲撸一撸 | 日韩无码观看 | 日韩亚洲产| 国产三级网站 | 91桃色最新版 | 日韩综合在线视频 | 日韩精品另类专区 | 亚洲精品岁国产精品 | 欧美成人精品一区 | 国产福利第一视频 | 日韩中文字幕欧美 | 久久中文字幕观看 | 91欧美视频 | 国产成人一区二区无码 | 美日韩精品 | 91神马| 日韩电影播放 | 超碰人人摸人人干 | 日韩电影导航 | 福利视频导航在线观看 | 国产经典三级在线观看 | 在线天堂√ | AV无码在线观看 | 国产福利啪啪 | 日韩美女在线观看 | 日韩高清国产一区在线 | 五月婷婷五月天 | 日韩亚洲制服另类 | 日韩不卡高清视 | 日韩国产中文欧美 | 囯产永久福利人人看 | 午夜免费成人电影 | 午夜成人电影在线 | 在线视频一二区 | 九九九精品 | 玖操视频在线 | 日韩成人午夜剧场 | 深夜福利无码视频 | 日韩欧美一二三区 | 人妖免费网站 | 国产福利姬喷白浆流水 | 国产午夜福利视频 | 久久黄色免费A级视频 | 国产浮力视频 | 三级成人网 | 日韩中文在线观看 | 日韩精品欧美一区 | 日韩中文网 | 国产cd视频在线播放 | 日韩亚洲欧美在线观 | 91在线视频免费观看 | 日韩家庭乱伦视频网 | 日韩欧美一二三区 | 国产小伙嫖妓流出播放 | 日韩高清在线看 | 欧美成人视频在线观看 | 亚洲玖玖爱 | 午夜在线免费 | 日韩高清无码专区 | 国产片91 | 国产另类一区 | 国产尤物无码 | 日本不卡中文字幕 | 午夜成人免费看 | 国产三级大片 | 囯产精品一区二区 | 激情图片小说区视频 | 国产夫妻操逼 | 自拍偷拍视频在线观看 | 在线播放无码不卡 | 国产成年人视 | 日韩美女大全视频在线 | 日韩电影大片中文字幕 | 国产少萝视频麻豆 | 成人深夜福利视频 | 国产盗摄 | 国产福利片在线观看 | 日韩久久久精品 | 日韩电影在线观看一 | 三级视频院| 日韩电影在线观看免费 | 偷拍自拍第十页 | 黄色免费毛片 | 日韩精品一页 | 无码高清不卡在线 | 国产精品欧美精品 | 91色站| 国产成人网站在线观看 | 成人午夜视频免费观看 | 三级在线无码观看 | 韩日一区 | 日韩一区二区三 | 欧美成网 | 中国成人三级片 | 日韩国产一区二区 | 日韩亚洲欧美一区 | 欧美视频一区在线 | 成人性生交片 | 成人午夜在线看片 | 精品国产三级网址 | 欧美日韩精品一区二区 | 国产传媒成人电影 | 在线天堂1 | 美女内射视频网站 | 日韩先锋影音中文 | 成人精品免费网站 | 日韩高清AV一区 | 三级国产裸 | 加勒比人妻无码专区 | 日韩一级视频 | 免费看A片的网址 | 日韩亚洲无码操操操 | 老牛影视入口 | 涩涩屋在线观看视频 | 日韩视频一区二区 | 三级在线观看国产中文 | 日本黄a| 欧美性爱网址 | 成人亚洲欧美日韩在 | 亚洲激情| 成人中文在线电影网 | 国产精品第二页 | 欧美人妖乱伦 | 国产高清视频在线播放 | 日日夜夜干 | 成人国产极品在线视频 | 成人影片免费 | 日韩电影快播 | 福利姬在线观看免费 | 午夜成人影院催经视频 | 午夜男女视频0 | 午夜福利成人片在线看 | 国内揄拍国内精品 | 国产成人a亚洲精品无 | 日日干狠狠干 | 91视频手机| 在线观看成人三级片 | 国产另类 | 国产色资源 | 国产又大又粗又爽视频 | 日韩中文字幕中 | 国产成人无码精品亚洲 | 欧美性爱黑人 | 国产视频不卡 | 国产福利第一页 | 欧美一区二区在线播放 | 国产亚洲福利 | 国产一区二 | 熟女自拍偷拍 | 自拍偷拍在线观看视频 | 国产自拍视频网 | 国产精品黄 | 日韩欧美电影在线观看 | 麻豆传媒在线观看视频 | 国产91丝袜在线熟 | 中国人妖和人妖ⅩXX | 92在线视频| 99久久精品国产色欲 | 国产一区在线观看视频 | 日韩精品二区三区不卡 | 91直播视频 | heyzo.com | 日韩欧美亚洲国产另类 | 日韩成人动漫第一页 | 三级精品在线制服丝袜 | 尤物网址在线观看 | 日韩欧美亚洲天堂成人 | 亚洲丁香五月 | 日韩中文在线播放 | 97国产| 成人免费777| 高清无码国产在线 | 深夜福利免费观看 | 日韩精品视频在线播放 | 欧美丰满熟妇无码蜜桃 | 国产无码高清一区 | 秘密福利网址导航 | 国产白浆在线观看 | 国产69精品福利 | 国产粗话肉麻对白在线 | 日韩成人影院在线观看 | 日韩国产欧美丝袜在线 | 日韩大片免费 | 夜色福利在线视频 | 深夜被窝福利 | 国产AV二区 | 玖玖爱在线视频观看 | 婷婷五月丁香六月 | 福利一区二区视频 | 综合激情网 | 自拍偷拍3 | 日本不卡一 | 马上射日韩 | 黄色成人免费观看 | 激情五月色播 | 天堂资源在线 | 三级欧美日本国产 | 麻豆激情四射在线播放 | 狼人久久伊人 | 国产三级成人 | 偷拍自拍第一页 | 日韩在线综合另类 | 国产ae| 草莓视频免费 | 国模吧一区二 | 国产美女操 | 国产人妖伪娘网站 | 加勒比在线 | A级毛片免费看 | 国产成人三级在线 | 屁屁影院导航 | 国产99自拍 | 一夜七次郎首页视频 | 网站成人高清视频 | 国产在线不 | 欧美性爱网络 | 日韩中文字幕网先 | 国产首页| 日韩福利在线视频 | 日韩丝袜美腿在线视频 | 成人午夜精品在线观看 | 成人一级免费激情网 | 无码精品国产19 | 搞基网站在线观看 | 日韩视频男人的天堂 | 丁香五月婷婷影院 | 国产人妻人伦精品熟女 | 加勒比二区 | 欧美大B | 亚洲激情| 成人免费区| 国产三级在线免费 | 成人在线午夜 | 国产剧情精品 | 日韩精品久久久 | 91视频国产亚 | 日韩亚洲综合一区 | 国产区在线观看 | 欧美一区二区三区视频 | 九九九九九热 | 国产美女裸网站 | 成人看片网站 | 亚洲小说区图片区另类 | 中文字幕国产 | 91羞羞| 自拍偷拍系列 | 国产播放 | 国产不卡久久 | 尤物视频在线播放 | 国产在线不 | 久久青青 | 欧美精品性爱视频 | 日韩视频―中文字幕 | 久久精品2025 | 亚洲国产无码在线 | 丝袜在线视频 | 国产不卡高清在 | 国产97在线观看 | 日韩福利视颁精品专区 | 国模视频吧 | 成人三级 | 中文字幕免费毛片 | 尤物国产在线观看 | 在线免费三级 | 色网址福利| 日韩福利小视频 | 看A片网址 | 亚洲一区综合 | sm女牢| www.97在线| 激情小说亚洲图片伦 | 国产精品三级在线看 | 午夜成年 | 日韩成人区 | 日韩午夜激情 | 日韩AV在线三区 | 日韩欧美伦理电影 | 亚洲精品在线国产 | 激情深爱五月 | 国产乱伦区 | 韩国午夜三级 | 日韩成人深夜在 | 中国性爱第一页 | 中国三级片网站 | 天天干天天爽 | 一卡二卡AV| 中文字幕日韩有码 | 久久麻豆 | 福利性影院在线播放 | 午夜韩日 | 人人艹97| 日韩a在线观看 | 国产欧美第一页 | 69国产精品成人无码 | 国产激情网站在线观看 | 日韩欧美动漫一区一区 | 激情综合网五月婷婷 | 成人毛片网 | 欧美成人免费在线视频 | 69视频网站| 97狠狠插 | 免费玉足脚交视频 | 日韩激情视频 | 亚洲精品传媒 | 日韩丝袜在线 | 国产成人亚洲日韩 | 日韩欧美综合激情专区 | 97成人影视 | 国产免费三级片完整版 | 成人午夜高清 | 日韩特黄a级免费视频 | 波多野结喷水 | 国产91九色在线播放 | 美女18禁网站 | 成人无码免费毛片 | 在线午夜 | 97免费碰 | 日韩亚洲精 | 日韩国产欧美精品在线 | 福利视频在线导航 | 国产精品国产精品 | 麻豆精品在线观看 | 国产一区二区精品丝袜 | 狠狠干av | 国产精品成熟老女人 | 激情图片区 | 日韩欧在线 | 国产三级黄色片 | 日韩欧美中文国产 | 91西门庆 | 狼友视频在线免费 | 成人午夜福利800集 成人午夜福利100集 | 日韩欧美影院 | 福利资源在线观看 | A级网站免费 | 中国性爱第一页 | 丁香五月天综合 | 日韩日b视频 | 成人免费电影 | 色老大综合 | 国产mv天美传媒 | 久久日本道 | 亚洲国产免费 | 日韩免费福利 | 欧美性爱视频大全 | 午夜伦理天堂 | 成人日韩欧美在线 | 日韩欧美成人影院 | 日韩亚洲国产中文 | 日韩欧美一级影片 | 国产福利小视频 | 午夜在线福利社 | 91精品久久久久久 | 日韩成人电影导航 | 日日夜夜天天综合网 | 国产三级完整版 | 日韩AV成人网 | 国产美女免费观看 | 中文字幕一级黄片 | 国产无码在线看 | 日韩小视频网站 | 无码人妻系列 | 午夜成人影视 | 麻豆久久| 日韩AV一二三 | 日韩精品在线视频一区 | 冰莲国模| 成人一级午夜 | 福利1区 | 九九九九九精品视频 | 国产精品男女 | 午夜福利免费视频 | 日韩国产在线观看 | www.东京热 | 成人一区二区不卡在线 | 日韩精品视频在线播放 | 日韩欧美视频 | 农村嫖妓一区二区三区 | 国产做受高潮在线观看 | 午夜成人网| 午夜福利无码在线观看 | 国产三级精品在线观看 | 日逼网站视频 | 97狠狠插 | 日韩AV无码 | 国产v片免费播放 | 日本中文字幕不卡 | 特级av| 亚洲图片小说偷拍 | 老牛影视传媒一区二区 | 91视频免费在线观看 | 日韩换脸一区二区三区 | 国产高清1页 | 国产又黄又猛又爽 | 国产成年无码视频 | 东京热中文 | 五月丁香在线观看 | 日本啊v天堂 | 精品午夜福利在线观看 | 久草资源在线观看 | 日韩一二三区的经济 | 成人青青草 | 在线观看亚洲国产精品 | 国产精品第3页 | 变性人妖| 国产ts人妖视频网站 | 中国人妖自精汇编 | 精品国产乱码一区二 | 欧美孕妇疯狂一区二区 | 日韩伦理中文 | 日本不卡一二三 | 中国操逼网 | 久久这里只有精品9 | 精品人妖| 成人看片黄a免费看 | 国产久爱青草视 | 国产美女裸体网站 | 国内三级在线观看 | 波多野亚洲中 | 无码不卡在线观看 | 国产精品自拍网 | 国产第三页 | 91网站视频 | 国产亚洲精品码 | 日韩日屄视频 | 成人精品一区二区秒拍 | 国产va观看在线播放 | 精东A片| 日本AV中文字幕 | 日韩精品久久 | 日韩五级片 | 国产成人无码三级 | 麻花传剧MV高清资源 | www欧美日韩 | 国产aa| 国产性爱精品在线观看 | 日韩精品网址 | 国产伪娘人妖 | 国产原创在线 | 日韩a在线观看免费 | 国产草莓视频免 | 日韩一区不卡 | 日韩二区三区在线观看 | 三级网站网址 | 国产白浆视频 | 91自拍夫妻 | 日韩亚洲欧美中文在线 | 成人午夜又粗又硬又长 | 国产三级视频在线 | 午夜影院 | 亚洲成人福利片 | 国模吧一区 | 国产精品资源 | 午夜福利在线观看影院 | 成人高清网站 | 97爱色| 国产h肉视频 | 可以看的黄色av网站 | 在线观看偷拍自拍 | 无码精品国产19 | 免费A片成人 | 高潮喷水无码 | 夜夜干夜 | 日韩精品亚洲精品第一 | 激情图片区 | 午夜影视播放器 | 日韩美女视频一区 | 成人图片视频小说 | 日韩无码影视 | 日韩亚洲一区中文字幕 | 六月婷婷五月丁香 | 国产精品免费大 | 麻豆精品A∨在线观看 | 东京热污| 国产三级第一页 | 国产免费高清无码a级 | 亚欧美综合 | 亚洲日本电影a | 国内外成人在线 | 国产一区在线视频 | 深夜福利视频一区二区 | www.黑人| 国产极品视频 | 三级毛片蜜臀AV | 久久惹这里只有精品 | 国产探花在线看 | 国产玉足在线观看 | 国产羞羞在线观看 | 日韩精品免费专区 | 91网在线观看 | 无码影视在线国产 | 日韩电影在线看 | 国产高清1页 | 卡一卡二中文字幕 | 午夜成年人电影 | 亚洲A区无码 | 可以在线看的黄色网址 | 深夜福利视频在线播放 | 91视频大全 | 69色网| 国产a精品v| 黄色三级在线播放 | 日韩系列免费精品 | 国产精品可站18 | 久久这里只有精品高 | 欧美不卡一区二区 | 成人国产在线一区二区 | 日韩二三区 | a毛片免费 | 做爱在线免费观看网站 | 在线观看亚洲国产精品 | 国产精品6区 | 日韩美女成人免费网站 | 欧美国产日韩在线观看 | 国产日产欧产美 | 黄色av网站免费 | 精品这里只有精品 | 东京热在线网站 | 三级片A片 | 欧美一区二区三区视频 | 日韩制服中文 | 日韩电影免费在线观看 | 日韩欧美久 | 成人窝窝午夜 | 日韩专区| 做黄三级网站 | 日韩在线欧美在线 | 国产精品无码无码 | 日本人妖视频网站 | 神马久久影院 | 日本AV网站 | 日韩乱伦一区二区 | 91视频伦理 | 午夜亚洲无码 | 视色午夜成人网 | 三级在线播放试看无 | 人妖网站在线观看 | 久操精品在线观看 | 国产第一区 | 精品自拍视频 | 男女深夜福利 | 日韩精品一区二区电影 | 日韩一区二区三区91 | 免费观看A级 | 黑人性爱网 | 日韩精品aⅴ免费观看 | 日韩精选视频 | 成人福利午夜A片公司 | 五月婷婷激情综合网 | 久久精品2025 | 自拍视频在线 | 成人三级网址 | 成人欧美视频 | 黄色wwww | 自拍一页 | 成年人免费午福利姬 | 日韩二级片 | 国产午夜一级 | 天堂在线资源网 | 欧美精品三区 | 午夜人人| 欧美成年人视频 | 日韩免费视频播播 | 国产青青草原 | 天天日天天操天天干 | 在线欧美一区 | 偷拍精品视频 | 成人一区二区在线观看 | 日韩经典三级 | 亚洲国产成人在线视频 | 日韩午夜福利导航 | 亚洲a无码 | 本道久久综合 | 91社区首页 | 成人高清字幕在线播放 | 成人导航在线观看 | 日韩制服另类技巧 | 日韩无码高清一区二区 | 日韩免费福利 | 国产拍拍| 夜间福利视频在线观看 | 成人激情视频小说 | 日韩中文字幕乱伦 | 日韩在线欧美高清一区 | 91自拍国产 | 国产在线极品 | 午夜伦理片在线 | 色XXXWWW| 玖玖色综合| 成人片免费 | 国产中文字幕第一页 | 国产人妖网 | 成人精品欧美日韩 | 日韩不卡在线播放 | 精品三级片 | 麻豆黑丝视频 | 久草福利在线视频 | 在线观看污网站 | 国产淫伦久久久久久久 | 国产91免费精品电影 | 国产成人在线看 | 在线观看福利姬 | 三级成人在线观看 | 日韩欧美国产高清蜜月 | 日韩亚洲欧美在线观看 | 免费尤物视频 | 亚洲国产影院 | 91最新自拍| 三级在线观看国产 | 国产呦在线观看 | 国产中字 | 日韩按摩片 | 激情综合小说网 | 久操久爱 | 韩日精品在线 | 日韩不卡在线播放 | 日韩教师另类自拍 | 国产精品综合 | 97人人操 | 日韩另类第一页 | 自拍偷拍第一页 | 日韩黄色电影网站 | 亚洲无码国产高清 | 国产999精品视频 | 麻豆成人免费网站入口 | 精品二三四区 | 免费成人视频网址 | 国产无码一区二区三区 | 三级网站网址 | 丝袜日韩| 日韩精品在线观看一区 | 国产大片黄在线观看 | 激情五月婷婷 | 日韩高清在线观看 | 日韩毛片免费看 | 成人无码三级在线观看 | 亚洲V欧美| 日韩欧美站 | 精品国产一区二区久 | 日韩中文字幕乱伦 | 成人羞羞 | 成人午夜免费app | 成人片观看? | 国产91精品夜未央! 国产91精品新入口 国产91精品系 | 无码精品成人观看A片 | 日韩精品专区一二三区 | 超碰人人操97 | 欧美视频色 | 日韩亚洲欧美中文高清 | 中国肏逼网 | 午夜成人免费影院 | 欧美黑人性爱视频 | 婷婷午夜 | 成人免费短视频 | 国产真人亲妺妺A片 | 国产在线观看啊 | 国产人妖在线 | 黄色网址在线视频 | 五月婷婷丁香综合 | 尤物网站在线观看 | 欧美视频一区在线观看 | 深夜成人福利网站 | 中国浓毛少妇毛茸茸 | 在线观看国产三级 | 午夜性福利 | 日本无码一区二区三三 | 专干老熟人300部 | 东京热无码免费视频 | 偷拍自拍在线观看 | 日韩亚洲精品99 | 亚洲色图1 | 91视频爱拍 | 精东无码 | 97超碰人人摸人人操 | 天天干天天日天天干 | 日韩亚洲人成影院 | 欧美国产日韩一区二区 | 国产又黄又粗又猛又爽 | 国产免费91 | 日韩欧美精品一区二区 | 超碰人人操人人干 | 福利姬视频在线 | 成人国产精品高清在线 | 亚洲综合精品国产 | 久久综合大全 | 国产精品视频自拍 | 日韩中文亚洲精品 | 屁屁影院国产第一页 | 日韩精品第1页 | 国产三级大片 | 成人永久免费永久在线 | 日日干夜夜操 | 日韩欧美国产精品 | 三级黄色AV | 精品免费国产 | 成人午夜视频在线视频 | 成人午夜免费视频在线 | 日韩热映专区视频合集 | 成人激情小说视频 | 福利第一页 | 九一果冻制作厂余丽 | 国产免费自拍视频 | 日韩免费视频在线观看 | 99久久国际| 国产精品自拍观看 | 午夜传媒 | 国产69精品一 | 国产激情在线观看 | 日韩欧美色综合 | 老湿机福利区 | 成人做爰黄片免费看 | 欧美成人视屏在线 | 岛国在线免费 | 午夜精品福利在线 | 日韩国品一 | 午夜福利亚洲 | 日韩精品久久久 | 国产色情-搜索 | 午夜福利在线播放 | 日韩小视频在线播放 | 国产三级免费看。 | 能播放的三级网站 | 日韩乱码一区二区 | 尤物网址在线观看 | 亚洲激情成人小说 | 国产成人片在线观看 | 久久综合88| 日韩亚洲欧美在线观看 | 日韩欧美aⅴ不卡视频 | 日韩在线成人免费视频 | 日本一本不卡 | 亚洲综合人成 | 人妻无码精品加勒比 | 日韩电影在线观看一 | 91视频一区二区三区 | 欧美视频一区在线 | 东方成人 | 国产阴茎在线观看网址 | 国产免费三级片完整版 | 福利热门电影 | 97在线| 国产在线极品 | 久操香蕉 | 强奸乱伦免费视频 | 日韩不卡在线播放 | 欧美精品日韩一区二区 | 亚洲成人激情小说网 | 日韩丝袜美腿在线视频 | A片免费网| 国产一级片 | 日韩精品短视频 | 国产青榴| 日韩老熟 | 成人韩漫在线 | 国产尤物视频 | 日韩无码高清无码 | 人人操超碰 | 91视频污 | 麻豆成人免费网站入口 | 不卡网久久 | 夜间福利在线 | 成人国产AV | 国产视频亚洲 | 另类女同| 三级在线看片 | 精品一二三| 91社中文| 97在线不卡 | 国产aⅴ熟女 | 午夜伦理影院 | 成人国产精品秘 | 麻豆爱爱视频 | 国产裸体美女免费观看 | 偷拍第一页| 福利视频导航页 | 老湿机网址 | 日韩性爱在 | 国产四虎 | 五月婷婷色因 | 人妖网站| 午夜老司机福利 | 黄色av观看| 日韩一区中文 | 日韩欧美一二三区激情 | 在线观看国产无码 | 国产国产 | 日韩午夜理论片中 | 91社入口| 国产在线观看啊 | 久久综合影视 | 欧美高清三区 | 日韩一本道 | 欧美视频色 | 国产淫网 | 狼人久久伊人 | 91视频人人看 | 国产三级三级在线观看 | 国产**剧传媒播放 | 亚洲国产精品色色 | 午夜在线一区 | 麻豆网站在线 | 黄色成人免费看 | 日韩中文字幕欧美专区 | 狠狠干av| 三级全黄三级bd | 黄色毛片免费观看 | 成人午夜视屏 | 日日夜夜天天人人 | 日韩精品中文不卡视频 | 国产精品18在线 | 欧美视频在线观看一区 | 美女三级黄视频 | 操逼图123| 玖玖玖玖玖精品网站 | 五月婷婷六月丁香综合 | 福利在线不卡一区 | 成人三级网址 | 日韩精品电影一区二区 | 午夜电影网 | 三级网站视频在线观看 | 91丝袜在线 | 国产免费a | 欧美在线视频一区 | 城中村嫖妓露脸自拍 | 日韩精品AV一区二区 | 成人国产三级 | 午夜福利在线观看视频 | 亚洲成人文学 | 日韩欧国产精 | 亚洲精品国产成人 | 日韩伦理网址 | 日韩伦理在线免费观看 | 午夜成人视频免费观看 | 国产91精品夜未央! 国产91精品新入口 国产91精品系 | 日韩福利视频网 | 激情小说免费视频 | 国产亚洲/无码精品 | 日韩在线观看福利片 | 人人摸人人操97 | 国产成人无码一区二区 | 日韩伦理电影免费在线 | 女被男啪到哭的视频 | 六月婷婷五月 | 天天爽夜夜干 | 成人窝窝午夜 | 日韩大片在线玫瑰影视 | 日韩欧美高清一区 | 亚洲狠狠干 | 国产福利麻 | 日韩在线专区 | 五月丁香六月婷婷综合 | 国产一区二区网站 | 思思久热| 国产精品系列在线观看 | 最新日韩无码 | 国产精品久久久久野外 | 激情国产在线 | 午夜福利视频导航 | 三级国产黄线在线观看 | 日韩在线大片 | 国产精品xxxx| 日韩午夜电影在线一区 | 日韩亚洲欧美一 | 成人免费A片白浆 | 丁香五月天综合 | 色五月丁香婷婷 | 日韩精品一二三四区 | 成人国产精品秘入口 | 日韩欧美精品一 | 国产性爱精品在线观看 | 草莓视频免费 | 日韩国产v片一区二区 | A片免费网 | 国产黄在线| 日韩人成 | 激情小说成人 | 超碰人人摸人人搞 | 国产精品123 | 日韩电影区| 变态另类 | 在线第一页 | 午夜福利少妇 | 日韩成a人在线观看 | 亚洲二页| 激情文学图片小说视频 | 国产玖玖在线 | 在线一区视频 | 五月激情天 | 日韩电影免费看 | 日韩视频在线观看一区 | www.三级片| 日本wwwww色高 | 91网络视频| 欧美黄色网址 | 日韩大片中文 | 国产精品乱码一 | 色在线视频 | 日韩视频第一页 | 激情小说图片网 | 天天干天天摸 | 国产又大又粗又黄 | 日韩乱码在线观看 | 一区二区伦理 | 不卡无码在线观看 | 偷拍自拍视频在线观看 | 国产福利免 | www.97色| 日本怡春院 | 日韩欧美综合在线观看 | 日韩欧美高清国产视频 | 可以在线看的黄色网址 | 欧美一区视频 | 日韩在线一区二区三区 | 自拍偷拍视频网站 | 91桃色污无| 欧美精品一区在线发布 | 国产电影三级在线观看 | 午夜精品网站 | 国产第四页 | 国产高潮在线观看 | 午夜成人AV在线播放 | 黑人蜜桃2黑人 | 久久国产精品影院 | 色网综合| 国产日B视频| 深夜福利视频在线观看 | 成人论坛视频在线 | 高清无人区一区 | 国产日韩Aⅴ片 | 午夜福利影院无码 | 日韩成人一级视频 | 日韩一区欧美激情 | 三级片在线免费观看 | 国产成年人在线观看 | 99久久国 | 爱豆精品秘国产传媒 | 午夜十八岁禁 | 日韩每日更新 | 国产精品一二三四区 | 午夜网址在线观看 | 狼友视频www | 亚洲国产A片 | 日韩精品黄肉动 | 国产91这里都是精品 | 精品日韩一二三区 | 午夜福利成人视频 | 资源天堂一区二区 | 国产丝袜美女一 | 三级特黄60分钟在线 | 国产一区二区精品丝袜 | 91网址视频| 啪啪啪在线免费观看 | 日韩视频| 国产盗撮视频在线观看 | 日韩成人高清二区三区 | 日韩精品视频免费 | 欧美在线不卡 | 欧美日韩国产一区 | 日韩免费视 | 日韩在线一区高清在线 | 深夜成人在线 | 午夜AV电影 | 三级视频网站在线观看 | 国产高潮白浆喷 | 日韩高清伦理 | 只有这里是精品 | 国产精品国产 | 日韩高清一级 | 91视频720| 全免费A级毛片免费看 | 色偷偷资源网站 | 日韩国产综合 | 69色网 | 欧美在线播放一区 | 97碰91| 国产日逼视频 | 尤物在线免费视频 | 日韩一页 | 国产网站无码 | 日韩欧美在线视频免费 | 孕妇一区二区三区国产 | 午夜成人在线免费观看 | 偷拍自拍在线播放 | 午夜精品久久久 | 日韩综合欧美亚州 | 老色在线 | 五月婷婷网 | 日韩一级一片 | 老司机深夜福利网站 | 尤物视频官网 | 日韩精品免费视频一区 | 女女视频三级网站 | 中文字幕日韩有码 | 日韩中文亚洲 | 午夜伦理在线看 | 国产自拍偷拍区 | 国产精品一区在线观看 | 成人一级电影视频 | 香蕉久操| 狼友视频在线免费 | 国产精品www | 深爱五月网 | 日韩剧泰剧 | 婷婷五月花 | 国产精品丰满人妻G奶 | 玖草在线播放 | 亚洲三级黄色 | 岛国大片在线播放免费 | 日韩欧美福利视 | 中国三级黄色完整版 | 日韩欧美无砖专区 | 日韩精品高清第一区 | 又黄又爽视频 | 丁香五月天婷婷 | 国产高清无码2025 | 日本不卡区| 男女网站在线观看 | 国产大全今日最新 | 国产精品国产高清国产 | 三级国产三级在线 | 日韩国产精品免费专区 | 在线国内自拍 | 欧美福利一区二区 | 日韩亚洲国产剧情在线 | 精品国产三级国产 | 老色网站 | 国产盗摄经典盗摄 | 久久不卡网 | 日韩在线aⅴ免费视频 | av加勒比| 日韩国产在线高清 | 国久久久| 伊人成网| 品善网日本 | 亚洲国产精品成人AV | 天天干天天插 | 成人精品电影一 | 日韩精品中文字幕 | 热99精品| 成人软件视频 | 国产成人三级在线 | 国产一级做受视频 | 微拍一区 | 日韩一区二 | 精东毛片 | 日韩激情综合网 | 成人高清在线观看播放 | 国产中文字幕网 | 三级乱伦亚洲影视 | 九九九九九精品 | 成人在线观看国产 | 国产亚洲无码在线观看 | 91性色在| 日韩电影网址 | 真实国产亂伦XXXX | 日韩亚洲中文字幕另类 | 日韩欧美一区二区一幕 | 在线一区二区免费 | 成人午夜视频福利 | 日韩精品网站国产九区 | 日韩V888伦理A| 东京热大轮奸 | 国产裸体美女免费观看 | 日韩娇小XXXⅹHD | 不卡国产在线 | 最新国产AV | 国产三级理论 |