久久精品国产精品国产精品污,男人扒开添女人下部免费视频,一级国产69式性姿势免费视频,夜鲁夜鲁很鲁在线视频 视频,欧美丰满少妇一区二区三区,国产偷国产偷亚洲高清人乐享,中文 在线 日韩 亚洲 欧美,熟妇人妻无乱码中文字幕真矢织江,一区二区三区人妻制服国产

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

js综合

發布時間:2025/4/16 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 js综合 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

對象

對象使用和屬性


JavaScript 中所有變量都是對象,除了兩個例外 null 和 undefined。


false.toString(); // 'false'

[1, 2, 3].toString(); // '1,2,3'


function Foo(){}

Foo.bar = 1;

Foo.bar; // 1

一個常見的誤解是數字的字面值(literal)不是對象。這是因為 JavaScript 解析器的一個錯誤, 它試圖將點操作符解析為浮點數字面值的一部分。


2.toString(); // 出錯:SyntaxError

有很多變通方法可以讓數字的字面值看起來像對象。


2..toString(); // 第二個點號可以正常解析

2 .toString(); // 注意點號前面的空格

(2).toString(); // 2先被計算

對象作為數據類型


JavaScript 的對象可以作為哈希表使用,主要用來保存命名的鍵與值的對應關系。


使用對象的字面語法 - {} - 可以創建一個簡單對象。這個新創建的對象從 Object.prototype 繼承下面,沒有任何自定義屬性。


var foo = {}; // 一個空對象


// 一個新對象,擁有一個值為12的自定義屬性'test'

var bar = {test: 12};?

訪問屬性


有兩種方式來訪問對象的屬性,點操作符或者中括號操作符。


var foo = {name: 'kitten'}

foo.name; // kitten

foo['name']; // kitten


var get = 'name';

foo[get]; // kitten


foo.1234; // SyntaxError

foo['1234']; // works

兩種語法是等價的,但是中括號操作符在下面兩種情況下依然有效 - 動態設置屬性 - 屬性名不是一個有效的變量名(譯者注:比如屬性名中包含空格,或者屬性名是 JS 的關鍵詞)


譯者注:在 JSLint 語法檢測工具中,點操作符是推薦做法。

刪除屬性


刪除屬性的唯一方法是使用 delete 操作符;設置屬性為 undefined 或者 null 并不能真正的刪除屬性, 而僅僅是移除了屬性和值的關聯。


var obj = {

? ? bar: 1,

? ? foo: 2,

? ? baz: 3

};

obj.bar = undefined;

obj.foo = null;

delete obj.baz;


for(var i in obj) {

? ? if (obj.hasOwnProperty(i)) {

? ? ? ? console.log(i, '' + obj[i]);

? ? }

}

上面的輸出結果有 bar undefined 和 foo null - 只有 baz 被真正的刪除了,所以從輸出結果中消失。


屬性名的語法


var test = {

? ? 'case': 'I am a keyword so I must be notated as a string',

? ? delete: 'I am a keyword too so me' // 出錯:SyntaxError

};

對象的屬性名可以使用字符串或者普通字符聲明。但是由于 JavaScript 解析器的另一個錯誤設計, 上面的第二種聲明方式在 ECMAScript 5 之前會拋出 SyntaxError 的錯誤。


這個錯誤的原因是 delete 是 JavaScript 語言的一個關鍵詞;因此為了在更低版本的 JavaScript 引擎下也能正常運行, 必須使用字符串字面值聲明方式。


原型


JavaScript 不包含傳統的類繼承模型,而是使用 prototype 原型模型。


雖然這經常被當作是 JavaScript 的缺點被提及,其實基于原型的繼承模型比傳統的類繼承還要強大。 實現傳統的類繼承模型是很簡單,但是實現 JavaScript 中的原型繼承則要困難的多。 (It is for example fairly trivial to build a classic model on top of it, while the other way around is a far more difficult task.)


由于 JavaScript 是唯一一個被廣泛使用的基于原型繼承的語言,所以理解兩種繼承模式的差異是需要一定時間的。


第一個不同之處在于 JavaScript 使用原型鏈的繼承方式。


注意: 簡單的使用 Bar.prototype = Foo.prototype 將會導致兩個對象共享相同的原型。 因此,改變任意一個對象的原型都會影響到另一個對象的原型,在大多數情況下這不是希望的結果。

function Foo() {

? ? this.value = 42;

}

Foo.prototype = {

? ? method: function() {}

};


function Bar() {}


// 設置Bar的prototype屬性為Foo的實例對象

Bar.prototype = new Foo();

Bar.prototype.foo = 'Hello World';


// 修正Bar.prototype.constructor為Bar本身

Bar.prototype.constructor = Bar;


var test = new Bar() // 創建Bar的一個新實例


// 原型鏈

test [Bar的實例]

? ? Bar.prototype [Foo的實例]?

? ? ? ? { foo: 'Hello World' }

? ? ? ? Foo.prototype

? ? ? ? ? ? {method: ...};

? ? ? ? ? ? Object.prototype

? ? ? ? ? ? ? ? {toString: ... /* etc. */};

上面的例子中,test 對象從 Bar.prototype 和 Foo.prototype 繼承下來;因此, 它能訪問 Foo 的原型方法 method。同時,它也能夠訪問那個定義在原型上的 Foo 實例屬性 value。 需要注意的是 new Bar() 不會創造出一個新的 Foo 實例,而是 重復使用它原型上的那個實例;因此,所有的 Bar 實例都會共享相同的 value 屬性。


注意: 不要使用 Bar.prototype = Foo,因為這不會執行 Foo 的原型,而是指向函數 Foo。 因此原型鏈將會回溯到 Function.prototype 而不是 Foo.prototype,因此 method 將不會在 Bar 的原型鏈上。

屬性查找


當查找一個對象的屬性時,JavaScript 會向上遍歷原型鏈,直到找到給定名稱的屬性為止。


到查找到達原型鏈的頂部 - 也就是 Object.prototype - 但是仍然沒有找到指定的屬性,就會返回 undefined。


原型屬性


當原型屬性用來創建原型鏈時,可以把任何類型的值賦給它(prototype)。 然而將原子類型賦給 prototype 的操作將會被忽略。


function Foo() {}

Foo.prototype = 1; // 無效

而將對象賦值給 prototype,正如上面的例子所示,將會動態的創建原型鏈。


性能


如果一個屬性在原型鏈的上端,則對于查找時間將帶來不利影響。特別的,試圖獲取一個不存在的屬性將會遍歷整個原型鏈。


并且,當使用 for in 循環遍歷對象的屬性時,原型鏈上的所有屬性都將被訪問。


擴展內置類型的原型


一個錯誤特性被經常使用,那就是擴展 Object.prototype 或者其他內置類型的原型對象。


這種技術被稱之為 monkey patching 并且會破壞封裝。雖然它被廣泛的應用到一些 JavaScript 類庫中比如 Prototype, 但是我仍然不認為為內置類型添加一些非標準的函數是個好主意。


擴展內置類型的唯一理由是為了和新的 JavaScript 保持一致,比如 Array.forEach。


譯者注:這是編程領域常用的一種方式,稱之為 Backport,也就是將新的補丁添加到老版本中。

總結


在寫復雜的 JavaScript 應用之前,充分理解原型鏈繼承的工作方式是每個 JavaScript 程序員必修的功課。 要提防原型鏈過長帶來的性能問題,并知道如何通過縮短原型鏈來提高性能。 更進一步,絕對不要擴展內置類型的原型,除非是為了和新的 JavaScript 引擎兼容。


hasOwnProperty 函數


為了判斷一個對象是否包含自定義屬性而不是原型鏈上的屬性, 我們需要使用繼承自 Object.prototype 的 hasOwnProperty 方法。


注意: 通過判斷一個屬性是否 undefined 是不夠的。 因為一個屬性可能確實存在,只不過它的值被設置為 undefined。

hasOwnProperty 是 JavaScript 中唯一一個處理屬性但是不查找原型鏈的函數。


// 修改Object.prototype

Object.prototype.bar = 1;?

var foo = {goo: undefined};


foo.bar; // 1

'bar' in foo; // true


foo.hasOwnProperty('bar'); // false

foo.hasOwnProperty('goo'); // true

只有 hasOwnProperty 可以給出正確和期望的結果,這在遍歷對象的屬性時會很有用。 沒有其它方法可以用來排除原型鏈上的屬性,而不是定義在對象自身上的屬性。


hasOwnProperty 作為屬性


JavaScript 不會保護 hasOwnProperty 被非法占用,因此如果一個對象碰巧存在這個屬性, 就需要使用外部的 hasOwnProperty 函數來獲取正確的結果。


var foo = {

? ? hasOwnProperty: function() {

? ? ? ? return false;

? ? },

? ? bar: 'Here be dragons'

};


foo.hasOwnProperty('bar'); // 總是返回 false


// 使用其它對象的 hasOwnProperty,并將其上下文設置為foo

({}).hasOwnProperty.call(foo, 'bar'); // true

結論


當檢查對象上某個屬性是否存在時,hasOwnProperty 是唯一可用的方法。 同時在使用 for in loop 遍歷對象時,推薦總是使用 hasOwnProperty 方法, 這將會避免原型對象擴展帶來的干擾。


for in 循環


和 in 操作符一樣,for in 循環同樣在查找對象屬性時遍歷原型鏈上的所有屬性。


注意: for in 循環不會遍歷那些 enumerable 設置為 false 的屬性;比如數組的 length 屬性。

// 修改 Object.prototype

Object.prototype.bar = 1;


var foo = {moo: 2};

for(var i in foo) {

? ? console.log(i); // 輸出兩個屬性:bar 和 moo

}

由于不可能改變 for in 自身的行為,因此有必要過濾出那些不希望出現在循環體中的屬性, 這可以通過 Object.prototype 原型上的 hasOwnProperty 函數來完成。


注意: 由于 for in 總是要遍歷整個原型鏈,因此如果一個對象的繼承層次太深的話會影響性能。

使用 hasOwnProperty 過濾


// foo 變量是上例中的

for(var i in foo) {

? ? if (foo.hasOwnProperty(i)) {

? ? ? ? console.log(i);

? ? }

}

這個版本的代碼是唯一正確的寫法。由于我們使用了 hasOwnProperty,所以這次只輸出 moo。 如果不使用 hasOwnProperty,則這段代碼在原生對象原型(比如 Object.prototype)被擴展時可能會出錯。


一個廣泛使用的類庫 Prototype 就擴展了原生的 JavaScript 對象。 因此,當這個類庫被包含在頁面中時,不使用 hasOwnProperty 過濾的 for in 循環難免會出問題。


總結


推薦總是使用 hasOwnProperty。不要對代碼運行的環境做任何假設,不要假設原生對象是否已經被擴展了。


函數

函數聲明與表達式


函數是JavaScript中的一等對象,這意味著可以把函數像其它值一樣傳遞。 一個常見的用法是把匿名函數作為回調函數傳遞到異步函數中。


函數聲明


function foo() {}

上面的方法會在執行前被 解析(hoisted),因此它存在于當前上下文的任意一個地方, 即使在函數定義體的上面被調用也是對的。


foo(); // 正常運行,因為foo在代碼運行前已經被創建

function foo() {}

函數賦值表達式


var foo = function() {};

這個例子把一個匿名的函數賦值給變量 foo。


foo; // 'undefined'

foo(); // 出錯:TypeError

var foo = function() {};

由于 var 定義了一個聲明語句,對變量 foo 的解析是在代碼運行之前,因此 foo 變量在代碼運行時已經被定義過了。


但是由于賦值語句只在運行時執行,因此在相應代碼執行之前, foo 的值缺省為 undefined。


命名函數的賦值表達式


另外一個特殊的情況是將命名函數賦值給一個變量。


var foo = function bar() {

? ? bar(); // 正常運行

}

bar(); // 出錯:ReferenceError

bar 函數聲明外是不可見的,這是因為我們已經把函數賦值給了 foo; 然而在 bar 內部依然可見。這是由于 JavaScript 的 命名處理 所致, 函數名在函數內總是可見的。


注意:在IE8及IE8以下版本瀏覽器bar在外部也是可見的,是因為瀏覽器對命名函數賦值表達式進行了錯誤的解析, 解析成兩個函數 foo 和 bar

this 的工作原理


JavaScript 有一套完全不同于其它語言的對 this 的處理機制。 在五種不同的情況下 ,this 指向的各不相同。


全局范圍內


this;

當在全部范圍內使用 this,它將會指向全局對象。


譯者注:瀏覽器中運行的 JavaScript 腳本,這個全局對象是 window。

函數調用


foo();

這里 this 也會指向全局對象。


ES5 注意: 在嚴格模式下(strict mode),不存在全局變量。 這種情況下 this 將會是 undefined。

方法調用


test.foo();?

這個例子中,this 指向 test 對象。


調用構造函數


new foo();?

如果函數傾向于和 new 關鍵詞一塊使用,則我們稱這個函數是 構造函數。 在函數內部,this 指向新創建的對象。


顯式的設置 this


function foo(a, b, c) {}


var bar = {};

foo.apply(bar, [1, 2, 3]); // 數組將會被擴展,如下所示

foo.call(bar, 1, 2, 3); // 傳遞到foo的參數是:a = 1, b = 2, c = 3

當使用 Function.prototype 上的 call 或者 apply 方法時,函數內的 this 將會被 顯式設置為函數調用的第一個參數。


因此函數調用的規則在上例中已經不適用了,在foo 函數內 this 被設置成了 bar。


注意: 在對象的字面聲明語法中,this 不能用來指向對象本身。 因此 var obj = {me: this} 中的 me 不會指向 obj,因為 this 只可能出現在上述的五種情況中。 譯者注:這個例子中,如果是在瀏覽器中運行,obj.me 等于 window 對象。

常見誤解


盡管大部分的情況都說的過去,不過第一個規則(譯者注:這里指的應該是第二個規則,也就是直接調用函數時,this 指向全局對象) 被認為是JavaScript語言另一個錯誤設計的地方,因為它從來就沒有實際的用途。


Foo.method = function() {

? ? function test() {

? ? ? ? // this 將會被設置為全局對象(譯者注:瀏覽器環境中也就是 window 對象)

? ? }

? ? test();

}

一個常見的誤解是 test 中的 this 將會指向 Foo 對象,實際上不是這樣子的。


為了在 test 中獲取對 Foo 對象的引用,我們需要在 method 函數內部創建一個局部變量指向 Foo 對象。


Foo.method = function() {

? ? var that = this;

? ? function test() {

? ? ? ? // 使用 that 來指向 Foo 對象

? ? }

? ? test();

}

that 只是我們隨意起的名字,不過這個名字被廣泛的用來指向外部的 this 對象。 在 閉包 一節,我們可以看到 that 可以作為參數傳遞。


方法的賦值表達式


另一個看起來奇怪的地方是函數別名,也就是將一個方法賦值給一個變量。


var test = someObject.methodTest;

test();

上例中,test 就像一個普通的函數被調用;因此,函數內的 this 將不再被指向到 someObject 對象。


雖然 this 的晚綁定特性似乎并不友好,但這確實是基于原型繼承賴以生存的土壤。


function Foo() {}

Foo.prototype.method = function() {};


function Bar() {}

Bar.prototype = Foo.prototype;


new Bar().method();

當 method 被調用時,this 將會指向 Bar 的實例對象。


閉包和引用


閉包是 JavaScript 一個非常重要的特性,這意味著當前作用域總是能夠訪問外部作用域中的變量。 因為 函數 是 JavaScript 中唯一擁有自身作用域的結構,因此閉包的創建依賴于函數。


模擬私有變量


function Counter(start) {

? ? var count = start;

? ? return {

? ? ? ? increment: function() {

? ? ? ? ? ? count++;

? ? ? ? },


? ? ? ? get: function() {

? ? ? ? ? ? return count;

? ? ? ? }

? ? }

}


var foo = Counter(4);

foo.increment();

foo.get(); // 5

這里,Counter 函數返回兩個閉包,函數 increment 和函數 get。 這兩個函數都維持著 對外部作用域 Counter 的引用,因此總可以訪問此作用域內定義的變量 count.


為什么不可以在外部訪問私有變量


因為 JavaScript 中不可以對作用域進行引用或賦值,因此沒有辦法在外部訪問 count 變量。 唯一的途徑就是通過那兩個閉包。


var foo = new Counter(4);

foo.hack = function() {

? ? count = 1337;

};

上面的代碼不會改變定義在 Counter 作用域中的 count 變量的值,因為 foo.hack 沒有 定義在那個作用域內。它將會創建或者覆蓋全局變量 count。


循環中的閉包


一個常見的錯誤出現在循環中使用閉包,假設我們需要在每次循環中調用循環序號


for(var i = 0; i < 10; i++) {

? ? setTimeout(function() {

? ? ? ? console.log(i); ?

? ? }, 1000);

}

上面的代碼不會輸出數字 0 到 9,而是會輸出數字 10 十次。


當 console.log 被調用的時候,匿名函數保持對外部變量 i 的引用,此時 for循環已經結束, i 的值被修改成了 10.


為了得到想要的結果,需要在每次循環中創建變量 i 的拷貝。


避免引用錯誤


為了正確的獲得循環序號,最好使用 匿名包裝器(譯者注:其實就是我們通常說的自執行匿名函數)。


for(var i = 0; i < 10; i++) {

? ? (function(e) {

? ? ? ? setTimeout(function() {

? ? ? ? ? ? console.log(e); ?

? ? ? ? }, 1000);

? ? })(i);

}

外部的匿名函數會立即執行,并把 i 作為它的參數,此時函數內 e 變量就擁有了 i 的一個拷貝。


當傳遞給 setTimeout 的匿名函數執行時,它就擁有了對 e 的引用,而這個值是不會被循環改變的。


有另一個方法完成同樣的工作,那就是從匿名包裝器中返回一個函數。這和上面的代碼效果一樣。


for(var i = 0; i < 10; i++) {

? ? setTimeout((function(e) {

? ? ? ? return function() {

? ? ? ? ? ? console.log(e);

? ? ? ? }

? ? })(i), 1000)

}

arguments 對象


JavaScript 中每個函數內都能訪問一個特別變量 arguments。這個變量維護著所有傳遞到這個函數中的參數列表。


注意: 由于 arguments 已經被定義為函數內的一個變量。 因此通過 var 關鍵字定義 arguments 或者將 arguments 聲明為一個形式參數, 都將導致原生的 arguments 不會被創建。

arguments 變量不是一個數組(Array)。 盡管在語法上它有數組相關的屬性 length,但它不從 Array.prototype 繼承,實際上它是一個對象(Object)。


因此,無法對 arguments 變量使用標準的數組方法,比如 push, pop 或者 slice。 雖然使用 for 循環遍歷也是可以的,但是為了更好的使用數組方法,最好把它轉化為一個真正的數組。


轉化為數組


下面的代碼將會創建一個新的數組,包含所有 arguments 對象中的元素。


Array.prototype.slice.call(arguments);

這個轉化比較慢,在性能不好的代碼中不推薦這種做法。


傳遞參數


下面是將參數從一個函數傳遞到另一個函數的推薦做法。


function foo() {

? ? bar.apply(null, arguments);

}

function bar(a, b, c) {

? ? // 干活

}

另一個技巧是同時使用 call 和 apply,創建一個快速的解綁定包裝器。


function Foo() {}


Foo.prototype.method = function(a, b, c) {

? ? console.log(this, a, b, c);

};


// 創建一個解綁定的 "method"

// 輸入參數為: this, arg1, arg2...argN

Foo.method = function() {


? ? // 結果: Foo.prototype.method.call(this, arg1, arg2... argN)

? ? Function.call.apply(Foo.prototype.method, arguments);

};

譯者注:上面的 Foo.method 函數和下面代碼的效果是一樣的:


Foo.method = function() {

? ? var args = Array.prototype.slice.call(arguments);

? ? Foo.prototype.method.apply(args[0], args.slice(1));

};

自動更新


arguments 對象為其內部屬性以及函數形式參數創建 getter 和 setter 方法。


因此,改變形參的值會影響到 arguments 對象的值,反之亦然。


function foo(a, b, c) {

? ? arguments[0] = 2;

? ? a; // 2 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??


? ? b = 4;

? ? arguments[1]; // 4


? ? var d = c;

? ? d = 9;

? ? c; // 3

}

foo(1, 2, 3);

性能真相


不管它是否有被使用,arguments 對象總會被創建,除了兩個特殊情況 - 作為局部變量聲明和作為形式參數。


arguments 的 getters 和 setters 方法總會被創建;因此使用 arguments 對性能不會有什么影響。 除非是需要對 arguments 對象的屬性進行多次訪問。


ES5 提示: 這些 getters 和 setters 在嚴格模式下(strict mode)不會被創建。

譯者注:在 MDC 中對 strict mode 模式下 arguments 的描述有助于我們的理解,請看下面代碼:


// 闡述在 ES5 的嚴格模式下 `arguments` 的特性

function f(a) {

? "use strict";

? a = 42;

? return [a, arguments[0]];

}

var pair = f(17);

assert(pair[0] === 42);

assert(pair[1] === 17);

然而,的確有一種情況會顯著的影響現代 JavaScript 引擎的性能。這就是使用 arguments.callee。


function foo() {

? ? arguments.callee; // do something with this function object

? ? arguments.callee.caller; // and the calling function object

}


function bigLoop() {

? ? for(var i = 0; i < 100000; i++) {

? ? ? ? foo(); // Would normally be inlined...

? ? }

}

上面代碼中,foo 不再是一個單純的內聯函數 inlining(譯者注:這里指的是解析器可以做內聯處理), 因為它需要知道它自己和它的調用者。 這不僅抵消了內聯函數帶來的性能提升,而且破壞了封裝,因此現在函數可能要依賴于特定的上下文。


因此強烈建議大家不要使用 arguments.callee 和它的屬性。


ES5 提示: 在嚴格模式下,arguments.callee 會報錯 TypeError,因為它已經被廢除了。

構造函數


JavaScript 中的構造函數和其它語言中的構造函數是不同的。 通過 new 關鍵字方式調用的函數都被認為是構造函數。


在構造函數內部 - 也就是被調用的函數內 - this 指向新創建的對象 Object。 這個新創建的對象的 prototype 被指向到構造函數的 prototype。


如果被調用的函數沒有顯式的 return 表達式,則隱式的會返回 this 對象 - 也就是新創建的對象。


function Foo() {

? ? this.bla = 1;

}


Foo.prototype.test = function() {

? ? console.log(this.bla);

};


var test = new Foo();

上面代碼把 Foo 作為構造函數調用,并設置新創建對象的 prototype 為 Foo.prototype。


顯式的 return 表達式將會影響返回結果,但僅限于返回的是一個對象。


function Bar() {

? ? return 2;

}

new Bar(); // 返回新創建的對象


function Test() {

? ? this.value = 2;


? ? return {

? ? ? ? foo: 1

? ? };

}

new Test(); // 返回的對象

譯者注:new Bar() 返回的是新創建的對象,而不是數字的字面值 2。 因此 new Bar().constructor === Bar,但是如果返回的是數字對象,結果就不同了,如下所示


function Bar() {

? ? return new Number(2);

}

new Bar().constructor === Number

譯者注:這里得到的 new Test()是函數返回的對象,而不是通過new關鍵字新創建的對象,因此:


(new Test()).value === undefined

(new Test()).foo === 1

如果 new 被遺漏了,則函數不會返回新創建的對象。


function Foo() {

? ? this.bla = 1; // 獲取設置全局參數

}

Foo(); // undefined

雖然上例在有些情況下也能正常運行,但是由于 JavaScript 中 this 的工作原理, 這里的 this 指向全局對象。


工廠模式


為了不使用 new 關鍵字,構造函數必須顯式的返回一個值。


function Bar() {

? ? var value = 1;

? ? return {

? ? ? ? method: function() {

? ? ? ? ? ? return value;

? ? ? ? }

? ? }

}

Bar.prototype = {

? ? foo: function() {}

};


new Bar();

Bar();

上面兩種對 Bar 函數的調用返回的值完全相同,一個新創建的擁有 method 屬性的對象被返回, 其實這里創建了一個閉包。


還需要注意, new Bar() 并不會改變返回對象的原型(譯者注:也就是返回對象的原型不會指向 Bar.prototype)。 因為構造函數的原型會被指向到剛剛創建的新對象,而這里的 Bar 沒有把這個新對象返回(譯者注:而是返回了一個包含 method 屬性的自定義對象)。


在上面的例子中,使用或者不使用 new 關鍵字沒有功能性的區別。


譯者注:上面兩種方式創建的對象不能訪問 Bar 原型鏈上的屬性,如下所示:


var bar1 = new Bar();

typeof(bar1.method); // "function"

typeof(bar1.foo); // "undefined"


var bar2 = Bar();

typeof(bar2.method); // "function"

typeof(bar2.foo); // "undefined"

通過工廠模式創建新對象


我們常聽到的一條忠告是不要使用 new 關鍵字來調用函數,因為如果忘記使用它就會導致錯誤。


為了創建新對象,我們可以創建一個工廠方法,并且在方法內構造一個新對象。


function Foo() {

? ? var obj = {};

? ? obj.value = 'blub';


? ? var private = 2;

? ? obj.someMethod = function(value) {

? ? ? ? this.value = value;

? ? }


? ? obj.getPrivate = function() {

? ? ? ? return private;

? ? }

? ? return obj;

}

雖然上面的方式比起 new 的調用方式不容易出錯,并且可以充分利用私有變量帶來的便利, 但是隨之而來的是一些不好的地方。


會占用更多的內存,因為新創建的對象不能共享原型上的方法。

為了實現繼承,工廠方法需要從另外一個對象拷貝所有屬性,或者把一個對象作為新創建對象的原型。

放棄原型鏈僅僅是因為防止遺漏 new 帶來的問題,這似乎和語言本身的思想相違背。

總結


雖然遺漏 new 關鍵字可能會導致問題,但這并不是放棄使用原型鏈的借口。 最終使用哪種方式取決于應用程序的需求,選擇一種代碼書寫風格并堅持下去才是最重要的。


作用域與命名空間


盡管 JavaScript 支持一對花括號創建的代碼段,但是并不支持塊級作用域; 而僅僅支持 函數作用域。


function test() { // 一個作用域

? ? for(var i = 0; i < 10; i++) { // 不是一個作用域

? ? ? ? // count

? ? }

? ? console.log(i); // 10

}

注意: 如果不是在賦值語句中,而是在 return 表達式或者函數參數中,{...} 將會作為代碼段解析, 而不是作為對象的字面語法解析。如果考慮到 自動分號插入,這可能會導致一些不易察覺的錯誤。

譯者注:如果 return 對象的左括號和 return 不在一行上就會出錯。


// 譯者注:下面輸出 undefined

function add(a, b) {

? ? return?

? ? ? ? a + b;

}

console.log(add(1, 2));

JavaScript 中沒有顯式的命名空間定義,這就意味著所有對象都定義在一個全局共享的命名空間下面。


每次引用一個變量,JavaScript 會向上遍歷整個作用域直到找到這個變量為止。 如果到達全局作用域但是這個變量仍未找到,則會拋出 ReferenceError 異常。


隱式的全局變量


// 腳本 A

foo = '42';


// 腳本 B

var foo = '42'

上面兩段腳本效果不同。腳本 A 在全局作用域內定義了變量 foo,而腳本 B 在當前作用域內定義變量 foo。


再次強調,上面的效果完全不同,不使用 var 聲明變量將會導致隱式的全局變量產生。


// 全局作用域

var foo = 42;

function test() {

? ? // 局部作用域

? ? foo = 21;

}

test();

foo; // 21

在函數 test 內不使用 var 關鍵字聲明 foo 變量將會覆蓋外部的同名變量。 起初這看起來并不是大問題,但是當有成千上萬行代碼時,不使用 var 聲明變量將會帶來難以跟蹤的 BUG。


// 全局作用域

var items = [/* 數組 */];

for(var i = 0; i < 10; i++) {

? ? subLoop();

}


function subLoop() {

? ? // subLoop 函數作用域

? ? for(i = 0; i < 10; i++) { // 沒有使用 var 聲明變量

? ? ? ? // 干活

? ? }

}

外部循環在第一次調用 subLoop 之后就會終止,因為 subLoop 覆蓋了全局變量 i。 在第二個 for 循環中使用 var 聲明變量可以避免這種錯誤。 聲明變量時絕對不要遺漏 var 關鍵字,除非這就是期望的影響外部作用域的行為。


局部變量


JavaScript 中局部變量只可能通過兩種方式聲明,一個是作為函數參數,另一個是通過 var 關鍵字聲明。


// 全局變量

var foo = 1;

var bar = 2;

var i = 2;


function test(i) {

? ? // 函數 test 內的局部作用域

? ? i = 5;


? ? var foo = 3;

? ? bar = 4;

}

test(10);

foo 和 i 是函數 test 內的局部變量,而對 bar 的賦值將會覆蓋全局作用域內的同名變量。


變量聲明提升(Hoisting)


JavaScript 會提升變量聲明。這意味著 var 表達式和 function 聲明都將會被提升到當前作用域的頂部。


bar();

var bar = function() {};

var someValue = 42;


test();

function test(data) {

? ? if (false) {

? ? ? ? goo = 1;


? ? } else {

? ? ? ? var goo = 2;

? ? }

? ? for(var i = 0; i < 100; i++) {

? ? ? ? var e = data[i];

? ? }

}

上面代碼在運行之前將會被轉化。JavaScript 將會把 var 表達式和 function 聲明提升到當前作用域的頂部。


// var 表達式被移動到這里

var bar, someValue; // 缺省值是 'undefined'


// 函數聲明也會提升

function test(data) {

? ? var goo, i, e; // 沒有塊級作用域,這些變量被移動到函數頂部

? ? if (false) {

? ? ? ? goo = 1;


? ? } else {

? ? ? ? goo = 2;

? ? }

? ? for(i = 0; i < 100; i++) {

? ? ? ? e = data[i];

? ? }

}


bar(); // 出錯:TypeError,因為 bar 依然是 'undefined'

someValue = 42; // 賦值語句不會被提升規則(hoisting)影響

bar = function() {};


test();

沒有塊級作用域不僅導致 var 表達式被從循環內移到外部,而且使一些 if 表達式更難看懂。


在原來代碼中,if 表達式看起來修改了全局變量 goo,實際上在提升規則被應用后,卻是在修改局部變量。


如果沒有提升規則(hoisting)的知識,下面的代碼看起來會拋出異常 ReferenceError。


// 檢查 SomeImportantThing 是否已經被初始化

if (!SomeImportantThing) {

? ? var SomeImportantThing = {};

}

實際上,上面的代碼正常運行,因為 var 表達式會被提升到全局作用域的頂部。


var SomeImportantThing;


// 其它一些代碼,可能會初始化 SomeImportantThing,也可能不會


// 檢查是否已經被初始化

if (!SomeImportantThing) {

? ? SomeImportantThing = {};

}

譯者注:在 Nettuts+ 網站有一篇介紹 hoisting 的文章,其中的代碼很有啟發性。


// 譯者注:來自 Nettuts+ 的一段代碼,生動的闡述了 JavaScript 中變量聲明提升規則

var myvar = 'my value'; ?


(function() { ?

? ? alert(myvar); // undefined ?

? ? var myvar = 'local value'; ?

})(); ?

名稱解析順序


JavaScript 中的所有作用域,包括全局作用域,都有一個特別的名稱 this 指向當前對象。


函數作用域內也有默認的變量 arguments,其中包含了傳遞到函數中的參數。


比如,當訪問函數內的 foo 變量時,JavaScript 會按照下面順序查找:


當前作用域內是否有 var foo 的定義。

函數形式參數是否有使用 foo 名稱的。

函數自身是否叫做 foo。

回溯到上一級作用域,然后從 #1 重新開始。

注意: 自定義 arguments 參數將會阻止原生的 arguments 對象的創建。

命名空間


只有一個全局作用域導致的常見錯誤是命名沖突。在 JavaScript中,這可以通過 匿名包裝器 輕松解決。


(function() {

? ? // 函數創建一個命名空間


? ? window.foo = function() {

? ? ? ? // 對外公開的函數,創建了閉包

? ? };


})(); // 立即執行此匿名函數

匿名函數被認為是 表達式;因此為了可調用性,它們首先會被執行。


( // 小括號內的函數首先被執行

function() {}

) // 并且返回函數對象

() // 調用上面的執行結果,也就是函數對象

有一些其他的調用函數表達式的方法,比如下面的兩種方式語法不同,但是效果一模一樣。


// 另外兩種方式

+function(){}();

(function(){}());

結論


推薦使用匿名包裝器(譯者注:也就是自執行的匿名函數)來創建命名空間。這樣不僅可以防止命名沖突, 而且有利于程序的模塊化。


另外,使用全局變量被認為是不好的習慣。這樣的代碼容易產生錯誤并且維護成本較高。


數組

數組遍歷與屬性


雖然在 JavaScript 中數組是對象,但是沒有好的理由去使用 for in 循環 遍歷數組。 相反,有一些好的理由不去使用 for in 遍歷數組。


注意: JavaScript 中數組不是 關聯數組。 JavaScript 中只有對象 來管理鍵值的對應關系。但是關聯數組是保持順序的,而對象不是。

由于 for in 循環會枚舉原型鏈上的所有屬性,唯一過濾這些屬性的方式是使用 hasOwnProperty 函數, 因此會比普通的 for 循環慢上好多倍。


遍歷


為了達到遍歷數組的最佳性能,推薦使用經典的 for 循環。


var list = [1, 2, 3, 4, 5, ...... 100000000];

for(var i = 0, l = list.length; i < l; i++) {

? ? console.log(list[i]);

}

上面代碼有一個處理,就是通過 l = list.length 來緩存數組的長度。


雖然 length 是數組的一個屬性,但是在每次循環中訪問它還是有性能開銷。 可能最新的 JavaScript 引擎在這點上做了優化,但是我們沒法保證自己的代碼是否運行在這些最近的引擎之上。


實際上,不使用緩存數組長度的方式比緩存版本要慢很多。


length 屬性


length 屬性的 getter 方式會簡單的返回數組的長度,而 setter 方式會截斷數組。


var foo = [1, 2, 3, 4, 5, 6];

foo.length = 3;

foo; // [1, 2, 3]


foo.length = 6;

foo; // [1, 2, 3]

譯者注: 在 Firebug 中查看此時 foo 的值是: [1, 2, 3, undefined, undefined, undefined] 但是這個結果并不準確,如果你在 Chrome 的控制臺查看 foo 的結果,你會發現是這樣的: [1, 2, 3] 因為在 JavaScript 中 undefined 是一個變量,注意是變量不是關鍵字,因此上面兩個結果的意義是完全不相同的。


// 譯者注:為了驗證,我們來執行下面代碼,看序號 5 是否存在于 foo 中。

5 in foo; // 不管在 Firebug 或者 Chrome 都返回 false

foo[5] = undefined;

5 in foo; // 不管在 Firebug 或者 Chrome 都返回 true

為 length 設置一個更小的值會截斷數組,但是增大 length 屬性值不會對數組產生影響。


結論


為了更好的性能,推薦使用普通的 for 循環并緩存數組的 length 屬性。 使用 for in 遍歷數組被認為是不好的代碼習慣并傾向于產生錯誤和導致性能問題。


Array 構造函數


由于 Array 的構造函數在如何處理參數時有點模棱兩可,因此總是推薦使用數組的字面語法 - [] - 來創建數組。


[1, 2, 3]; // 結果: [1, 2, 3]

new Array(1, 2, 3); // 結果: [1, 2, 3]


[3]; // 結果: [3]

new Array(3); // 結果: []?

new Array('3') // 結果: ['3']


// 譯者注:因此下面的代碼將會使人很迷惑

new Array(3, 4, 5); // 結果: [3, 4, 5]?

new Array(3) // 結果: [],此數組長度為 3

譯者注:這里的模棱兩可指的是數組的兩種構造函數語法

由于只有一個參數傳遞到構造函數中(譯者注:指的是 new Array(3); 這種調用方式),并且這個參數是數字,構造函數會返回一個 length 屬性被設置為此參數的空數組。 需要特別注意的是,此時只有 length 屬性被設置,真正的數組并沒有生成。


譯者注:在 Firebug 中,你會看到 [undefined, undefined, undefined],這其實是不對的。在上一節有詳細的分析。

var arr = new Array(3);

arr[1]; // undefined

1 in arr; // false, 數組還沒有生成

這種優先于設置數組長度屬性的做法只在少數幾種情況下有用,比如需要循環字符串,可以避免 for 循環的麻煩。


new Array(count + 1).join(stringToRepeat);

譯者注: new Array(3).join('#') 將會返回 ##

結論


應該盡量避免使用數組構造函數創建新數組。推薦使用數組的字面語法。它們更加短小和簡潔,因此增加了代碼的可讀性。


類型

相等與比較


JavaScript 有兩種方式判斷兩個值是否相等。


等于操作符


等于操作符由兩個等號組成:==


JavaScript 是弱類型語言,這就意味著,等于操作符會為了比較兩個值而進行強制類型轉換。


"" ? ? ? ? ? == ? "0" ? ? ? ? ? // false

0 ? ? ? ? ? ?== ? "" ? ? ? ? ? ?// true

0 ? ? ? ? ? ?== ? "0" ? ? ? ? ? // true

false ? ? ? ?== ? "false" ? ? ? // false

false ? ? ? ?== ? "0" ? ? ? ? ? // true

false ? ? ? ?== ? undefined ? ? // false

false ? ? ? ?== ? null ? ? ? ? ?// false

null ? ? ? ? == ? undefined ? ? // true

" \t\r\n" ? ?== ? 0 ? ? ? ? ? ? // true

上面的表格展示了強制類型轉換,這也是使用 == 被廣泛認為是不好編程習慣的主要原因, 由于它的復雜轉換規則,會導致難以跟蹤的問題。


此外,強制類型轉換也會帶來性能消耗,比如一個字符串為了和一個數字進行比較,必須事先被強制轉換為數字。


嚴格等于操作符


嚴格等于操作符由三個等號組成:===


不像普通的等于操作符,嚴格等于操作符不會進行強制類型轉換。


"" ? ? ? ? ? === ? "0" ? ? ? ? ? // false

0 ? ? ? ? ? ?=== ? "" ? ? ? ? ? ?// false

0 ? ? ? ? ? ?=== ? "0" ? ? ? ? ? // false

false ? ? ? ?=== ? "false" ? ? ? // false

false ? ? ? ?=== ? "0" ? ? ? ? ? // false

false ? ? ? ?=== ? undefined ? ? // false

false ? ? ? ?=== ? null ? ? ? ? ?// false

null ? ? ? ? === ? undefined ? ? // false

" \t\r\n" ? ?=== ? 0 ? ? ? ? ? ? // false

上面的結果更加清晰并有利于代碼的分析。如果兩個操作數類型不同就肯定不相等也有助于性能的提升。


比較對象


雖然 == 和 === 操作符都是等于操作符,但是當其中有一個操作數為對象時,行為就不同了。


{} === {}; ? ? ? ? ? ? ? ? ? // false

new String('foo') === 'foo'; // false

new Number(10) === 10; ? ? ? // false

var foo = {};

foo === foo; ? ? ? ? ? ? ? ? // true

這里等于操作符比較的不是值是否相等,而是是否屬于同一個身份;也就是說,只有對象的同一個實例才被認為是相等的。 這有點像 Python 中的 is 和 C 中的指針比較。


注意:為了更直觀的看到==和===的區別,可以參見JavaScript Equality Table

結論


強烈推薦使用嚴格等于操作符。如果類型需要轉換,應該在比較之前顯式的轉換, 而不是使用語言本身復雜的強制轉換規則。


typeof 操作符


typeof 操作符(和 instanceof 一起)或許是 JavaScript 中最大的設計缺陷, 因為幾乎不可能從它們那里得到想要的結果。


盡管 instanceof 還有一些極少數的應用場景,typeof 只有一個實際的應用(譯者注:這個實際應用是用來檢測一個對象是否已經定義或者是否已經賦值), 而這個應用卻不是用來檢查對象的類型。


注意: 由于 typeof 也可以像函數的語法被調用,比如 typeof(obj),但這并不是一個函數調用。 那兩個小括號只是用來計算一個表達式的值,這個返回值會作為 typeof 操作符的一個操作數。 實際上不存在名為 typeof 的函數。

JavaScript 類型表格


Value ? ? ? ? ? ? ? Class ? ? ?Type

-------------------------------------

"foo" ? ? ? ? ? ? ? String ? ? string

new String("foo") ? String ? ? object

1.2 ? ? ? ? ? ? ? ? Number ? ? number

new Number(1.2) ? ? Number ? ? object

true ? ? ? ? ? ? ? ?Boolean ? ?boolean

new Boolean(true) ? Boolean ? ?object

new Date() ? ? ? ? ?Date ? ? ? object

new Error() ? ? ? ? Error ? ? ?object

[1,2,3] ? ? ? ? ? ? Array ? ? ?object

new Array(1, 2, 3) ?Array ? ? ?object

new Function("") ? ?Function ? function

/abc/g ? ? ? ? ? ? ?RegExp ? ? object (function in Nitro/V8)

new RegExp("meow") ?RegExp ? ? object (function in Nitro/V8)

{} ? ? ? ? ? ? ? ? ?Object ? ? object

new Object() ? ? ? ?Object ? ? object

上面表格中,Type 一列表示 typeof 操作符的運算結果??梢钥吹?#xff0c;這個值在大多數情況下都返回 "object"。


Class 一列表示對象的內部屬性 `Class` 的值。


JavaScript 標準文檔中定義: `Class` 的值只可能是下面字符串中的一個: Arguments, Array, Boolean, Date, Error, Function, JSON, Math, Number, Object, RegExp, String.

為了獲取對象的 `Class`,我們需要使用定義在 Object.prototype 上的方法 toString。


對象的類定義


JavaScript 標準文檔只給出了一種獲取 `Class` 值的方法,那就是使用 Object.prototype.toString。


function is(type, obj) {

? ? var clas = Object.prototype.toString.call(obj).slice(8, -1);

? ? return obj !== undefined && obj !== null && clas === type;

}


is('String', 'test'); // true

is('String', new String('test')); // true

上面例子中,Object.prototype.toString 方法被調用,this 被設置為了需要獲取 `Class` 值的對象。


譯者注:Object.prototype.toString 返回一種標準格式字符串,所以上例可以通過 slice 截取指定位置的字符串,如下所示:


Object.prototype.toString.call([]) ? ?// "[object Array]"

Object.prototype.toString.call({}) ? ?// "[object Object]"

Object.prototype.toString.call(2) ? ?// "[object Number]"

ES5 提示: 在 ECMAScript 5 中,為了方便,對 null 和 undefined 調用 Object.prototype.toString 方法, 其返回值由 Object 變成了 Null 和 Undefined。

譯者注:這種變化可以從 IE8 和 Firefox 4 中看出區別,如下所示:


// IE8

Object.prototype.toString.call(null) ? ?// "[object Object]"

Object.prototype.toString.call(undefined) ? ?// "[object Object]"


// Firefox 4

Object.prototype.toString.call(null) ? ?// "[object Null]"

Object.prototype.toString.call(undefined) ? ?// "[object Undefined]"

測試為定義變量


typeof foo !== 'undefined'

上面代碼會檢測 foo 是否已經定義;如果沒有定義而直接使用會導致 ReferenceError 的異常。 這是 typeof 唯一有用的地方。


結論


為了檢測一個對象的類型,強烈推薦使用 Object.prototype.toString 方法; 因為這是唯一一個可依賴的方式。正如上面表格所示,typeof 的一些返回值在標準文檔中并未定義, 因此不同的引擎實現可能不同。


除非為了檢測一個變量是否已經定義,我們應盡量避免使用 typeof 操作符。


instanceof 操作符


instanceof 操作符用來比較兩個操作數的構造函數。只有在比較自定義的對象時才有意義。 如果用來比較內置類型,將會和 typeof 操作符 一樣用處不大。


比較自定義對象


function Foo() {}

function Bar() {}

Bar.prototype = new Foo();


new Bar() instanceof Bar; // true

new Bar() instanceof Foo; // true


// 如果僅僅設置 Bar.prototype 為函數 Foo 本身,而不是 Foo 構造函數的一個實例

Bar.prototype = Foo;

new Bar() instanceof Foo; // false

instanceof 比較內置類型


new String('foo') instanceof String; // true

new String('foo') instanceof Object; // true


'foo' instanceof String; // false

'foo' instanceof Object; // false

有一點需要注意,instanceof 用來比較屬于不同 JavaScript 上下文的對象(比如,瀏覽器中不同的文檔結構)時將會出錯, 因為它們的構造函數不會是同一個對象。


結論


instanceof 操作符應該僅僅用來比較來自同一個 JavaScript 上下文的自定義對象。 正如 typeof 操作符一樣,任何其它的用法都應該是避免的。


類型轉換


JavaScript 是弱類型語言,所以會在任何可能的情況下應用強制類型轉換。


// 下面的比較結果是:true

new Number(10) == 10; // Number.toString() 返回的字符串被再次轉換為數字


10 == '10'; ? ? ? ? ? // 字符串被轉換為數字

10 == '+10 '; ? ? ? ? // 同上

10 == '010'; ? ? ? ? ?// 同上?

isNaN(null) == false; // null 被轉換為數字 0

? ? ? ? ? ? ? ? ? ? ? // 0 當然不是一個 NaN(譯者注:否定之否定)


// 下面的比較結果是:false

10 == 010;

10 == '-10';

ES5 提示: 以 0 開頭的數字字面值會被作為八進制數字解析。 而在 ECMAScript 5 嚴格模式下,這個特性被移除了。

為了避免上面復雜的強制類型轉換,強烈推薦使用嚴格的等于操作符。 雖然這可以避免大部分的問題,但 JavaScript 的弱類型系統仍然會導致一些其它問題。


內置類型的構造函數


內置類型(比如 Number 和 String)的構造函數在被調用時,使用或者不使用 new 的結果完全不同。


new Number(10) === 10; ? ? // False, 對象與數字的比較

Number(10) === 10; ? ? ? ? // True, 數字與數字的比較

new Number(10) + 0 === 10; // True, 由于隱式的類型轉換

使用內置類型 Number 作為構造函數將會創建一個新的 Number 對象, 而在不使用 new 關鍵字的 Number 函數更像是一個數字轉換器。


另外,在比較中引入對象的字面值將會導致更加復雜的強制類型轉換。


最好的選擇是把要比較的值顯式的轉換為三種可能的類型之一。


轉換為字符串


'' + 10 === '10'; // true

將一個值加上空字符串可以輕松轉換為字符串類型。


轉換為數字


+'10' === 10; // true

使用一元的加號操作符,可以把字符串轉換為數字。


譯者注:字符串轉換為數字的常用方法:


+'010' === 10

Number('010') === 10

parseInt('010', 10) === 10 ?// 用來轉換為整數


+'010.2' === 10.2

Number('010.2') === 10.2

parseInt('010.2', 10) === 10

轉換為布爾型


通過使用 否 操作符兩次,可以把一個值轉換為布爾型。


!!'foo'; ? // true

!!''; ? ? ?// false

!!'0'; ? ? // true

!!'1'; ? ? // true

!!'-1' ? ? // true

!!{}; ? ? ?// true

!!true; ? ?// true

核心

為什么不要使用 eval


eval 函數會在當前作用域中執行一段 JavaScript 代碼字符串。


var foo = 1;

function test() {

? ? var foo = 2;

? ? eval('foo = 3');

? ? return foo;

}

test(); // 3

foo; // 1

但是 eval 只在被直接調用并且調用函數就是 eval 本身時,才在當前作用域中執行。


var foo = 1;

function test() {

? ? var foo = 2;

? ? var bar = eval;

? ? bar('foo = 3');

? ? return foo;

}

test(); // 2

foo; // 3

譯者注:上面的代碼等價于在全局作用域中調用 eval,和下面兩種寫法效果一樣:


// 寫法一:直接調用全局作用域下的 foo 變量

var foo = 1;

function test() {

? ? var foo = 2;

? ? window.foo = 3;

? ? return foo;

}

test(); // 2

foo; // 3


// 寫法二:使用 call 函數修改 eval 執行的上下文為全局作用域

var foo = 1;

function test() {

? ? var foo = 2;

? ? eval.call(window, 'foo = 3');

? ? return foo;

}

test(); // 2

foo; // 3

在任何情況下我們都應該避免使用 eval 函數。99.9% 使用 eval 的場景都有不使用 eval 的解決方案。


偽裝的 eval


定時函數 setTimeout 和 setInterval 都可以接受字符串作為它們的第一個參數。 這個字符串總是在全局作用域中執行,因此 eval 在這種情況下沒有被直接調用。


安全問題


eval 也存在安全問題,因為它會執行任意傳給它的代碼, 在代碼字符串未知或者是來自一個不信任的源時,絕對不要使用 eval 函數。


結論


絕對不要使用 eval,任何使用它的代碼都會在它的工作方式,性能和安全性方面受到質疑。 如果一些情況必須使用到 eval 才能正常工作,首先它的設計會受到質疑,這不應該是首選的解決方案, 一個更好的不使用 eval 的解決方案應該得到充分考慮并優先采用。


undefined 和 null


JavaScript 有兩個表示‘空’的值,其中比較有用的是 undefined。


undefined 的值


undefined 是一個值為 undefined 的類型。


這個語言也定義了一個全局變量,它的值是 undefined,這個變量也被稱為 undefined。 但是這個變量不是一個常量,也不是一個關鍵字。這意味著它的值可以輕易被覆蓋。


ES5 提示: 在 ECMAScript 5 的嚴格模式下,undefined 不再是 可寫的了。 但是它的名稱仍然可以被隱藏,比如定義一個函數名為 undefined。

下面的情況會返回 undefined 值:


訪問未修改的全局變量 undefined。

由于沒有定義 return 表達式的函數隱式返回。

return 表達式沒有顯式的返回任何內容。

訪問不存在的屬性。

函數參數沒有被顯式的傳遞值。

任何被設置為 undefined 值的變量。

處理 undefined 值的改變


由于全局變量 undefined 只是保存了 undefined 類型實際值的副本, 因此對它賦新值不會改變類型 undefined 的值。


然而,為了方便其它變量和 undefined 做比較,我們需要事先獲取類型 undefined 的值。


為了避免可能對 undefined 值的改變,一個常用的技巧是使用一個傳遞到匿名包裝器的額外參數。 在調用時,這個參數不會獲取任何值。


var undefined = 123;

(function(something, foo, undefined) {

? ? // 局部作用域里的 undefined 變量重新獲得了 `undefined` 值


})('Hello World', 42);

另外一種達到相同目的方法是在函數內使用變量聲明。


var undefined = 123;

(function(something, foo) {

? ? var undefined;

? ? ...


})('Hello World', 42);

這里唯一的區別是,在壓縮后并且函數內沒有其它需要使用 var 聲明變量的情況下,這個版本的代碼會多出 4 個字節的代碼。


譯者注:這里有點繞口,其實很簡單。如果此函數內沒有其它需要聲明的變量,那么 var 總共 4 個字符(包含一個空白字符) 就是專門為 undefined 變量準備的,相比上個例子多出了 4 個字節。

null 的用處


JavaScript 中的 undefined 的使用場景類似于其它語言中的 null,實際上 JavaScript 中的 null 是另外一種數據類型。


它在 JavaScript 內部有一些使用場景(比如聲明原型鏈的終結 Foo.prototype = null),但是大多數情況下都可以使用 undefined 來代替。


自動分號插入


盡管 JavaScript 有 C 的代碼風格,但是它不強制要求在代碼中使用分號,實際上可以省略它們。


JavaScript 不是一個沒有分號的語言,恰恰相反上它需要分號來就解析源代碼。 因此 JavaScript 解析器在遇到由于缺少分號導致的解析錯誤時,會自動在源代碼中插入分號。


var foo = function() {

} // 解析錯誤,分號丟失

test()

自動插入分號,解析器重新解析。


var foo = function() {

}; // 沒有錯誤,解析繼續

test()

自動的分號插入被認為是 JavaScript 語言最大的設計缺陷之一,因為它能改變代碼的行為。


工作原理


下面的代碼沒有分號,因此解析器需要自己判斷需要在哪些地方插入分號。


(function(window, undefined) {

? ? function test(options) {

? ? ? ? log('testing!')


? ? ? ? (options.list || []).forEach(function(i) {


? ? ? ? })


? ? ? ? options.value.test(

? ? ? ? ? ? 'long string to pass here',

? ? ? ? ? ? 'and another long string to pass'

? ? ? ? )


? ? ? ? return

? ? ? ? {

? ? ? ? ? ? foo: function() {}

? ? ? ? }

? ? }

? ? window.test = test


})(window)


(function(window) {

? ? window.someLibrary = {}

})(window)

下面是解析器"猜測"的結果。


(function(window, undefined) {

? ? function test(options) {


? ? ? ? // 沒有插入分號,兩行被合并為一行

? ? ? ? log('testing!')(options.list || []).forEach(function(i) {


? ? ? ? }); // <- 插入分號


? ? ? ? options.value.test(

? ? ? ? ? ? 'long string to pass here',

? ? ? ? ? ? 'and another long string to pass'

? ? ? ? ); // <- 插入分號


? ? ? ? return; // <- 插入分號, 改變了 return 表達式的行為

? ? ? ? { // 作為一個代碼段處理

? ? ? ? ? ? foo: function() {}?

? ? ? ? }; // <- 插入分號

? ? }

? ? window.test = test; // <- 插入分號


// 兩行又被合并了

})(window)(function(window) {

? ? window.someLibrary = {}; // <- 插入分號

})(window); //<- 插入分號

注意: JavaScript 不能正確的處理 return 表達式緊跟換行符的情況, 雖然這不能算是自動分號插入的錯誤,但這確實是一種不希望的副作用。

解析器顯著改變了上面代碼的行為,在另外一些情況下也會做出錯誤的處理。


前置括號


在前置括號的情況下,解析器不會自動插入分號。


log('testing!')

(options.list || []).forEach(function(i) {})

上面代碼被解析器轉換為一行。


log('testing!')(options.list || []).forEach(function(i) {})

log 函數的執行結果極大可能不是函數;這種情況下就會出現 TypeError 的錯誤,詳細錯誤信息可能是 undefined is not a function。


結論


建議絕對不要省略分號,同時也提倡將花括號和相應的表達式放在一行, 對于只有一行代碼的 if 或者 else 表達式,也不應該省略花括號。 這些良好的編程習慣不僅可以提到代碼的一致性,而且可以防止解析器改變代碼行為的錯誤處理。


其它

setTimeout 和 setInterval


由于 JavaScript 是異步的,可以使用 setTimeout 和 setInterval 來計劃執行函數。


注意: 定時處理不是 ECMAScript 的標準,它們在 DOM (文檔對象模型) 被實現。

function foo() {}

var id = setTimeout(foo, 1000); // 返回一個大于零的數字

當 setTimeout 被調用時,它會返回一個 ID 標識并且計劃在將來大約 1000 毫秒后調用 foo 函數。 foo 函數只會被執行一次。


基于 JavaScript 引擎的計時策略,以及本質上的單線程運行方式,所以其它代碼的運行可能會阻塞此線程。 因此沒法確保函數會在 setTimeout 指定的時刻被調用。


作為第一個參數的函數將會在全局作用域中執行,因此函數內的 this 將會指向這個全局對象。


function Foo() {

? ? this.value = 42;

? ? this.method = function() {

? ? ? ? // this 指向全局對象

? ? ? ? console.log(this.value); // 輸出:undefined

? ? };

? ? setTimeout(this.method, 500);

}

new Foo();

注意: setTimeout 的第一個參數是函數對象,一個常犯的錯誤是這樣的 setTimeout(foo(), 1000), 這里回調函數是 foo 的返回值,而不是foo本身。 大部分情況下,這是一個潛在的錯誤,因為如果函數返回 undefined,setTimeout 也不會報錯。

setInterval 的堆調用


setTimeout 只會執行回調函數一次,不過 setInterval - 正如名字建議的 - 會每隔 X 毫秒執行函數一次。 但是卻不鼓勵使用這個函數。


當回調函數的執行被阻塞時,setInterval 仍然會發布更多的回調指令。在很小的定時間隔情況下,這會導致回調函數被堆積起來。


function foo(){

? ? // 阻塞執行 1 秒

}

setInterval(foo, 100);

上面代碼中,foo 會執行一次隨后被阻塞了一秒鐘。


在 foo 被阻塞的時候,setInterval 仍然在組織將來對回調函數的調用。 因此,當第一次 foo 函數調用結束時,已經有 10 次函數調用在等待執行。


處理可能的阻塞調用


最簡單也是最容易控制的方案,是在回調函數內部使用 setTimeout 函數。


function foo(){

? ? // 阻塞執行 1 秒

? ? setTimeout(foo, 100);

}

foo();

這樣不僅封裝了 setTimeout 回調函數,而且阻止了調用指令的堆積,可以有更多的控制。 foo 函數現在可以控制是否繼續執行還是終止執行。


手工清空定時器


可以通過將定時時產生的 ID 標識傳遞給 clearTimeout 或者 clearInterval 函數來清除定時, 至于使用哪個函數取決于調用的時候使用的是 setTimeout 還是 setInterval。


var id = setTimeout(foo, 1000);

clearTimeout(id);

清除所有定時器


由于沒有內置的清除所有定時器的方法,可以采用一種暴力的方式來達到這一目的。


// 清空"所有"的定時器

for(var i = 1; i < 1000; i++) {

? ? clearTimeout(i);

}

可能還有些定時器不會在上面代碼中被清除(譯者注:如果定時器調用時返回的 ID 值大于 1000), 因此我們可以事先保存所有的定時器 ID,然后一把清除。


隱藏使用 eval


setTimeout 和 setInterval 也接受第一個參數為字符串的情況。 這個特性絕對不要使用,因為它在內部使用了 eval。


注意: 由于定時器函數不是 ECMAScript 的標準,如何解析字符串參數在不同的 JavaScript 引擎實現中可能不同。 事實上,微軟的 JScript 會使用 Function 構造函數來代替 eval 的使用。

function foo() {

? ? // 將會被調用

}


function bar() {

? ? function foo() {

? ? ? ? // 不會被調用

? ? }

? ? setTimeout('foo()', 1000);

}

bar();

由于 eval 在這種情況下不是被直接調用,因此傳遞到 setTimeout 的字符串會自全局作用域中執行; 因此,上面的回調函數使用的不是定義在 bar 作用域中的局部變量 foo。


建議不要在調用定時器函數時,為了向回調函數傳遞參數而使用字符串的形式。


function foo(a, b, c) {}


// 不要這樣做

setTimeout('foo(1,2, 3)', 1000)


// 可以使用匿名函數完成相同功能

setTimeout(function() {

? ? foo(1, 2, 3);

}, 1000)

注意: 雖然也可以使用這樣的語法 setTimeout(foo, 1000, 1, 2, 3), 但是不推薦這么做,因為在使用對象的屬性方法時可能會出錯。 (譯者注:這里說的是屬性方法內,this 的指向錯誤)

結論


絕對不要使用字符串作為 setTimeout 或者 setInterval 的第一個參數, 這么寫的代碼明顯質量很差。當需要向回調函數傳遞參數時,可以創建一個匿名函數,在函數內執行真實的回調函數。


另外,應該避免使用 setInterval,因為它的定時執行不會被 JavaScript 阻塞。


原文地址:http://bonsaiden.github.io/JavaScript-Garden/zh/#types.casting

轉載于:https://blog.51cto.com/7613577/1650062

總結

以上是生活随笔為你收集整理的js综合的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 亚洲性无码av中文字幕 | 成年女人永久免费看片 | 久久久国产一区二区三区 | 成年美女黄网站色大免费全看 | 欧美日韩一区二区三区自拍 | 蜜桃视频韩日免费播放 | 久久久中文久久久无码 | 精品国产福利一区二区 | 国产成人综合色在线观看网站 | 丁香花在线影院观看在线播放 | 久久午夜夜伦鲁鲁片无码免费 | 99久久精品国产一区二区蜜芽 | 噜噜噜亚洲色成人网站 | 亚洲乱码中文字幕在线 | 国产成人无码午夜视频在线观看 | 女人被男人爽到呻吟的视频 | 国产亚洲精品久久久久久久 | 久久成人a毛片免费观看网站 | 天天躁日日躁狠狠躁免费麻豆 | 大肉大捧一进一出视频出来呀 | 中文亚洲成a人片在线观看 | 亚洲区小说区激情区图片区 | 亚洲一区二区观看播放 | 国产舌乚八伦偷品w中 | 成人免费视频视频在线观看 免费 | 亚洲人成影院在线观看 | 亚洲人成无码网www | 亚洲人成网站免费播放 | 99久久人妻精品免费一区 | 少妇性l交大片欧洲热妇乱xxx | 国产激情一区二区三区 | 国产精品怡红院永久免费 | 欧美精品国产综合久久 | 婷婷六月久久综合丁香 | 国产精品久久久久影院嫩草 | 福利一区二区三区视频在线观看 | 国产精品理论片在线观看 | 欧美freesex黑人又粗又大 | 人妻尝试又大又粗久久 | 午夜时刻免费入口 | 亚洲欧美精品aaaaaa片 | 国产精品无码一区二区三区不卡 | 欧美熟妇另类久久久久久不卡 | 国产9 9在线 | 中文 | 日韩精品一区二区av在线 | 精品国产一区二区三区四区 | 中文久久乱码一区二区 | 亚洲欧美精品伊人久久 | 天海翼激烈高潮到腰振不止 | 漂亮人妻洗澡被公强 日日躁 | 国产性生交xxxxx无码 | 欧美三级a做爰在线观看 | 7777奇米四色成人眼影 | 国产精品视频免费播放 | 99国产欧美久久久精品 | 国产精品二区一区二区aⅴ污介绍 | 无码吃奶揉捏奶头高潮视频 | 亚洲精品一区二区三区大桥未久 | 精品国偷自产在线视频 | 国产手机在线αⅴ片无码观看 | 国产精品嫩草久久久久 | 国产精品高潮呻吟av久久 | 久久精品无码一区二区三区 | 色情久久久av熟女人妻网站 | 精品无码国产自产拍在线观看蜜 | 少妇一晚三次一区二区三区 | 国产人妻精品午夜福利免费 | 强伦人妻一区二区三区视频18 | 亚洲熟悉妇女xxx妇女av | 中文字幕无线码 | 无码国产色欲xxxxx视频 | 亚洲男人av天堂午夜在 | 中文字幕无线码 | 亚洲国产精品毛片av不卡在线 | 亚洲熟熟妇xxxx | 亚洲成av人综合在线观看 | 国产人妻人伦精品1国产丝袜 | 欧美性生交活xxxxxdddd | 国产精品亚洲综合色区韩国 | 99久久婷婷国产综合精品青草免费 | 97无码免费人妻超级碰碰夜夜 | 日韩精品成人一区二区三区 | 国产成人精品视频ⅴa片软件竹菊 | 国产亚av手机在线观看 | 极品尤物被啪到呻吟喷水 | 欧美丰满老熟妇xxxxx性 | 成人精品视频一区二区 | 欧美野外疯狂做受xxxx高潮 | 欧美 丝袜 自拍 制服 另类 | 亚洲日韩av一区二区三区四区 | 自拍偷自拍亚洲精品10p | 欧美日韩亚洲国产精品 | 天天躁日日躁狠狠躁免费麻豆 | 国产两女互慰高潮视频在线观看 | 亚洲一区二区三区国产精华液 | 少妇激情av一区二区 | 荫蒂添的好舒服视频囗交 | 国产真实伦对白全集 | 国产精品美女久久久网av | 亚洲狠狠色丁香婷婷综合 | 最新版天堂资源中文官网 | 国产suv精品一区二区五 | 中文字幕人妻无码一夲道 | 精品日本一区二区三区在线观看 | 中文字幕av无码一区二区三区电影 | 鲁大师影院在线观看 | 免费无码的av片在线观看 | 国产av剧情md精品麻豆 | 人妻尝试又大又粗久久 | 成年美女黄网站色大免费全看 | 真人与拘做受免费视频一 | 国产国语老龄妇女a片 | 国产精品va在线播放 | 夜夜影院未满十八勿进 | 日韩少妇白浆无码系列 | 精品一区二区三区无码免费视频 | 99国产欧美久久久精品 | 丁香花在线影院观看在线播放 | 欧美激情综合亚洲一二区 | 亚洲国产精品一区二区第一页 | 少妇性荡欲午夜性开放视频剧场 | 久久国语露脸国产精品电影 | 欧美日韩久久久精品a片 | 亚洲 高清 成人 动漫 | 无遮挡国产高潮视频免费观看 | 日本乱人伦片中文三区 | 中文字幕乱码中文乱码51精品 | a片免费视频在线观看 | 欧美35页视频在线观看 | 国产性生大片免费观看性 | 免费看少妇作爱视频 | 无码人妻出轨黑人中文字幕 | 色一情一乱一伦一区二区三欧美 | 国产疯狂伦交大片 | 亚洲人成人无码网www国产 | av香港经典三级级 在线 | 国产97人人超碰caoprom | av香港经典三级级 在线 | 精品一区二区三区无码免费视频 | 欧美刺激性大交 | 久久久久99精品国产片 | 天天拍夜夜添久久精品 | 日韩欧美成人免费观看 | 色综合久久网 | 亚洲精品国偷拍自产在线观看蜜桃 | 欧美日韩综合一区二区三区 | 秋霞成人午夜鲁丝一区二区三区 | 日韩精品乱码av一区二区 | 蜜臀av无码人妻精品 | 亚洲成a人片在线观看无码3d | 正在播放老肥熟妇露脸 | 亚洲 高清 成人 动漫 | 水蜜桃亚洲一二三四在线 | 成人欧美一区二区三区黑人 | 无码人妻出轨黑人中文字幕 | 久久久国产精品无码免费专区 | 宝宝好涨水快流出来免费视频 | 亚洲中文字幕在线无码一区二区 | 中文字幕乱码亚洲无线三区 | 日日麻批免费40分钟无码 | 性欧美videos高清精品 | 久久 国产 尿 小便 嘘嘘 | 高潮毛片无遮挡高清免费视频 | 亚洲成在人网站无码天堂 | 成人女人看片免费视频放人 | 成熟女人特级毛片www免费 | 国产精品鲁鲁鲁 | 永久免费观看国产裸体美女 | 国产亚洲精品久久久久久大师 | 精品国产青草久久久久福利 | 在线观看免费人成视频 | 中文字幕av日韩精品一区二区 | 在线观看国产一区二区三区 | 麻豆果冻传媒2021精品传媒一区下载 | 精品日本一区二区三区在线观看 | 久久久婷婷五月亚洲97号色 | 少妇被粗大的猛进出69影院 | 无码精品人妻一区二区三区av | 欧美日本精品一区二区三区 | 亚洲中文字幕va福利 | 老熟女重囗味hdxx69 | 在线观看国产一区二区三区 | 日韩成人一区二区三区在线观看 | 亚洲色成人中文字幕网站 | 国产美女精品一区二区三区 | 久久婷婷五月综合色国产香蕉 | 最新国产乱人伦偷精品免费网站 | 国产精品高潮呻吟av久久 | 久久这里只有精品视频9 | 无码人妻久久一区二区三区不卡 | 亚洲の无码国产の无码影院 | 狠狠色欧美亚洲狠狠色www | 强辱丰满人妻hd中文字幕 | 日日摸天天摸爽爽狠狠97 | 亚洲国产成人a精品不卡在线 | 无码人妻丰满熟妇区毛片18 | 精品无码国产一区二区三区av | 亚洲第一无码av无码专区 | 国产精品久久久久久亚洲毛片 | 亚洲精品一区二区三区大桥未久 | 亚洲一区二区三区无码久久 | 中文无码成人免费视频在线观看 | 日韩精品久久久肉伦网站 | 国产97人人超碰caoprom | 人妻少妇精品久久 | 亚洲小说春色综合另类 | 两性色午夜免费视频 | 暴力强奷在线播放无码 | 色欲av亚洲一区无码少妇 | 亚洲第一网站男人都懂 | 18黄暴禁片在线观看 | 亚洲欧洲日本无在线码 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 精品少妇爆乳无码av无码专区 | 成人动漫在线观看 | 强伦人妻一区二区三区视频18 | 亚洲色www成人永久网址 | 福利一区二区三区视频在线观看 | 国产成人无码一二三区视频 | 久久精品国产日本波多野结衣 | 成人欧美一区二区三区黑人 | 中文字幕 人妻熟女 | 日韩精品无码一本二本三本色 | 伊在人天堂亚洲香蕉精品区 | 中文字幕日韩精品一区二区三区 | 美女毛片一区二区三区四区 | 欧洲精品码一区二区三区免费看 | 老熟女乱子伦 | 国产人成高清在线视频99最全资源 | 久久久久久久女国产乱让韩 | 亚洲综合另类小说色区 | 一个人看的www免费视频在线观看 | 欧美xxxx黑人又粗又长 | 人人澡人摸人人添 | 无码一区二区三区在线观看 | 一本大道伊人av久久综合 | 窝窝午夜理论片影院 | 久久久精品成人免费观看 | 亚洲色偷偷男人的天堂 | 国产免费观看黄av片 | 高中生自慰www网站 | 中文字幕 人妻熟女 | 午夜性刺激在线视频免费 | 永久免费观看美女裸体的网站 | 国产sm调教视频在线观看 | 熟妇人妻激情偷爽文 | 成人免费视频视频在线观看 免费 | 国产精品久久久久久无码 | 国产精品成人av在线观看 | 亚洲精品无码人妻无码 | 大地资源网第二页免费观看 | 天天拍夜夜添久久精品 | 婷婷五月综合激情中文字幕 | 狠狠cao日日穞夜夜穞av | www国产亚洲精品久久网站 | 亚洲乱码日产精品bd | 天堂а√在线中文在线 | 色妞www精品免费视频 | 亚欧洲精品在线视频免费观看 | 婷婷丁香六月激情综合啪 | 亚洲日韩精品欧美一区二区 | 亚洲经典千人经典日产 | 一本无码人妻在中文字幕免费 | 又大又黄又粗又爽的免费视频 | 中文毛片无遮挡高清免费 | 人人妻人人澡人人爽人人精品 | 久久国产精品精品国产色婷婷 | 婷婷综合久久中文字幕蜜桃三电影 | 国产成人一区二区三区在线观看 | 特黄特色大片免费播放器图片 | 精品aⅴ一区二区三区 | 99re在线播放 | 亚洲色欲色欲天天天www | 中文字幕乱码人妻二区三区 | 亚洲色在线无码国产精品不卡 | 扒开双腿疯狂进出爽爽爽视频 | 人妻与老人中文字幕 | 久久国产自偷自偷免费一区调 | 狠狠色丁香久久婷婷综合五月 | 亚拍精品一区二区三区探花 | 国产艳妇av在线观看果冻传媒 | 少妇人妻av毛片在线看 | 伊人久久大香线蕉午夜 | 国产又爽又猛又粗的视频a片 | 亚洲精品一区二区三区在线观看 | 无套内谢老熟女 | 国产成人无码a区在线观看视频app | 亚洲一区二区三区无码久久 | 国产精品亚洲一区二区三区喷水 | 少妇被黑人到高潮喷出白浆 | 无码国产乱人伦偷精品视频 | 国产午夜无码视频在线观看 | www国产亚洲精品久久久日本 | 一本久久a久久精品亚洲 | 亚洲精品国产a久久久久久 | 男女性色大片免费网站 | 国产深夜福利视频在线 | 免费无码肉片在线观看 | 激情爆乳一区二区三区 | 成人免费视频在线观看 | 欧美高清在线精品一区 | 伊在人天堂亚洲香蕉精品区 | 成人欧美一区二区三区黑人免费 | 55夜色66夜色国产精品视频 | 欧洲欧美人成视频在线 | 亚洲精品午夜无码电影网 | 欧美一区二区三区 | 67194成是人免费无码 | 99久久人妻精品免费一区 | 中文久久乱码一区二区 | 亚洲高清偷拍一区二区三区 | 欧美日本精品一区二区三区 | 精品一区二区三区无码免费视频 | 一本久久伊人热热精品中文字幕 | 亚洲精品国产精品乱码视色 | 丁香啪啪综合成人亚洲 | 野狼第一精品社区 | 亚洲呦女专区 | 无遮无挡爽爽免费视频 | 人人妻人人澡人人爽人人精品浪潮 | 国产精品无码久久av | 亚洲精品国产a久久久久久 | 丰满人妻翻云覆雨呻吟视频 | 国产高清不卡无码视频 | 大乳丰满人妻中文字幕日本 | 2020久久超碰国产精品最新 | 亚洲色欲色欲欲www在线 | 国内丰满熟女出轨videos | 久久综合给久久狠狠97色 | 国产成人无码午夜视频在线观看 | 国产9 9在线 | 中文 | 乱人伦中文视频在线观看 | 日韩av无码一区二区三区不卡 | 国产一区二区三区精品视频 | 亚洲无人区午夜福利码高清完整版 | 蜜臀av在线观看 在线欧美精品一区二区三区 | 国产香蕉尹人综合在线观看 | 亚洲国产成人a精品不卡在线 | 少妇太爽了在线观看 | 水蜜桃亚洲一二三四在线 | 精品国产麻豆免费人成网站 | 无码国产乱人伦偷精品视频 | 成人综合网亚洲伊人 | 国产人妻精品午夜福利免费 | 97精品国产97久久久久久免费 | 大色综合色综合网站 | 日本精品少妇一区二区三区 | 给我免费的视频在线观看 | av无码久久久久不卡免费网站 | 色噜噜亚洲男人的天堂 | 九九在线中文字幕无码 | 性生交大片免费看女人按摩摩 | 成人一区二区免费视频 | 国产人妻人伦精品1国产丝袜 | 东京无码熟妇人妻av在线网址 | 中文字幕av无码一区二区三区电影 | 一区二区三区高清视频一 | 一本久道久久综合婷婷五月 | 伊人久久婷婷五月综合97色 | 日韩人妻无码一区二区三区久久99 | 日韩人妻少妇一区二区三区 | 国产精品爱久久久久久久 | 欧美35页视频在线观看 | 中文无码成人免费视频在线观看 | 国产成人综合色在线观看网站 | 欧美国产日产一区二区 | 一个人免费观看的www视频 | 中文字幕乱妇无码av在线 | 爱做久久久久久 | 人人妻人人澡人人爽欧美一区 | 国产又爽又黄又刺激的视频 | 亚洲国产欧美日韩精品一区二区三区 | 兔费看少妇性l交大片免费 | 日韩av无码中文无码电影 | 少妇性荡欲午夜性开放视频剧场 | 奇米影视7777久久精品 | 一区二区三区乱码在线 | 欧洲 | 麻豆人妻少妇精品无码专区 | 天天爽夜夜爽夜夜爽 | 久久无码人妻影院 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 香港三级日本三级妇三级 | 夜夜躁日日躁狠狠久久av | 无码免费一区二区三区 | 天干天干啦夜天干天2017 | 亚洲精品国产精品乱码视色 | 色婷婷久久一区二区三区麻豆 | 亚洲 高清 成人 动漫 | 99riav国产精品视频 | 亚洲 另类 在线 欧美 制服 | 精品熟女少妇av免费观看 | 人人妻人人澡人人爽欧美一区 | 国产精品久久久一区二区三区 | 亚洲精品久久久久avwww潮水 | 天堂无码人妻精品一区二区三区 | 亚洲国产精品毛片av不卡在线 | 国产精品-区区久久久狼 | 国模大胆一区二区三区 | 少妇被黑人到高潮喷出白浆 | 免费网站看v片在线18禁无码 | 亚洲精品久久久久中文第一幕 | 久久精品中文字幕大胸 | 呦交小u女精品视频 | 欧美zoozzooz性欧美 | 国内精品一区二区三区不卡 | 无码av岛国片在线播放 | 国产精品手机免费 | 精品国产青草久久久久福利 | 中文字幕久久久久人妻 | 色综合久久中文娱乐网 | 激情五月综合色婷婷一区二区 | 国产精品.xx视频.xxtv | 久久五月精品中文字幕 | 一个人看的视频www在线 | 久久99精品国产.久久久久 | 丰满少妇熟乱xxxxx视频 | 夜精品a片一区二区三区无码白浆 | 男女超爽视频免费播放 | 亚洲精品一区二区三区四区五区 | 人人妻人人澡人人爽欧美精品 | 国产麻豆精品一区二区三区v视界 | 国产尤物精品视频 | 色一情一乱一伦一视频免费看 | 给我免费的视频在线观看 | 男女作爱免费网站 | 精品国产青草久久久久福利 | 亚洲欧美中文字幕5发布 | 一个人免费观看的www视频 | 国产乱人偷精品人妻a片 | 噜噜噜亚洲色成人网站 | 欧美日韩视频无码一区二区三 | 亚洲人成人无码网www国产 | 在线播放无码字幕亚洲 | 国产精品毛多多水多 | 性做久久久久久久久 | 疯狂三人交性欧美 | 暴力强奷在线播放无码 | 免费播放一区二区三区 | 99精品国产综合久久久久五月天 | 欧美 日韩 人妻 高清 中文 | 成年美女黄网站色大免费全看 | 日本一区二区三区免费高清 | yw尤物av无码国产在线观看 | 天堂一区人妻无码 | 国产成人无码午夜视频在线观看 | 欧美国产亚洲日韩在线二区 | 午夜福利不卡在线视频 | 76少妇精品导航 | 国产激情无码一区二区 | 国产成人综合在线女婷五月99播放 | 中文字幕乱码亚洲无线三区 | 波多野结衣av一区二区全免费观看 | 女人被男人爽到呻吟的视频 | 久久久www成人免费毛片 | 成在人线av无码免观看麻豆 | 欧美黑人性暴力猛交喷水 | 久久综合九色综合欧美狠狠 | 国内精品人妻无码久久久影院蜜桃 | 精品一区二区三区波多野结衣 | 国产精品人人爽人人做我的可爱 | 3d动漫精品啪啪一区二区中 | 欧美成人午夜精品久久久 | 午夜成人1000部免费视频 | 午夜精品一区二区三区在线观看 | 久久久精品欧美一区二区免费 | 国产人成高清在线视频99最全资源 | 波多野42部无码喷潮在线 | 亚洲狠狠婷婷综合久久 | 日韩av无码中文无码电影 | 亚洲伊人久久精品影院 | 中文亚洲成a人片在线观看 | 亚洲男女内射在线播放 | 国产无遮挡又黄又爽又色 | 无码人妻av免费一区二区三区 | 亚洲精品国产品国语在线观看 | 亚洲欧洲日本综合aⅴ在线 | 日日鲁鲁鲁夜夜爽爽狠狠 | 午夜肉伦伦影院 | 亚洲中文字幕乱码av波多ji | 色婷婷久久一区二区三区麻豆 | 久久久久免费看成人影片 | 内射爽无广熟女亚洲 | 亚洲理论电影在线观看 | 精品久久久无码人妻字幂 | 无码人妻精品一区二区三区不卡 | 兔费看少妇性l交大片免费 | 国产两女互慰高潮视频在线观看 | 动漫av一区二区在线观看 | 久久亚洲精品成人无码 | 又大又硬又爽免费视频 | 亚洲国产av精品一区二区蜜芽 | 欧美国产日韩久久mv | 丰满肥臀大屁股熟妇激情视频 | 无码av免费一区二区三区试看 | 亚洲无人区一区二区三区 | 亚洲七七久久桃花影院 | av在线亚洲欧洲日产一区二区 | 露脸叫床粗话东北少妇 | 久久亚洲精品中文字幕无男同 | 久久99精品国产.久久久久 | 俺去俺来也www色官网 | 无码人妻av免费一区二区三区 | 中文字幕 人妻熟女 | 欧美人与牲动交xxxx | 精品国产一区二区三区av 性色 | 丁香花在线影院观看在线播放 | 日本精品人妻无码免费大全 | 任你躁国产自任一区二区三区 | 亚洲精品国产精品乱码不卡 | 两性色午夜视频免费播放 | 激情国产av做激情国产爱 | 男女作爱免费网站 | 色欲久久久天天天综合网精品 | 九九在线中文字幕无码 | 亚洲码国产精品高潮在线 | 亚洲成av人片在线观看无码不卡 | 国内精品人妻无码久久久影院 | 美女扒开屁股让男人桶 | 东京无码熟妇人妻av在线网址 | 精品一区二区不卡无码av | 高清国产亚洲精品自在久久 | 国产精品办公室沙发 | 欧美成人高清在线播放 | 欧美熟妇另类久久久久久多毛 | 欧美激情一区二区三区成人 | 国产亚洲精品久久久ai换 | 久久精品视频在线看15 | 丰满人妻精品国产99aⅴ | 女人高潮内射99精品 | 一个人看的视频www在线 | 伊在人天堂亚洲香蕉精品区 | 久久精品女人天堂av免费观看 | 亚洲国产日韩a在线播放 | 国产精品永久免费视频 | 免费男性肉肉影院 | 成人亚洲精品久久久久软件 | 免费无码午夜福利片69 | 国精产品一区二区三区 | 一本久道久久综合狠狠爱 | 国产精品怡红院永久免费 | 久久精品国产精品国产精品污 | 久久精品国产99精品亚洲 | 亚洲欧美日韩综合久久久 | 久久99精品久久久久久 | 免费观看黄网站 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 亚无码乱人伦一区二区 | 国产成人久久精品流白浆 | 欧美一区二区三区视频在线观看 | 全球成人中文在线 | 国产激情无码一区二区 | 精品无码av一区二区三区 | 久久综合色之久久综合 | 亚洲熟女一区二区三区 | 十八禁视频网站在线观看 | 久久久久免费精品国产 | 天天摸天天透天天添 | 国产成人久久精品流白浆 | 激情内射亚州一区二区三区爱妻 | 国内少妇偷人精品视频免费 | 亚洲成av人综合在线观看 | 中文字幕+乱码+中文字幕一区 | 好男人社区资源 | 午夜精品久久久久久久久 | 在线成人www免费观看视频 | 国产亚洲人成在线播放 | 久久精品视频在线看15 | 97无码免费人妻超级碰碰夜夜 | 免费无码午夜福利片69 | 欧美国产日产一区二区 | 国产成人无码专区 | 亚洲国产精品美女久久久久 | 精品亚洲成av人在线观看 | 在线亚洲高清揄拍自拍一品区 | 天天做天天爱天天爽综合网 | 国产无遮挡又黄又爽又色 | 日本饥渴人妻欲求不满 | 精品 日韩 国产 欧美 视频 | 97se亚洲精品一区 | 亚洲日韩一区二区 | 强伦人妻一区二区三区视频18 | 国产激情艳情在线看视频 | 中文字幕乱码人妻二区三区 | 日韩精品无码免费一区二区三区 | 十八禁视频网站在线观看 | 精品国产一区二区三区四区在线看 | 四虎影视成人永久免费观看视频 | 国产亚洲欧美在线专区 | 动漫av网站免费观看 | 欧洲精品码一区二区三区免费看 | 高清国产亚洲精品自在久久 | 一个人看的视频www在线 | av香港经典三级级 在线 | 久久精品视频在线看15 | 丝袜足控一区二区三区 | 老熟女重囗味hdxx69 | 国产午夜福利亚洲第一 | 久久久精品欧美一区二区免费 | 熟女体下毛毛黑森林 | 夜精品a片一区二区三区无码白浆 | 国产精品久久精品三级 | 亚洲色在线无码国产精品不卡 | 风流少妇按摩来高潮 | 亚洲男女内射在线播放 | 亚洲精品一区三区三区在线观看 | 一二三四在线观看免费视频 | 人人妻人人澡人人爽人人精品浪潮 | 国产超碰人人爽人人做人人添 | 国产人妻人伦精品1国产丝袜 | 天天燥日日燥 | 国内精品一区二区三区不卡 | 沈阳熟女露脸对白视频 | 精品一区二区不卡无码av | 国产精品理论片在线观看 | 国产明星裸体无码xxxx视频 | 国产av一区二区三区最新精品 | 国产电影无码午夜在线播放 | 欧美国产日韩亚洲中文 | 欧美日韩一区二区三区自拍 | 欧美丰满熟妇xxxx性ppx人交 | 国产人成高清在线视频99最全资源 | 欧美成人午夜精品久久久 | 人人澡人摸人人添 | 中文字幕无线码免费人妻 | 欧美成人家庭影院 | 1000部啪啪未满十八勿入下载 | 又粗又大又硬毛片免费看 | 青草青草久热国产精品 | 国产精品第一区揄拍无码 | 无码中文字幕色专区 | 国产精华av午夜在线观看 | 日韩成人一区二区三区在线观看 | 国产后入清纯学生妹 | 亲嘴扒胸摸屁股激烈网站 | 俄罗斯老熟妇色xxxx | 在线а√天堂中文官网 | 99re在线播放 | 一本久久伊人热热精品中文字幕 | 国产av人人夜夜澡人人爽麻豆 | 麻豆国产人妻欲求不满 | 久久www免费人成人片 | 人人爽人人爽人人片av亚洲 | 国产乱人伦av在线无码 | 久久综合激激的五月天 | 免费人成在线视频无码 | 性欧美熟妇videofreesex | 黑人粗大猛烈进出高潮视频 | 一本大道伊人av久久综合 | 男人扒开女人内裤强吻桶进去 | 色婷婷久久一区二区三区麻豆 | 乱码av麻豆丝袜熟女系列 | 少妇被黑人到高潮喷出白浆 | 亚洲七七久久桃花影院 | 国产乱人伦偷精品视频 | 激情人妻另类人妻伦 | 婷婷五月综合激情中文字幕 | 丝袜 中出 制服 人妻 美腿 | 国产成人综合色在线观看网站 | 天堂久久天堂av色综合 | 无码帝国www无码专区色综合 | 午夜福利电影 | 亚洲一区二区三区无码久久 | 99久久无码一区人妻 | 免费无码的av片在线观看 | 精品厕所偷拍各类美女tp嘘嘘 | 99久久久国产精品无码免费 | 免费国产成人高清在线观看网站 | 国产精品久久国产三级国 | 国产午夜无码精品免费看 | 亚洲国产精品美女久久久久 | 国产在线精品一区二区高清不卡 | 高潮喷水的毛片 | www国产精品内射老师 | 国产精品高潮呻吟av久久 | 中文无码伦av中文字幕 | 欧美老人巨大xxxx做受 | √8天堂资源地址中文在线 | 荫蒂被男人添的好舒服爽免费视频 | 日本一卡2卡3卡四卡精品网站 | 亚洲午夜无码久久 | 亚洲成色在线综合网站 | 久久久久久久人妻无码中文字幕爆 | 亚洲精品中文字幕乱码 | 亚洲小说春色综合另类 | 丰满少妇熟乱xxxxx视频 | 国产精品丝袜黑色高跟鞋 | 51国偷自产一区二区三区 | 九九综合va免费看 | 精品国偷自产在线 | 国产精品内射视频免费 | 色婷婷综合中文久久一本 | 女人被爽到呻吟gif动态图视看 | 亚洲精品一区二区三区在线 | 丰满人妻被黑人猛烈进入 | 中国女人内谢69xxxxxa片 | 无码福利日韩神码福利片 | 日本一区二区三区免费播放 | 女人高潮内射99精品 | 宝宝好涨水快流出来免费视频 | 人妻少妇精品无码专区二区 | 综合网日日天干夜夜久久 | 亚洲人交乣女bbw | 国产精品久久久午夜夜伦鲁鲁 | 欧美日本精品一区二区三区 | 国产乱人偷精品人妻a片 | 55夜色66夜色国产精品视频 | 国产在线精品一区二区高清不卡 | 青青青手机频在线观看 | 奇米影视7777久久精品 | 久久综合色之久久综合 | 色偷偷人人澡人人爽人人模 | 久久久久99精品国产片 | 荫蒂添的好舒服视频囗交 | 中国大陆精品视频xxxx | 亚洲精品中文字幕 | 日本精品久久久久中文字幕 | 麻豆果冻传媒2021精品传媒一区下载 | 俺去俺来也www色官网 | 在线成人www免费观看视频 | 真人与拘做受免费视频 | 夜夜影院未满十八勿进 | 久久精品99久久香蕉国产色戒 | 高潮毛片无遮挡高清免费视频 | 无码任你躁久久久久久久 | 成在人线av无码免观看麻豆 | 亚洲精品久久久久久一区二区 | 一本久久伊人热热精品中文字幕 | 免费观看激色视频网站 | 午夜性刺激在线视频免费 | 日韩精品a片一区二区三区妖精 | 欧美日韩综合一区二区三区 | 国产亚洲精品久久久久久久久动漫 | 国产成人精品三级麻豆 | 日本一本二本三区免费 | 中文字幕 人妻熟女 | 中文亚洲成a人片在线观看 | 国产精品.xx视频.xxtv | 丰满人妻一区二区三区免费视频 | 亚洲国产精品成人久久蜜臀 | 日韩少妇内射免费播放 | 国产无遮挡又黄又爽免费视频 | 国产极品视觉盛宴 | 国产无套内射久久久国产 | 欧美老人巨大xxxx做受 | 亚洲中文字幕在线无码一区二区 | 97久久精品无码一区二区 | 日本护士xxxxhd少妇 | 久久精品无码一区二区三区 | 久久久中文久久久无码 | 亚洲国产精品成人久久蜜臀 | 日韩精品a片一区二区三区妖精 | 欧美性猛交xxxx富婆 | 欧美熟妇另类久久久久久不卡 | 国产精品丝袜黑色高跟鞋 | 色妞www精品免费视频 | 精品 日韩 国产 欧美 视频 | 玩弄少妇高潮ⅹxxxyw | 综合人妻久久一区二区精品 | 丰满少妇女裸体bbw | 亚洲の无码国产の无码步美 | 亚洲狠狠婷婷综合久久 | 国产乱码精品一品二品 | 精品人妻av区 | 久久久久亚洲精品男人的天堂 | 中国女人内谢69xxxx | 乱人伦人妻中文字幕无码久久网 | 精品欧美一区二区三区久久久 | 性生交大片免费看女人按摩摩 | 亚洲人成影院在线观看 | 日本乱偷人妻中文字幕 | 亚洲国产成人a精品不卡在线 | 亚洲大尺度无码无码专区 | 人人爽人人爽人人片av亚洲 | 国产精品igao视频网 | 国产乱码精品一品二品 | 国产激情一区二区三区 | 东京热无码av男人的天堂 | 88国产精品欧美一区二区三区 | 欧美激情综合亚洲一二区 | 波多野结衣av一区二区全免费观看 | 无码精品国产va在线观看dvd | 麻花豆传媒剧国产免费mv在线 | 5858s亚洲色大成网站www | 亚洲色偷偷男人的天堂 | 日本熟妇大屁股人妻 | 一本无码人妻在中文字幕免费 | 亚洲国产一区二区三区在线观看 | 国产精品久久久久无码av色戒 | 久久99精品久久久久久动态图 | 免费乱码人妻系列无码专区 | 中文字幕精品av一区二区五区 | 亚洲乱亚洲乱妇50p | 婷婷色婷婷开心五月四房播播 | 国产成人无码一二三区视频 | 天干天干啦夜天干天2017 | 成人片黄网站色大片免费观看 | 久久久久成人精品免费播放动漫 | 久久久久亚洲精品中文字幕 | 大肉大捧一进一出视频出来呀 | 青青青爽视频在线观看 | 亚洲男女内射在线播放 | 精品国产av色一区二区深夜久久 | 精品国精品国产自在久国产87 | 国产无遮挡吃胸膜奶免费看 | 男女猛烈xx00免费视频试看 | 欧美精品免费观看二区 | 色婷婷综合中文久久一本 | 日韩精品乱码av一区二区 | 国产莉萝无码av在线播放 | 丰满人妻一区二区三区免费视频 | 久久人人爽人人爽人人片ⅴ | 午夜精品一区二区三区的区别 | 国产熟妇高潮叫床视频播放 | 天天拍夜夜添久久精品大 | 免费观看激色视频网站 | 亚洲精品午夜国产va久久成人 | 亚洲区欧美区综合区自拍区 | 日产精品99久久久久久 | 5858s亚洲色大成网站www | 小鲜肉自慰网站xnxx | 欧美日韩色另类综合 | 婷婷五月综合激情中文字幕 | 亚洲综合伊人久久大杳蕉 | 亚洲精品无码人妻无码 | 亚洲国产精品一区二区第一页 | 亚洲 高清 成人 动漫 | 欧洲美熟女乱又伦 | 国产性生大片免费观看性 | 亚洲第一网站男人都懂 | 欧美猛少妇色xxxxx | 国产麻豆精品精东影业av网站 | 精品一区二区不卡无码av | 东京热无码av男人的天堂 | 好屌草这里只有精品 | 一区二区三区高清视频一 | 最近中文2019字幕第二页 | 一本无码人妻在中文字幕免费 | 又大又硬又爽免费视频 | 狠狠综合久久久久综合网 | 在线播放无码字幕亚洲 | 老熟妇乱子伦牲交视频 | 欧洲欧美人成视频在线 | 久久国产劲爆∧v内射 | 日本免费一区二区三区最新 | 国产在线精品一区二区三区直播 | 老熟女乱子伦 | 日韩人妻系列无码专区 | 亚洲伊人久久精品影院 | 午夜肉伦伦影院 | 秋霞成人午夜鲁丝一区二区三区 | 俺去俺来也在线www色官网 | 在线播放无码字幕亚洲 | 国产成人午夜福利在线播放 | 成人欧美一区二区三区 | 欧美性猛交xxxx富婆 | 天天爽夜夜爽夜夜爽 | 国产精品-区区久久久狼 | 无码人妻精品一区二区三区不卡 | 夜夜高潮次次欢爽av女 | 国产成人精品无码播放 | 无码乱肉视频免费大全合集 | 国产精品视频免费播放 | 无码国产色欲xxxxx视频 | 又大又硬又爽免费视频 | 亚洲欧美日韩成人高清在线一区 | 免费国产黄网站在线观看 | 国产精品久久久久久亚洲毛片 | 一本久道久久综合狠狠爱 | 宝宝好涨水快流出来免费视频 | 亚洲国产一区二区三区在线观看 | 精品无码成人片一区二区98 | 欧美熟妇另类久久久久久多毛 | 欧美亚洲国产一区二区三区 | 精品一区二区三区波多野结衣 | 国产精品二区一区二区aⅴ污介绍 | 久久人人爽人人爽人人片av高清 | 人人妻人人澡人人爽人人精品浪潮 | 熟妇激情内射com | 精品一二三区久久aaa片 | 少妇厨房愉情理9仑片视频 | 国产莉萝无码av在线播放 | 中文字幕无码乱人伦 | 亚欧洲精品在线视频免费观看 | 无码人妻丰满熟妇区五十路百度 | 人人妻人人澡人人爽欧美精品 | 精品一区二区三区无码免费视频 | 精品亚洲韩国一区二区三区 | 国产sm调教视频在线观看 | 亚洲精品国产a久久久久久 | 装睡被陌生人摸出水好爽 | 国产成人精品必看 | 蜜臀av无码人妻精品 | 国产亚洲欧美日韩亚洲中文色 | 亚洲娇小与黑人巨大交 | 亚洲第一无码av无码专区 | 久久亚洲精品中文字幕无男同 | 久久久无码中文字幕久... | 国产精品永久免费视频 | 国产欧美熟妇另类久久久 | 久久99精品久久久久久 | 波多野结衣av在线观看 | 成人免费无码大片a毛片 | 中文字幕无线码免费人妻 | 亚洲经典千人经典日产 | 牲欲强的熟妇农村老妇女视频 | 曰韩少妇内射免费播放 | 一区二区传媒有限公司 | 天天燥日日燥 | 久久精品国产一区二区三区 | 国产精品亚洲专区无码不卡 | 亚洲午夜久久久影院 | 无码任你躁久久久久久久 | 性生交大片免费看l | 精品无码一区二区三区爱欲 | 最近的中文字幕在线看视频 | 亚洲中文无码av永久不收费 | 国产精品嫩草久久久久 | 国产成人无码专区 | 国产情侣作爱视频免费观看 | 亚洲自偷自偷在线制服 | 国产亚洲精品久久久闺蜜 | 日本爽爽爽爽爽爽在线观看免 | 18无码粉嫩小泬无套在线观看 | 一区二区三区乱码在线 | 欧洲 | 国产精品嫩草久久久久 | 性欧美牲交在线视频 | 无码人妻精品一区二区三区不卡 | 国产成人综合美国十次 | 清纯唯美经典一区二区 | 日日摸夜夜摸狠狠摸婷婷 | 亚洲成色在线综合网站 | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 人妻体内射精一区二区三四 | 中文字幕人妻无码一区二区三区 | 色综合天天综合狠狠爱 | 国产综合久久久久鬼色 | 俺去俺来也www色官网 | 玩弄中年熟妇正在播放 | 国内丰满熟女出轨videos | 欧美成人午夜精品久久久 | 国产乱人无码伦av在线a | 免费无码av一区二区 | 久久五月精品中文字幕 | 久久精品国产一区二区三区 | 国产免费久久精品国产传媒 | 国产精品香蕉在线观看 | 国产9 9在线 | 中文 | 青青青手机频在线观看 | 久久婷婷五月综合色国产香蕉 | a在线观看免费网站大全 | 妺妺窝人体色www在线小说 | 欧美性生交活xxxxxdddd | 国产精品资源一区二区 | 最新国产麻豆aⅴ精品无码 | 成年美女黄网站色大免费全看 | 国产亚洲精品久久久久久大师 | 精品国产福利一区二区 | 超碰97人人做人人爱少妇 | 国产网红无码精品视频 | 国产极品视觉盛宴 | 国产国语老龄妇女a片 | 久久国产36精品色熟妇 | 亚洲国产欧美日韩精品一区二区三区 | 亚洲欧洲日本无在线码 | 蜜臀av无码人妻精品 | 欧美日韩综合一区二区三区 | 国产精品爱久久久久久久 | 日韩精品a片一区二区三区妖精 | 国产精品对白交换视频 | aⅴ在线视频男人的天堂 | 国产免费无码一区二区视频 | 国产又爽又猛又粗的视频a片 | 国产情侣作爱视频免费观看 | 国产精品成人av在线观看 | 亚洲成在人网站无码天堂 | 少妇性俱乐部纵欲狂欢电影 | 国产亚洲精品久久久久久久久动漫 | 男女爱爱好爽视频免费看 | 免费视频欧美无人区码 | 久久久久免费看成人影片 | 2020久久香蕉国产线看观看 | 国产女主播喷水视频在线观看 | 国产 浪潮av性色四虎 | 蜜桃视频韩日免费播放 | 久久亚洲精品成人无码 | 伊人久久大香线蕉午夜 | 纯爱无遮挡h肉动漫在线播放 | 天海翼激烈高潮到腰振不止 | 亚洲精品一区二区三区大桥未久 | 蜜臀aⅴ国产精品久久久国产老师 | 日韩精品一区二区av在线 | 亚洲中文字幕av在天堂 | 18无码粉嫩小泬无套在线观看 | 巨爆乳无码视频在线观看 | 日日摸夜夜摸狠狠摸婷婷 | 台湾无码一区二区 | www成人国产高清内射 | 高潮毛片无遮挡高清免费 | 99久久久无码国产aaa精品 | 国产精品久久久久7777 | √8天堂资源地址中文在线 | 麻豆国产人妻欲求不满 | 强奷人妻日本中文字幕 | 无码精品人妻一区二区三区av | 亚洲中文字幕无码中文字在线 | 国产精品毛片一区二区 | 久久久久99精品国产片 | 亚洲色偷偷男人的天堂 | 少妇人妻偷人精品无码视频 | 人人妻人人澡人人爽人人精品 | 久久久精品国产sm最大网站 | 国产九九九九九九九a片 | 国产极品视觉盛宴 | 欧美成人午夜精品久久久 | 国产区女主播在线观看 | 国产亚洲精品久久久久久大师 | 国产在线aaa片一区二区99 | 中文字幕乱妇无码av在线 | 亚洲日韩精品欧美一区二区 | 国产xxx69麻豆国语对白 | 亚洲中文字幕av在天堂 | 成年美女黄网站色大免费视频 | 亚洲成av人影院在线观看 | 十八禁视频网站在线观看 | 国产精品无码成人午夜电影 | 色欲人妻aaaaaaa无码 | 久久精品国产99精品亚洲 | √8天堂资源地址中文在线 | 久热国产vs视频在线观看 | 亚洲精品久久久久avwww潮水 | 久久亚洲日韩精品一区二区三区 | 天堂亚洲免费视频 | 成人欧美一区二区三区 | 国产欧美亚洲精品a | 日韩精品乱码av一区二区 | 国产农村乱对白刺激视频 | 精品偷拍一区二区三区在线看 | 一本久道久久综合狠狠爱 | 欧美日本精品一区二区三区 | 人妻少妇精品无码专区二区 | 久久久久国色av免费观看性色 | 内射爽无广熟女亚洲 | 国产免费久久久久久无码 | 国产97在线 | 亚洲 | 一本色道久久综合狠狠躁 | 久久熟妇人妻午夜寂寞影院 | 欧美国产日产一区二区 | 少妇性l交大片 | 日日麻批免费40分钟无码 | 在线天堂新版最新版在线8 | 亚洲色www成人永久网址 | 玩弄少妇高潮ⅹxxxyw | 领导边摸边吃奶边做爽在线观看 | 男人和女人高潮免费网站 | 久久99久久99精品中文字幕 | 久久久婷婷五月亚洲97号色 | 久久久久成人片免费观看蜜芽 | 欧美成人家庭影院 | 亚洲中文字幕在线无码一区二区 | 亚洲乱码国产乱码精品精 | 精品国产一区二区三区四区 | 亚洲国产欧美在线成人 | 亚洲日韩一区二区 | 亚洲成a人一区二区三区 | 未满小14洗澡无码视频网站 | 亚洲人成网站免费播放 | 成人精品视频一区二区三区尤物 | 人妻aⅴ无码一区二区三区 | 国产乱码精品一品二品 | 一本大道伊人av久久综合 | 老子影院午夜伦不卡 | 最近中文2019字幕第二页 | a在线观看免费网站大全 | 成人性做爰aaa片免费看不忠 | 波多野结衣高清一区二区三区 | 男人的天堂av网站 | 高清无码午夜福利视频 | 久青草影院在线观看国产 | 久久精品国产99精品亚洲 | 国产精品第一国产精品 | 日日摸天天摸爽爽狠狠97 | 久9re热视频这里只有精品 | 国产三级久久久精品麻豆三级 | √天堂资源地址中文在线 | 伊人久久婷婷五月综合97色 | 久久www免费人成人片 | 久久综合网欧美色妞网 | 国产综合色产在线精品 | 疯狂三人交性欧美 | 国产人妖乱国产精品人妖 | 久久久中文久久久无码 | 日韩人妻无码一区二区三区久久99 | 2020久久香蕉国产线看观看 | 丰满诱人的人妻3 | 久久亚洲a片com人成 | 麻豆国产人妻欲求不满谁演的 | 强伦人妻一区二区三区视频18 | 成人精品天堂一区二区三区 | 亚洲男女内射在线播放 | 免费看少妇作爱视频 | 国产精品国产三级国产专播 | 亚欧洲精品在线视频免费观看 | 色综合久久久久综合一本到桃花网 | ass日本丰满熟妇pics | 成人精品视频一区二区 | 国产亚洲美女精品久久久2020 | 亚洲欧美日韩成人高清在线一区 | 日韩少妇白浆无码系列 | 国内揄拍国内精品人妻 | 色综合久久久无码网中文 | 内射巨臀欧美在线视频 | 粗大的内捧猛烈进出视频 | 亚洲欧美综合区丁香五月小说 | 亚无码乱人伦一区二区 | 国产国语老龄妇女a片 | 精品 日韩 国产 欧美 视频 | 久久久久久av无码免费看大片 | 大地资源网第二页免费观看 | 精品无码国产一区二区三区av | 欧美日韩一区二区综合 | 亚洲熟悉妇女xxx妇女av | 人妻少妇精品无码专区动漫 | 又大又黄又粗又爽的免费视频 | 色偷偷人人澡人人爽人人模 | 我要看www免费看插插视频 | 免费网站看v片在线18禁无码 | 人妻少妇精品无码专区动漫 | 九九热爱视频精品 | 99久久亚洲精品无码毛片 | 老子影院午夜精品无码 | 亚洲精品鲁一鲁一区二区三区 | 激情人妻另类人妻伦 | 天天躁夜夜躁狠狠是什么心态 | 国产真实乱对白精彩久久 | 中文字幕人妻丝袜二区 | 国产超碰人人爽人人做人人添 | 亚洲性无码av中文字幕 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 国产午夜无码视频在线观看 | 俺去俺来也在线www色官网 | 中文毛片无遮挡高清免费 | 亚洲综合无码久久精品综合 | 任你躁国产自任一区二区三区 | 亚洲欧洲无卡二区视頻 | 国产激情无码一区二区app | 亚洲爆乳精品无码一区二区三区 | 丁香啪啪综合成人亚洲 | 国产精品国产三级国产专播 | 午夜精品久久久内射近拍高清 | 狠狠综合久久久久综合网 | 久久久中文久久久无码 | 亚洲高清偷拍一区二区三区 | 午夜精品久久久内射近拍高清 | 一本加勒比波多野结衣 | 少妇性荡欲午夜性开放视频剧场 | 亚洲精品中文字幕久久久久 | 久久久久久av无码免费看大片 | 女人被男人爽到呻吟的视频 | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | 亲嘴扒胸摸屁股激烈网站 | 亚洲 日韩 欧美 成人 在线观看 | 97无码免费人妻超级碰碰夜夜 | 欧美精品国产综合久久 | 在线精品国产一区二区三区 | 色综合久久久久综合一本到桃花网 | 久久久精品欧美一区二区免费 | 久久99精品久久久久久动态图 | 精品国产一区av天美传媒 | 日本一区二区三区免费高清 | 老司机亚洲精品影院无码 | 精品亚洲成av人在线观看 | 亚拍精品一区二区三区探花 | 国产香蕉尹人综合在线观看 | 日韩成人一区二区三区在线观看 | 天天爽夜夜爽夜夜爽 | 欧洲美熟女乱又伦 | 欧美日韩色另类综合 | 国产成人亚洲综合无码 | 午夜熟女插插xx免费视频 | 99久久精品日本一区二区免费 | 妺妺窝人体色www婷婷 | 麻豆国产人妻欲求不满 | 国产亚洲精品久久久久久久久动漫 | 国产成人无码专区 | 国产在线精品一区二区高清不卡 | 男女下面进入的视频免费午夜 | 欧美 日韩 亚洲 在线 | 国产真实伦对白全集 | 国产成人综合在线女婷五月99播放 | 国产绳艺sm调教室论坛 | av人摸人人人澡人人超碰下载 | 久久熟妇人妻午夜寂寞影院 | 欧美日韩在线亚洲综合国产人 | 色窝窝无码一区二区三区色欲 | 日本大乳高潮视频在线观看 | 成熟女人特级毛片www免费 | 亚欧洲精品在线视频免费观看 | 国产综合色产在线精品 | 在线精品亚洲一区二区 | 丝袜美腿亚洲一区二区 | 熟妇女人妻丰满少妇中文字幕 | 欧美人与动性行为视频 | 未满成年国产在线观看 | 帮老师解开蕾丝奶罩吸乳网站 | 国产人妻精品一区二区三区 | 中文字幕乱码人妻无码久久 | 男人的天堂av网站 | 欧美精品免费观看二区 | 日韩精品无码一本二本三本色 | 色综合久久网 | 动漫av一区二区在线观看 | 少妇无码av无码专区在线观看 | 免费无码的av片在线观看 | 欧美精品在线观看 | 又湿又紧又大又爽a视频国产 | 久久 国产 尿 小便 嘘嘘 | 少妇厨房愉情理9仑片视频 | 一本久道久久综合婷婷五月 | 奇米影视7777久久精品人人爽 | 精品无码av一区二区三区 | 麻花豆传媒剧国产免费mv在线 | 扒开双腿疯狂进出爽爽爽视频 | 亚洲国产精品一区二区第一页 | 亚洲区欧美区综合区自拍区 | 亚洲人成影院在线无码按摩店 | 国产精华av午夜在线观看 | 国产精品久久久久影院嫩草 | 精品久久久无码人妻字幂 | 美女毛片一区二区三区四区 | 久久99国产综合精品 | 成人精品视频一区二区 | 亚洲国产午夜精品理论片 | 98国产精品综合一区二区三区 | 成年美女黄网站色大免费视频 | 中文字幕无码av激情不卡 | 国产精品亚洲а∨无码播放麻豆 | www国产精品内射老师 | 亚洲国产av精品一区二区蜜芽 | 水蜜桃av无码 | 亚洲另类伦春色综合小说 | 亚洲欧美色中文字幕在线 | 99久久久国产精品无码免费 | 久久久久人妻一区精品色欧美 | 日本一卡2卡3卡四卡精品网站 | 夜夜夜高潮夜夜爽夜夜爰爰 | 成 人 免费观看网站 | 少妇人妻av毛片在线看 | 麻花豆传媒剧国产免费mv在线 | 亚洲国产成人av在线观看 | 人人妻人人澡人人爽人人精品 | 未满小14洗澡无码视频网站 | 色诱久久久久综合网ywww | 欧美 日韩 亚洲 在线 | 99久久久国产精品无码免费 | 在线播放亚洲第一字幕 | 无码人妻久久一区二区三区不卡 | 99久久无码一区人妻 | 东京无码熟妇人妻av在线网址 | 亚洲精品国产第一综合99久久 | 久久无码专区国产精品s | 乱码午夜-极国产极内射 | 中文字幕av无码一区二区三区电影 | 国产精品久久国产三级国 | 大色综合色综合网站 | √天堂资源地址中文在线 | 女人和拘做爰正片视频 | 一本久久伊人热热精品中文字幕 | 少妇性荡欲午夜性开放视频剧场 | 老熟妇仑乱视频一区二区 | 免费观看又污又黄的网站 | 日本爽爽爽爽爽爽在线观看免 | 中文字幕日韩精品一区二区三区 | 亚洲七七久久桃花影院 | 国产精品内射视频免费 | 国产高清不卡无码视频 | 久久久av男人的天堂 | 在线精品国产一区二区三区 | 久久婷婷五月综合色国产香蕉 | 久久国产精品萌白酱免费 | 精品无码国产自产拍在线观看蜜 | 欧美日韩综合一区二区三区 | 一本久道久久综合婷婷五月 | 无码人妻久久一区二区三区不卡 | 狠狠噜狠狠狠狠丁香五月 | 色综合久久久无码中文字幕 | 一本大道久久东京热无码av | 无码任你躁久久久久久久 | 国产精品鲁鲁鲁 | 亚洲精品一区三区三区在线观看 | 久久精品中文闷骚内射 | 性欧美videos高清精品 | 久久国语露脸国产精品电影 | 美女黄网站人色视频免费国产 | 黑森林福利视频导航 | 日本高清一区免费中文视频 | 一个人看的www免费视频在线观看 | 99久久精品午夜一区二区 | 亚洲七七久久桃花影院 | 日本在线高清不卡免费播放 | 国产麻豆精品精东影业av网站 | 久久zyz资源站无码中文动漫 | 久久婷婷五月综合色国产香蕉 | 人妻人人添人妻人人爱 | 亚洲日韩精品欧美一区二区 | 午夜精品一区二区三区在线观看 | 99久久99久久免费精品蜜桃 | 日韩 欧美 动漫 国产 制服 | 亚洲人成网站色7799 | 377p欧洲日本亚洲大胆 | 欧洲美熟女乱又伦 | 午夜免费福利小电影 | 伦伦影院午夜理论片 | 国产精品久久久久影院嫩草 | 国产精品久久久久无码av色戒 | 国产肉丝袜在线观看 | 亚洲精品国偷拍自产在线观看蜜桃 | 欧美老人巨大xxxx做受 | 亚洲精品一区二区三区四区五区 | 人人超人人超碰超国产 | 又湿又紧又大又爽a视频国产 | 亚洲欧洲无卡二区视頻 | 亚洲无人区午夜福利码高清完整版 | 亚洲日韩精品欧美一区二区 | 少妇愉情理伦片bd | 国产内射爽爽大片视频社区在线 | 日韩亚洲欧美中文高清在线 | 国产av无码专区亚洲a∨毛片 | 成熟妇人a片免费看网站 | 牛和人交xxxx欧美 | 日日天日日夜日日摸 | 亚洲精品久久久久久久久久久 | 一个人看的视频www在线 | 日本精品少妇一区二区三区 | 亚洲精品国产精品乱码视色 | 无套内射视频囯产 | 亚洲综合色区中文字幕 | 亚洲精品无码人妻无码 | 中文字幕无码乱人伦 | а√天堂www在线天堂小说 | 亚洲国产精品久久久天堂 | 中文精品无码中文字幕无码专区 | 99久久人妻精品免费二区 | 88国产精品欧美一区二区三区 | 日本精品人妻无码免费大全 | 亚洲国产欧美在线成人 | 成人影院yy111111在线观看 | 亚洲小说图区综合在线 | 亚洲日韩中文字幕在线播放 | 国产内射爽爽大片视频社区在线 | 成人精品视频一区二区 | 国产内射爽爽大片视频社区在线 | 亚洲の无码国产の无码步美 | 欧美日韩综合一区二区三区 | 自拍偷自拍亚洲精品被多人伦好爽 | 大色综合色综合网站 | 伊人色综合久久天天小片 | 久久久精品国产sm最大网站 | 丰满少妇人妻久久久久久 | 蜜桃臀无码内射一区二区三区 | 丰满人妻被黑人猛烈进入 | 国产乱人无码伦av在线a | 国产电影无码午夜在线播放 | 亚洲成av人在线观看网址 | 国产成人精品无码播放 | 成人一在线视频日韩国产 | 日本丰满护士爆乳xxxx | 一本色道久久综合亚洲精品不卡 | 2019nv天堂香蕉在线观看 | 亚洲色欲色欲欲www在线 | 性欧美熟妇videofreesex | 性做久久久久久久久 | 亚洲国产高清在线观看视频 | 亚洲综合色区中文字幕 | 国产亚洲精品久久久闺蜜 | 婷婷丁香五月天综合东京热 | 装睡被陌生人摸出水好爽 | 一区二区三区高清视频一 | 无码人妻丰满熟妇区毛片18 | 欧美人妻一区二区三区 | yw尤物av无码国产在线观看 | 一本大道伊人av久久综合 | 色欲综合久久中文字幕网 | 免费国产黄网站在线观看 | 露脸叫床粗话东北少妇 | 国产口爆吞精在线视频 | 日本大乳高潮视频在线观看 | 中文字幕无码av激情不卡 | 永久免费观看美女裸体的网站 | 蜜臀aⅴ国产精品久久久国产老师 | 国产成人精品久久亚洲高清不卡 | 性色av无码免费一区二区三区 | 人妻天天爽夜夜爽一区二区 | 无码人妻少妇伦在线电影 | 久久zyz资源站无码中文动漫 | 在线播放无码字幕亚洲 | 欧美日本精品一区二区三区 | 日韩精品久久久肉伦网站 | 成年女人永久免费看片 | 欧美午夜特黄aaaaaa片 | 国产一区二区三区精品视频 | 精品一区二区不卡无码av | 日韩欧美群交p片內射中文 | 给我免费的视频在线观看 | 性欧美疯狂xxxxbbbb | 久久精品女人天堂av免费观看 | 亚洲国产精品一区二区美利坚 | 中文字幕中文有码在线 | 日韩少妇内射免费播放 | 国产又爽又猛又粗的视频a片 | 蜜臀av在线观看 在线欧美精品一区二区三区 | 人妻无码αv中文字幕久久琪琪布 | 亚洲 日韩 欧美 成人 在线观看 | 99久久亚洲精品无码毛片 | 丁香花在线影院观看在线播放 | 狂野欧美性猛交免费视频 | 日韩成人一区二区三区在线观看 | 老熟妇乱子伦牲交视频 | 成人精品天堂一区二区三区 | 蜜桃无码一区二区三区 | 亚洲啪av永久无码精品放毛片 | 亚洲一区av无码专区在线观看 | 青青青爽视频在线观看 | 午夜福利电影 | 丰满人妻翻云覆雨呻吟视频 | 国产绳艺sm调教室论坛 | 无码播放一区二区三区 | 老司机亚洲精品影院 | 午夜免费福利小电影 | 永久黄网站色视频免费直播 | 乱人伦人妻中文字幕无码 | 日韩少妇白浆无码系列 | 天天av天天av天天透 | 国产色在线 | 国产 | 国产午夜福利亚洲第一 | 999久久久国产精品消防器材 | 未满成年国产在线观看 | 131美女爱做视频 | 国产在线精品一区二区三区直播 | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 红桃av一区二区三区在线无码av | 日日碰狠狠躁久久躁蜜桃 | 久久久国产一区二区三区 | 少妇久久久久久人妻无码 | 精品欧美一区二区三区久久久 | 中文字幕无码乱人伦 | 国产精品99爱免费视频 | 久久久精品成人免费观看 | 国产乱人偷精品人妻a片 | 久久国产精品萌白酱免费 | 国产偷国产偷精品高清尤物 | 精品国产国产综合精品 | 国产精品久久福利网站 | 夜精品a片一区二区三区无码白浆 | 国产肉丝袜在线观看 | 激情国产av做激情国产爱 | 国产亚洲tv在线观看 | 国产精品久久国产三级国 | 成人一区二区免费视频 | 国产精品-区区久久久狼 | 东京无码熟妇人妻av在线网址 | 精品一二三区久久aaa片 | 国产手机在线αⅴ片无码观看 | 性色av无码免费一区二区三区 | 成 人 免费观看网站 | 国产极品美女高潮无套在线观看 | 欧美日韩色另类综合 | 在线a亚洲视频播放在线观看 | 亚洲欧洲日本综合aⅴ在线 | 日本高清一区免费中文视频 | 久青草影院在线观看国产 | aⅴ亚洲 日韩 色 图网站 播放 | 亚洲经典千人经典日产 | 97色伦图片97综合影院 | 日韩精品乱码av一区二区 | 人人澡人人透人人爽 | 国产va免费精品观看 | 麻豆国产97在线 | 欧洲 | 国产免费久久久久久无码 | 久久精品国产亚洲精品 | 国产精品欧美成人 | 成人性做爰aaa片免费看 | 无码中文字幕色专区 | 西西人体www44rt大胆高清 | 又色又爽又黄的美女裸体网站 | 精品国产aⅴ无码一区二区 | 无遮挡国产高潮视频免费观看 | 精品 日韩 国产 欧美 视频 | 国内精品久久久久久中文字幕 | 久久无码人妻影院 | 丰满护士巨好爽好大乳 | 欧美变态另类xxxx | 中文字幕无码免费久久99 | 国产特级毛片aaaaaaa高清 | 俺去俺来也www色官网 | 四十如虎的丰满熟妇啪啪 | 又黄又爽又色的视频 | 99精品久久毛片a片 | 白嫩日本少妇做爰 | 国产人妻久久精品二区三区老狼 | 在线 国产 欧美 亚洲 天堂 | 老太婆性杂交欧美肥老太 | 欧美丰满老熟妇xxxxx性 | 熟妇人妻无码xxx视频 | 亚洲娇小与黑人巨大交 | 人妻aⅴ无码一区二区三区 | 少妇太爽了在线观看 | 性欧美熟妇videofreesex | 国产艳妇av在线观看果冻传媒 | 国产日产欧产精品精品app | 久久久国产精品无码免费专区 | 99久久精品国产一区二区蜜芽 | 国产免费无码一区二区视频 | 特大黑人娇小亚洲女 | 久久精品中文字幕大胸 | 亚洲高清偷拍一区二区三区 | 2020最新国产自产精品 | 人人妻人人澡人人爽欧美精品 | 国产精品久久久av久久久 | 亚洲中文无码av永久不收费 | 无码人妻精品一区二区三区下载 | 夜夜夜高潮夜夜爽夜夜爰爰 | 久久久久久亚洲精品a片成人 | 日本大香伊一区二区三区 | 国产av一区二区三区最新精品 | 久久人人爽人人爽人人片av高清 | 免费看男女做好爽好硬视频 | 国产在线精品一区二区高清不卡 | 亚洲理论电影在线观看 | 国产乱子伦视频在线播放 | 俄罗斯老熟妇色xxxx | 思思久久99热只有频精品66 | 亚洲中文字幕在线无码一区二区 | 福利一区二区三区视频在线观看 | 高清不卡一区二区三区 | 免费无码一区二区三区蜜桃大 | 伊人久久大香线蕉午夜 | 日韩人妻系列无码专区 | 精品久久久无码中文字幕 | 精品国产青草久久久久福利 | 亚洲精品一区二区三区四区五区 | 夜夜高潮次次欢爽av女 | 精品无人区无码乱码毛片国产 | 亚洲中文字幕av在天堂 | 国产精品久久久久无码av色戒 | 成人影院yy111111在线观看 | 国产麻豆精品一区二区三区v视界 | 日本xxxx色视频在线观看免费 | 欧美亚洲日韩国产人成在线播放 | 日本熟妇乱子伦xxxx | 国产片av国语在线观看 | 国产成人无码av在线影院 | 国产三级精品三级男人的天堂 | 日本精品人妻无码77777 天堂一区人妻无码 | 国产成人综合美国十次 | 亚洲天堂2017无码 | 人人爽人人爽人人片av亚洲 | 九月婷婷人人澡人人添人人爽 | 天下第一社区视频www日本 | 欧美喷潮久久久xxxxx | 天天拍夜夜添久久精品大 | 男人扒开女人内裤强吻桶进去 | 久久久久久av无码免费看大片 | 动漫av网站免费观看 | 少妇厨房愉情理9仑片视频 | 国产成人精品三级麻豆 | 亚洲男女内射在线播放 | 国产成人无码区免费内射一片色欲 | 国产欧美熟妇另类久久久 | 久久亚洲国产成人精品性色 | 玩弄少妇高潮ⅹxxxyw | 国产激情艳情在线看视频 | 亚洲中文字幕乱码av波多ji | 中文字幕人妻无码一区二区三区 | 人妻少妇精品无码专区动漫 | 国产精品无码永久免费888 | 亚洲中文无码av永久不收费 | 大肉大捧一进一出好爽视频 | 亚洲人亚洲人成电影网站色 | 亚洲精品中文字幕乱码 | 动漫av网站免费观看 | 亚洲娇小与黑人巨大交 | 亚洲色在线无码国产精品不卡 | 国产亚洲欧美日韩亚洲中文色 | 乱中年女人伦av三区 | 综合激情五月综合激情五月激情1 | 精品无码一区二区三区的天堂 | 狠狠综合久久久久综合网 | 日本免费一区二区三区最新 | 色偷偷人人澡人人爽人人模 | 日韩人妻无码中文字幕视频 | 激情爆乳一区二区三区 | 99视频精品全部免费免费观看 | 国产成人精品必看 | 亚洲精品久久久久中文第一幕 | 日日天干夜夜狠狠爱 | 亚洲熟女一区二区三区 | 人妻少妇精品无码专区二区 | 西西人体www44rt大胆高清 | 国产成人无码午夜视频在线观看 | 久久伊人色av天堂九九小黄鸭 | 大肉大捧一进一出视频出来呀 | 丰满岳乱妇在线观看中字无码 | 最近免费中文字幕中文高清百度 | 亚洲娇小与黑人巨大交 | 国产人妻久久精品二区三区老狼 | 免费人成在线视频无码 | 蜜臀aⅴ国产精品久久久国产老师 | 亚洲熟女一区二区三区 | 精品人妻人人做人人爽 | 亚洲中文无码av永久不收费 | 国产精品无码mv在线观看 | 国产无遮挡吃胸膜奶免费看 | 亚洲区欧美区综合区自拍区 | √天堂中文官网8在线 | 亚洲s码欧洲m码国产av | 亚洲人交乣女bbw | 日日鲁鲁鲁夜夜爽爽狠狠 | 美女扒开屁股让男人桶 | 国内揄拍国内精品人妻 | 永久黄网站色视频免费直播 | 国产办公室秘书无码精品99 | 日本乱人伦片中文三区 | 两性色午夜免费视频 | 国产一区二区三区精品视频 | 一本久道久久综合婷婷五月 | 亚洲精品无码国产 | 熟女体下毛毛黑森林 | 丰满人妻精品国产99aⅴ | 亚洲精品一区二区三区在线观看 | 久久精品人妻少妇一区二区三区 | 日韩av激情在线观看 | 天天躁日日躁狠狠躁免费麻豆 | 野外少妇愉情中文字幕 | 亚洲欧美日韩成人高清在线一区 | 少妇无码av无码专区在线观看 | 好屌草这里只有精品 | 色综合久久久久综合一本到桃花网 | 国产香蕉97碰碰久久人人 | 中文字幕无码乱人伦 | 久久久久99精品国产片 | 日日鲁鲁鲁夜夜爽爽狠狠 | yw尤物av无码国产在线观看 | 欧美黑人性暴力猛交喷水 | 成人精品一区二区三区中文字幕 | 精品偷拍一区二区三区在线看 | 色婷婷av一区二区三区之红樱桃 | 蜜桃无码一区二区三区 | 久久久婷婷五月亚洲97号色 | 午夜精品久久久久久久 | 国产成人无码a区在线观看视频app | 中文字幕乱码人妻二区三区 | 玩弄少妇高潮ⅹxxxyw | 国产人妻大战黑人第1集 | 一个人免费观看的www视频 | 精品久久久中文字幕人妻 | 成人动漫在线观看 | 四十如虎的丰满熟妇啪啪 | 精品夜夜澡人妻无码av蜜桃 | 精品一区二区三区无码免费视频 | 成人精品天堂一区二区三区 | а天堂中文在线官网 | 蜜桃av抽搐高潮一区二区 | 精品亚洲韩国一区二区三区 | 欧美xxxx黑人又粗又长 | 国产美女极度色诱视频www | 激情亚洲一区国产精品 | 日韩精品久久久肉伦网站 | 久久 国产 尿 小便 嘘嘘 | 国产艳妇av在线观看果冻传媒 | 领导边摸边吃奶边做爽在线观看 | 美女黄网站人色视频免费国产 | 天下第一社区视频www日本 | 久久视频在线观看精品 | 成熟人妻av无码专区 | 成人亚洲精品久久久久 |