3atv精品不卡视频,97人人超碰国产精品最新,中文字幕av一区二区三区人妻少妇,久久久精品波多野结衣,日韩一区二区三区精品

歡迎訪問 生活随笔!

生活随笔

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

编程问答

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综合的全部內容,希望文章能夠幫你解決所遇到的問題。

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

性开放的女人aaa片 | 精品欧美一区二区三区久久久 | 亚洲成色www久久网站 | 日本大乳高潮视频在线观看 | 任你躁国产自任一区二区三区 | 国产人妻精品一区二区三区不卡 | 九九综合va免费看 | 夜夜高潮次次欢爽av女 | 娇妻被黑人粗大高潮白浆 | 99久久精品午夜一区二区 | 色 综合 欧美 亚洲 国产 | 久久亚洲中文字幕无码 | 东京热男人av天堂 | 久久久久国色av免费观看性色 | 午夜福利一区二区三区在线观看 | 波多野结衣高清一区二区三区 | 久久这里只有精品视频9 | 成人免费视频视频在线观看 免费 | 东北女人啪啪对白 | 亚洲精品一区二区三区在线观看 | 中文字幕无线码免费人妻 | 中文无码成人免费视频在线观看 | 亚洲另类伦春色综合小说 | 亚洲精品国产品国语在线观看 | 国产成人无码av在线影院 | 中文字幕日产无线码一区 | 无码人妻丰满熟妇区毛片18 | 77777熟女视频在线观看 а天堂中文在线官网 | 久久久精品欧美一区二区免费 | 午夜福利一区二区三区在线观看 | 高清不卡一区二区三区 | 无码毛片视频一区二区本码 | 国产xxx69麻豆国语对白 | 国语精品一区二区三区 | 亚洲欧美国产精品专区久久 | 国产综合在线观看 | 中国女人内谢69xxxx | 狠狠cao日日穞夜夜穞av | 日日碰狠狠丁香久燥 | 亚洲中文字幕乱码av波多ji | 精品国产乱码久久久久乱码 | 亚洲a无码综合a国产av中文 | 妺妺窝人体色www婷婷 | 老太婆性杂交欧美肥老太 | av无码不卡在线观看免费 | 青草青草久热国产精品 | 麻豆人妻少妇精品无码专区 | 中文字幕无码日韩专区 | 无码播放一区二区三区 | 欧美乱妇无乱码大黄a片 | 亚洲天堂2017无码 | 国产成人综合在线女婷五月99播放 | 黄网在线观看免费网站 | 日韩在线不卡免费视频一区 | 少妇性荡欲午夜性开放视频剧场 | 暴力强奷在线播放无码 | 日韩人妻无码一区二区三区久久99 | 国产精品va在线观看无码 | 97资源共享在线视频 | 久久这里只有精品视频9 | 一本久久a久久精品vr综合 | 伊人久久婷婷五月综合97色 | 国产疯狂伦交大片 | 久久亚洲a片com人成 | 水蜜桃色314在线观看 | 国产女主播喷水视频在线观看 | 国产激情艳情在线看视频 | 奇米影视888欧美在线观看 | 色综合久久久无码中文字幕 | 亚洲无人区午夜福利码高清完整版 | 免费无码一区二区三区蜜桃大 | 日日噜噜噜噜夜夜爽亚洲精品 | 国产成人一区二区三区别 | 在线播放亚洲第一字幕 | 国产精品va在线播放 | 麻豆蜜桃av蜜臀av色欲av | 国产精品毛多多水多 | 精品欧美一区二区三区久久久 | 国产综合在线观看 | 两性色午夜视频免费播放 | 中文字幕久久久久人妻 | 在线视频网站www色 | 熟妇人妻中文av无码 | 久久这里只有精品视频9 | 午夜福利不卡在线视频 | 国产凸凹视频一区二区 | 国产亚洲精品久久久久久大师 | 黑人巨大精品欧美一区二区 | 亚洲色欲色欲天天天www | 中文字幕无码日韩专区 | 亚洲国产欧美日韩精品一区二区三区 | 亚洲男人av香蕉爽爽爽爽 | 99riav国产精品视频 | 午夜理论片yy44880影院 | 中文字幕人妻无码一区二区三区 | 我要看www免费看插插视频 | 国产成人无码一二三区视频 | 性欧美熟妇videofreesex | 九一九色国产 | 无码国产激情在线观看 | 亚洲精品鲁一鲁一区二区三区 | 麻豆果冻传媒2021精品传媒一区下载 | 久久午夜无码鲁丝片午夜精品 | 国产在线精品一区二区高清不卡 | 亚洲欧美精品aaaaaa片 | 亚洲色www成人永久网址 | 日韩人妻少妇一区二区三区 | 久久久久亚洲精品中文字幕 | 一二三四社区在线中文视频 | 亚洲综合在线一区二区三区 | 亚洲伊人久久精品影院 | 少女韩国电视剧在线观看完整 | 中文字幕av日韩精品一区二区 | 欧美成人高清在线播放 | 欧美成人高清在线播放 | 波多野结衣av一区二区全免费观看 | 中文字幕日产无线码一区 | 国产精品国产三级国产专播 | 久久综合狠狠综合久久综合88 | 国产精品igao视频网 | 麻豆国产丝袜白领秘书在线观看 | 四虎国产精品免费久久 | 国产sm调教视频在线观看 | 大乳丰满人妻中文字幕日本 | 全黄性性激高免费视频 | 大地资源中文第3页 | 国产精品久久久 | 婷婷色婷婷开心五月四房播播 | 国产 精品 自在自线 | 麻豆精产国品 | 人人澡人人透人人爽 | 久久精品国产亚洲精品 | 国产午夜手机精彩视频 | 丰满护士巨好爽好大乳 | 人妻无码αv中文字幕久久琪琪布 | 国产午夜精品一区二区三区嫩草 | 午夜精品久久久久久久 | 免费观看黄网站 | 国产精品久久久午夜夜伦鲁鲁 | 久久99久久99精品中文字幕 | 又湿又紧又大又爽a视频国产 | 大肉大捧一进一出好爽视频 | 精品久久久中文字幕人妻 | 日本护士xxxxhd少妇 | 天堂亚洲免费视频 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 久久综合狠狠综合久久综合88 | 一本色道久久综合亚洲精品不卡 | 成在人线av无码免观看麻豆 | 熟女少妇人妻中文字幕 | 亚洲熟女一区二区三区 | 国产福利视频一区二区 | 亚洲欧美日韩国产精品一区二区 | 色情久久久av熟女人妻网站 | 国产精品人人妻人人爽 | 人妻尝试又大又粗久久 | 日欧一片内射va在线影院 | 国产人妻人伦精品1国产丝袜 | 黑人粗大猛烈进出高潮视频 | 国产三级久久久精品麻豆三级 | 扒开双腿疯狂进出爽爽爽视频 | 国产av剧情md精品麻豆 | 亚洲小说图区综合在线 | 亚洲自偷自拍另类第1页 | 特级做a爰片毛片免费69 | 男人的天堂av网站 | 成人亚洲精品久久久久软件 | 亚洲精品国偷拍自产在线观看蜜桃 | 双乳奶水饱满少妇呻吟 | 亚洲区小说区激情区图片区 | 久久久中文久久久无码 | 男人扒开女人内裤强吻桶进去 | 色婷婷久久一区二区三区麻豆 | 亚洲高清偷拍一区二区三区 | 人妻人人添人妻人人爱 | aa片在线观看视频在线播放 | 最近中文2019字幕第二页 | 亚洲精品中文字幕乱码 | 国产婷婷色一区二区三区在线 | 国产精品久久久久无码av色戒 | 夜夜夜高潮夜夜爽夜夜爰爰 | 99精品久久毛片a片 | 中文字幕无码免费久久9一区9 | 熟妇人妻激情偷爽文 | 老熟女乱子伦 | 日韩视频 中文字幕 视频一区 | 精品国产乱码久久久久乱码 | 亚洲a无码综合a国产av中文 | 国产精品爱久久久久久久 | 久久无码中文字幕免费影院蜜桃 | 欧美国产亚洲日韩在线二区 | 亚洲无人区午夜福利码高清完整版 | 色综合久久久久综合一本到桃花网 | 老熟女重囗味hdxx69 | 国产激情无码一区二区 | 成人影院yy111111在线观看 | 国产精品视频免费播放 | 久久国产劲爆∧v内射 | 熟女体下毛毛黑森林 | 亚洲午夜福利在线观看 | 国产成人综合色在线观看网站 | 国产国产精品人在线视 | 亚洲精品久久久久中文第一幕 | 中文字幕日产无线码一区 | 无套内射视频囯产 | 久久精品国产大片免费观看 | 97夜夜澡人人双人人人喊 | 亚洲日韩av一区二区三区中文 | 黑人大群体交免费视频 | 亚洲区欧美区综合区自拍区 | 中国女人内谢69xxxx | 亚洲精品一区二区三区在线 | 国产69精品久久久久app下载 | 欧美真人作爱免费视频 | 女人高潮内射99精品 | 国产人妻精品一区二区三区 | 在线观看欧美一区二区三区 | 成 人 免费观看网站 | 中文字幕无码av波多野吉衣 | 一本加勒比波多野结衣 | 国产精品久久久午夜夜伦鲁鲁 | 丰满妇女强制高潮18xxxx | 欧美日韩色另类综合 | 久久综合久久自在自线精品自 | 亚洲精品成a人在线观看 | 欧美人与动性行为视频 | 欧美亚洲国产一区二区三区 | 国产国语老龄妇女a片 | 亚洲一区二区三区在线观看网站 | 男人扒开女人内裤强吻桶进去 | 精品国产精品久久一区免费式 | 亚洲男人av天堂午夜在 | 国产乱人偷精品人妻a片 | 天天躁夜夜躁狠狠是什么心态 | 日日碰狠狠丁香久燥 | 免费观看黄网站 | 婷婷综合久久中文字幕蜜桃三电影 | 东京一本一道一二三区 | 色婷婷欧美在线播放内射 | 亚洲国产精品一区二区第一页 | 国模大胆一区二区三区 | 亚洲精品久久久久中文第一幕 | 嫩b人妻精品一区二区三区 | 激情人妻另类人妻伦 | 成人无码影片精品久久久 | 日韩av激情在线观看 | a片免费视频在线观看 | 精品久久8x国产免费观看 | 亚洲中文字幕无码中字 | 无码成人精品区在线观看 | 国产乱子伦视频在线播放 | 国产小呦泬泬99精品 | 国产日产欧产精品精品app | 国产精品高潮呻吟av久久 | 久久综合激激的五月天 | 在线观看免费人成视频 | a在线亚洲男人的天堂 | 十八禁视频网站在线观看 | 一二三四社区在线中文视频 | 国产综合久久久久鬼色 | 亚洲中文字幕无码一久久区 | 丰满人妻被黑人猛烈进入 | 成在人线av无码免观看麻豆 | 日日躁夜夜躁狠狠躁 | 六十路熟妇乱子伦 | 人妻有码中文字幕在线 | 老司机亚洲精品影院无码 | 精品欧洲av无码一区二区三区 | 丰满人妻精品国产99aⅴ | 中文字幕av日韩精品一区二区 | 88国产精品欧美一区二区三区 | 午夜精品一区二区三区在线观看 | 性色av无码免费一区二区三区 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 亚洲中文字幕在线观看 | 国产综合在线观看 | 亚洲中文无码av永久不收费 | 亚洲中文字幕无码中字 | 亚洲性无码av中文字幕 | aⅴ亚洲 日韩 色 图网站 播放 | 麻豆精品国产精华精华液好用吗 | 欧美老熟妇乱xxxxx | 97夜夜澡人人双人人人喊 | 美女扒开屁股让男人桶 | 国产 精品 自在自线 | 综合激情五月综合激情五月激情1 | 国精品人妻无码一区二区三区蜜柚 | 全黄性性激高免费视频 | 国产精品亚洲五月天高清 | 成人精品视频一区二区 | 波多野结衣aⅴ在线 | 噜噜噜亚洲色成人网站 | 亚洲国产欧美日韩精品一区二区三区 | 午夜性刺激在线视频免费 | 少妇性l交大片 | 国产免费久久精品国产传媒 | 亚洲 a v无 码免 费 成 人 a v | 亚洲综合伊人久久大杳蕉 | 亚洲最大成人网站 | 国产亚洲欧美日韩亚洲中文色 | 免费无码肉片在线观看 | 久久久久久国产精品无码下载 | 无码人妻少妇伦在线电影 | 国产亚洲精品久久久久久久 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 又大又黄又粗又爽的免费视频 | 色婷婷综合中文久久一本 | 日韩欧美中文字幕在线三区 | 中文字幕精品av一区二区五区 | 无码av最新清无码专区吞精 | 少妇愉情理伦片bd | 亚洲国产av精品一区二区蜜芽 | 精品无码成人片一区二区98 | 亚洲国产av精品一区二区蜜芽 | 成人欧美一区二区三区 | 男人和女人高潮免费网站 | 久久精品人人做人人综合试看 | 一本大道伊人av久久综合 | 国产精品资源一区二区 | 久久国产劲爆∧v内射 | 久久精品一区二区三区四区 | 蜜桃视频韩日免费播放 | 亚洲国产精品久久久久久 | 麻花豆传媒剧国产免费mv在线 | 大地资源网第二页免费观看 | 国产深夜福利视频在线 | 成人欧美一区二区三区黑人免费 | 精品 日韩 国产 欧美 视频 | 日韩亚洲欧美中文高清在线 | 亚洲人成无码网www | 人妻与老人中文字幕 | 日本va欧美va欧美va精品 | 国产成人一区二区三区在线观看 | 久久精品女人天堂av免费观看 | 四虎4hu永久免费 | 色综合视频一区二区三区 | 日韩 欧美 动漫 国产 制服 | 影音先锋中文字幕无码 | 欧美日韩综合一区二区三区 | 国产无遮挡吃胸膜奶免费看 | 欧美怡红院免费全部视频 | 国产九九九九九九九a片 | 人妻少妇被猛烈进入中文字幕 | 精品无码成人片一区二区98 | 亚洲人成网站免费播放 | 免费乱码人妻系列无码专区 | 狠狠色噜噜狠狠狠7777奇米 | 国产激情一区二区三区 | 精品人妻av区 | 永久免费观看国产裸体美女 | 中文字幕无码免费久久99 | 正在播放东北夫妻内射 | 思思久久99热只有频精品66 | 狠狠躁日日躁夜夜躁2020 | 亚洲日本va中文字幕 | 欧美丰满熟妇xxxx性ppx人交 | 人妻插b视频一区二区三区 | 亚洲精品无码人妻无码 | 奇米影视7777久久精品人人爽 | 国产精品亚洲一区二区三区喷水 | 亚洲天堂2017无码中文 | 一区二区三区乱码在线 | 欧洲 | 色欲人妻aaaaaaa无码 | 国产成人精品三级麻豆 | 18禁黄网站男男禁片免费观看 | 国产成人无码a区在线观看视频app | 麻豆成人精品国产免费 | 粗大的内捧猛烈进出视频 | 国产又粗又硬又大爽黄老大爷视 | 国产尤物精品视频 | 日韩欧美群交p片內射中文 | 一区二区三区高清视频一 | 中文字幕日韩精品一区二区三区 | 无套内射视频囯产 | 少妇激情av一区二区 | 欧美老妇交乱视频在线观看 | 国产亚洲tv在线观看 | 国产美女极度色诱视频www | 午夜福利试看120秒体验区 | 76少妇精品导航 | 天天摸天天透天天添 | 88国产精品欧美一区二区三区 | 少妇性俱乐部纵欲狂欢电影 | 中文字幕乱码人妻无码久久 | 西西人体www44rt大胆高清 | 国产在线精品一区二区高清不卡 | 中文字幕无码视频专区 | 未满小14洗澡无码视频网站 | 日本爽爽爽爽爽爽在线观看免 | 人妻插b视频一区二区三区 | 少妇被黑人到高潮喷出白浆 | www一区二区www免费 | 天堂无码人妻精品一区二区三区 | 欧美性猛交内射兽交老熟妇 | 成人免费视频一区二区 | 国产网红无码精品视频 | 亚洲狠狠婷婷综合久久 | 天天摸天天透天天添 | 蜜桃臀无码内射一区二区三区 | 国产香蕉97碰碰久久人人 | 最近中文2019字幕第二页 | 亚洲经典千人经典日产 | 国产国语老龄妇女a片 | 台湾无码一区二区 | 狠狠色色综合网站 | 欧美国产日韩亚洲中文 | 1000部夫妻午夜免费 | 国产一区二区三区日韩精品 | 国产欧美亚洲精品a | 男女猛烈xx00免费视频试看 | 激情内射亚州一区二区三区爱妻 | 自拍偷自拍亚洲精品被多人伦好爽 | 亚无码乱人伦一区二区 | 搡女人真爽免费视频大全 | 国产女主播喷水视频在线观看 | 精品午夜福利在线观看 | 日日麻批免费40分钟无码 | 狠狠躁日日躁夜夜躁2020 | 久久国内精品自在自线 | 色情久久久av熟女人妻网站 | 国产精品无码mv在线观看 | 高清不卡一区二区三区 | 成人三级无码视频在线观看 | 人妻少妇精品无码专区动漫 | 国产一区二区三区四区五区加勒比 | 狠狠色噜噜狠狠狠狠7777米奇 | 色婷婷av一区二区三区之红樱桃 | 日韩欧美群交p片內射中文 | 牲交欧美兽交欧美 | 亚洲国产成人a精品不卡在线 | 国产suv精品一区二区五 | 真人与拘做受免费视频 | 国产成人精品视频ⅴa片软件竹菊 | 鲁大师影院在线观看 | 国产av无码专区亚洲awww | 久久综合给合久久狠狠狠97色 | 男女下面进入的视频免费午夜 | 中文字幕人妻丝袜二区 | 国产成人午夜福利在线播放 | 熟妇人妻无乱码中文字幕 | 亚洲国产成人av在线观看 | 人妻少妇精品无码专区动漫 | 国产无遮挡又黄又爽免费视频 | 亚洲精品国偷拍自产在线观看蜜桃 | 色五月丁香五月综合五月 | 99国产欧美久久久精品 | 伊人久久大香线蕉av一区二区 | 熟妇人妻无码xxx视频 | 色综合视频一区二区三区 | 丝袜 中出 制服 人妻 美腿 | 一区二区三区乱码在线 | 欧洲 | 国产综合色产在线精品 | 麻豆成人精品国产免费 | 扒开双腿疯狂进出爽爽爽视频 | 国产欧美精品一区二区三区 | 亚洲啪av永久无码精品放毛片 | 欧美老妇与禽交 | 国产真实乱对白精彩久久 | 久久精品无码一区二区三区 | 国产综合在线观看 | 日日摸日日碰夜夜爽av | 国产免费观看黄av片 | 亚洲精品国偷拍自产在线麻豆 | 日韩av无码一区二区三区 | 日韩精品成人一区二区三区 | 久久久国产一区二区三区 | 18精品久久久无码午夜福利 | 亚洲日韩乱码中文无码蜜桃臀网站 | 久久人人爽人人爽人人片av高清 | 日本一卡2卡3卡四卡精品网站 | 未满小14洗澡无码视频网站 | 久久精品成人欧美大片 | 国产精品第一区揄拍无码 | 大肉大捧一进一出视频出来呀 | 在线欧美精品一区二区三区 | 熟女少妇人妻中文字幕 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 狠狠cao日日穞夜夜穞av | 精品厕所偷拍各类美女tp嘘嘘 | 国产欧美精品一区二区三区 | 国产亚洲人成在线播放 | 蜜臀aⅴ国产精品久久久国产老师 | 无码av岛国片在线播放 | 中文无码成人免费视频在线观看 | 亚洲理论电影在线观看 | 亚洲色欲久久久综合网东京热 | 中文字幕无码视频专区 | 国产激情艳情在线看视频 | 国产乱人偷精品人妻a片 | 国产精品多人p群无码 | 色婷婷久久一区二区三区麻豆 | 又大又硬又爽免费视频 | 兔费看少妇性l交大片免费 | 色综合久久久无码网中文 | 国产无遮挡吃胸膜奶免费看 | 欧美黑人巨大xxxxx | 亚洲精品成a人在线观看 | 国产av无码专区亚洲a∨毛片 | 蜜臀aⅴ国产精品久久久国产老师 | 亚洲国产精品无码一区二区三区 | 久久久国产精品无码免费专区 | 少妇无套内谢久久久久 | 亚洲日韩av一区二区三区四区 | av无码久久久久不卡免费网站 | 荫蒂被男人添的好舒服爽免费视频 | 麻豆精品国产精华精华液好用吗 | 色欲久久久天天天综合网精品 | 乌克兰少妇性做爰 | 日日碰狠狠丁香久燥 | 国产精品怡红院永久免费 | 国色天香社区在线视频 | 精品一区二区不卡无码av | 国产真实夫妇视频 | 精品无码成人片一区二区98 | 国产亚洲精品久久久久久久 | 亚洲精品国产精品乱码不卡 | 国产女主播喷水视频在线观看 | 国产人妻精品午夜福利免费 | 亚洲综合无码一区二区三区 | 九九久久精品国产免费看小说 | 又大又硬又黄的免费视频 | 欧美精品免费观看二区 | 久久亚洲精品成人无码 | 亚洲国产精品久久久天堂 | 欧美猛少妇色xxxxx | 国产精品久久久久无码av色戒 | 中国女人内谢69xxxxxa片 | 99久久精品日本一区二区免费 | 久久精品成人欧美大片 | 色婷婷av一区二区三区之红樱桃 | 久久综合给合久久狠狠狠97色 | 久激情内射婷内射蜜桃人妖 | 狠狠cao日日穞夜夜穞av | 无码精品人妻一区二区三区av | 少妇性荡欲午夜性开放视频剧场 | 亚洲精品久久久久久久久久久 | 亚洲日韩乱码中文无码蜜桃臀网站 | 亚洲欧美中文字幕5发布 | 午夜成人1000部免费视频 | 亚洲色偷偷男人的天堂 | 初尝人妻少妇中文字幕 | 久久国产36精品色熟妇 | 好男人社区资源 | 欧美丰满老熟妇xxxxx性 | 精品日本一区二区三区在线观看 | 男女下面进入的视频免费午夜 | 麻豆md0077饥渴少妇 | 国产69精品久久久久app下载 | 老头边吃奶边弄进去呻吟 | 国产精品丝袜黑色高跟鞋 | 成人三级无码视频在线观看 | 67194成是人免费无码 | 露脸叫床粗话东北少妇 | 欧美国产亚洲日韩在线二区 | 精品少妇爆乳无码av无码专区 | 西西人体www44rt大胆高清 | 亚洲欧美国产精品专区久久 | 成人无码影片精品久久久 | 日本大香伊一区二区三区 | 亚洲 欧美 激情 小说 另类 | 精品无人国产偷自产在线 | 99精品视频在线观看免费 | 国内少妇偷人精品视频 | 亚洲色在线无码国产精品不卡 | 无码人妻av免费一区二区三区 | 亚洲欧洲日本综合aⅴ在线 | 99久久人妻精品免费二区 | 在线精品亚洲一区二区 | 人妻插b视频一区二区三区 | 清纯唯美经典一区二区 | 对白脏话肉麻粗话av | 久久国产劲爆∧v内射 | 扒开双腿吃奶呻吟做受视频 | 精品一区二区不卡无码av | 装睡被陌生人摸出水好爽 | 高清无码午夜福利视频 | 国产黄在线观看免费观看不卡 | 香港三级日本三级妇三级 | 亚洲日韩av片在线观看 | 99国产欧美久久久精品 | 久久久久99精品成人片 | 高清无码午夜福利视频 | 中国女人内谢69xxxxxa片 | 久久亚洲中文字幕精品一区 | 国产乱子伦视频在线播放 | 精品无码一区二区三区的天堂 | 国产激情无码一区二区 | 国产9 9在线 | 中文 | 无码国产色欲xxxxx视频 | 亚洲a无码综合a国产av中文 | 国语精品一区二区三区 | 亚洲精品中文字幕 | 国产精品18久久久久久麻辣 | 亚洲欧美国产精品久久 | 少妇激情av一区二区 | 奇米影视888欧美在线观看 | 成人欧美一区二区三区黑人免费 | 伊人久久大香线蕉午夜 | 午夜理论片yy44880影院 | 人妻夜夜爽天天爽三区 | 精品久久久无码中文字幕 | 性啪啪chinese东北女人 | 国产无遮挡又黄又爽免费视频 | 国产无套粉嫩白浆在线 | 精品久久久久久亚洲精品 | 婷婷五月综合缴情在线视频 | 天干天干啦夜天干天2017 | 久久久久亚洲精品男人的天堂 | 国产精品igao视频网 | 天干天干啦夜天干天2017 | 色综合久久久无码中文字幕 | 乱人伦中文视频在线观看 | 欧美性猛交xxxx富婆 | 日本丰满熟妇videos | 少妇性荡欲午夜性开放视频剧场 | 国产又爽又黄又刺激的视频 | 草草网站影院白丝内射 | 成人无码精品一区二区三区 | 久久无码人妻影院 | 国产国产精品人在线视 | 国产成人无码av片在线观看不卡 | 精品一区二区不卡无码av | 领导边摸边吃奶边做爽在线观看 | 国产精品久久久久影院嫩草 | 亲嘴扒胸摸屁股激烈网站 | 青青草原综合久久大伊人精品 | 精品久久8x国产免费观看 | 亚洲精品一区二区三区在线观看 | 强辱丰满人妻hd中文字幕 | 99久久精品国产一区二区蜜芽 | 少妇高潮喷潮久久久影院 | 成人三级无码视频在线观看 | 大地资源网第二页免费观看 | 亚洲一区二区三区国产精华液 | 人妻体内射精一区二区三四 | 色婷婷av一区二区三区之红樱桃 | 久久精品女人的天堂av | 久久久久久亚洲精品a片成人 | 国产成人精品三级麻豆 | 丰满少妇女裸体bbw | 久热国产vs视频在线观看 | 日韩av无码一区二区三区不卡 | 欧美人与动性行为视频 | 国产美女极度色诱视频www | 久久人人爽人人爽人人片av高清 | 久久精品国产一区二区三区 | 极品尤物被啪到呻吟喷水 | 日本乱偷人妻中文字幕 | 激情亚洲一区国产精品 | 日韩精品成人一区二区三区 | 久久久国产精品无码免费专区 | 风流少妇按摩来高潮 | 久久午夜无码鲁丝片秋霞 | 两性色午夜视频免费播放 | 日本va欧美va欧美va精品 | 狠狠色噜噜狠狠狠狠7777米奇 | 蜜桃av抽搐高潮一区二区 | 欧美第一黄网免费网站 | 亚洲一区二区三区 | 无码午夜成人1000部免费视频 | 国产精品久久久av久久久 | 久久久久亚洲精品男人的天堂 | 红桃av一区二区三区在线无码av | 极品嫩模高潮叫床 | 红桃av一区二区三区在线无码av | 久久久久久久人妻无码中文字幕爆 | 曰韩少妇内射免费播放 | 久久久www成人免费毛片 | yw尤物av无码国产在线观看 | 亚洲中文字幕无码中文字在线 | 色综合久久久久综合一本到桃花网 | 精品无码成人片一区二区98 | 国产 精品 自在自线 | 国产在线一区二区三区四区五区 | 亚洲日本va中文字幕 | 色婷婷综合激情综在线播放 | 一本色道婷婷久久欧美 | 两性色午夜免费视频 | 日产精品高潮呻吟av久久 | 久久精品国产亚洲精品 | 亚洲成a人片在线观看无码3d | 精品久久久久久人妻无码中文字幕 | 日本乱人伦片中文三区 | 色一情一乱一伦一视频免费看 | 美女扒开屁股让男人桶 | 国内少妇偷人精品视频免费 | 99久久亚洲精品无码毛片 | 玩弄中年熟妇正在播放 | 对白脏话肉麻粗话av | 77777熟女视频在线观看 а天堂中文在线官网 | 国产成人av免费观看 | 男人扒开女人内裤强吻桶进去 | 噜噜噜亚洲色成人网站 | 人妻少妇精品无码专区二区 | 久久视频在线观看精品 | 一二三四社区在线中文视频 | 日本精品人妻无码免费大全 | 日日麻批免费40分钟无码 | 一个人免费观看的www视频 | a片免费视频在线观看 | 无码人妻出轨黑人中文字幕 | 久久亚洲精品中文字幕无男同 | 久久久精品成人免费观看 | 亚洲人亚洲人成电影网站色 | 一本久道久久综合婷婷五月 | 中文毛片无遮挡高清免费 | 国产免费无码一区二区视频 | 久久精品国产99久久6动漫 | 日本饥渴人妻欲求不满 | 男女猛烈xx00免费视频试看 | 亚洲精品久久久久avwww潮水 | 在线播放亚洲第一字幕 | 国产精品久久精品三级 | 无套内谢的新婚少妇国语播放 | 欧美喷潮久久久xxxxx | 日本高清一区免费中文视频 | 国产精品资源一区二区 | 人人爽人人澡人人人妻 | 国产精品无套呻吟在线 | 国产内射爽爽大片视频社区在线 | 精品亚洲成av人在线观看 | 亚洲爆乳无码专区 | 国产真人无遮挡作爱免费视频 | 亚洲天堂2017无码中文 | 国产又粗又硬又大爽黄老大爷视 | 色 综合 欧美 亚洲 国产 | 天天躁夜夜躁狠狠是什么心态 | 国产猛烈高潮尖叫视频免费 | 成年女人永久免费看片 | 国产欧美亚洲精品a | 人人妻人人澡人人爽精品欧美 | 日韩无码专区 | 狂野欧美性猛交免费视频 | 久久亚洲精品成人无码 | 老子影院午夜伦不卡 | 国产精品久久久久久久影院 | 狠狠躁日日躁夜夜躁2020 | 国产 精品 自在自线 | av无码久久久久不卡免费网站 | 久青草影院在线观看国产 | 东京热一精品无码av | 99精品无人区乱码1区2区3区 | 国产精品久久久久久亚洲影视内衣 | 亚洲成a人一区二区三区 | 老子影院午夜精品无码 | 欧美性生交xxxxx久久久 | 99久久久国产精品无码免费 | 窝窝午夜理论片影院 | 亚洲人成人无码网www国产 | 国产国产精品人在线视 | 全球成人中文在线 | 久久99精品久久久久久动态图 | 国产成人一区二区三区在线观看 | 国产成人av免费观看 | 亚洲欧洲日本无在线码 | 少妇的肉体aa片免费 | 精品 日韩 国产 欧美 视频 | 国产又爽又猛又粗的视频a片 | 无码av免费一区二区三区试看 | 国产真人无遮挡作爱免费视频 | 欧美黑人性暴力猛交喷水 | 无码人妻av免费一区二区三区 | 久精品国产欧美亚洲色aⅴ大片 | 中国女人内谢69xxxxxa片 | 成人av无码一区二区三区 | 久久久久久a亚洲欧洲av冫 | 久久综合九色综合欧美狠狠 | 久久99精品国产麻豆蜜芽 | 国产无遮挡又黄又爽又色 | 成人试看120秒体验区 | 熟女少妇在线视频播放 | 性生交大片免费看l | 国产成人无码一二三区视频 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 免费观看又污又黄的网站 | 极品尤物被啪到呻吟喷水 | 熟妇人妻无乱码中文字幕 | 最近免费中文字幕中文高清百度 | 狂野欧美激情性xxxx | 无码人妻少妇伦在线电影 | 一二三四在线观看免费视频 | 国产婷婷色一区二区三区在线 | 欧洲极品少妇 | 色情久久久av熟女人妻网站 | 国产综合久久久久鬼色 | 日日天日日夜日日摸 | 国产精品久久福利网站 | 18禁止看的免费污网站 | 扒开双腿吃奶呻吟做受视频 | www一区二区www免费 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 真人与拘做受免费视频 | 少妇太爽了在线观看 | www一区二区www免费 | 夜夜躁日日躁狠狠久久av | 日本免费一区二区三区最新 | 欧美丰满熟妇xxxx性ppx人交 | 99久久人妻精品免费二区 | av小次郎收藏 | 欧美日韩视频无码一区二区三 | 99riav国产精品视频 | 成人无码影片精品久久久 | 色妞www精品免费视频 | 免费人成网站视频在线观看 | a在线亚洲男人的天堂 | 亚洲精品一区二区三区在线观看 | 在线播放免费人成毛片乱码 | 波多野结衣乳巨码无在线观看 | 精品久久久久久亚洲精品 | 一个人看的www免费视频在线观看 | 午夜福利不卡在线视频 | 偷窥村妇洗澡毛毛多 | 午夜无码人妻av大片色欲 | 色五月五月丁香亚洲综合网 | 国产亚洲精品久久久久久久 | 日韩av无码中文无码电影 | a片在线免费观看 | 国产精品久久久久7777 | 免费乱码人妻系列无码专区 | 麻豆果冻传媒2021精品传媒一区下载 | 欧美丰满熟妇xxxx性ppx人交 | 国产一区二区不卡老阿姨 | 人人爽人人澡人人人妻 | 波多野结衣av一区二区全免费观看 | 成人无码精品1区2区3区免费看 | 久在线观看福利视频 | 玩弄少妇高潮ⅹxxxyw | 东京一本一道一二三区 | 国产真实夫妇视频 | 亚洲国产精品一区二区美利坚 | 国产成人人人97超碰超爽8 | 18黄暴禁片在线观看 | 无码播放一区二区三区 | 国产特级毛片aaaaaaa高清 | 荫蒂添的好舒服视频囗交 | 高清国产亚洲精品自在久久 | 久久久久亚洲精品中文字幕 | 久久人人爽人人人人片 | 国产乱人伦av在线无码 | 久久久久免费看成人影片 | 人妻aⅴ无码一区二区三区 | 久久国产劲爆∧v内射 | 2019nv天堂香蕉在线观看 | 亚洲中文字幕无码一久久区 | 日韩 欧美 动漫 国产 制服 | 日韩精品乱码av一区二区 | 人人妻人人澡人人爽欧美一区九九 | 99久久精品日本一区二区免费 | 久久久久亚洲精品中文字幕 | 亚洲人成影院在线无码按摩店 | 国产精品人人爽人人做我的可爱 | 国产精品办公室沙发 | 中文字幕无码日韩专区 | 久久伊人色av天堂九九小黄鸭 | 人人超人人超碰超国产 | 亚洲熟妇色xxxxx欧美老妇y | 国产精品免费大片 | 欧美 丝袜 自拍 制服 另类 | 欧美自拍另类欧美综合图片区 | 久久久久av无码免费网 | 亚洲色在线无码国产精品不卡 | 丝袜人妻一区二区三区 | 爽爽影院免费观看 | 亚洲七七久久桃花影院 | 日本一区二区三区免费播放 | 欧美第一黄网免费网站 | 日韩精品无码一本二本三本色 | 久久久精品国产sm最大网站 | 狠狠色噜噜狠狠狠狠7777米奇 | 亚洲精品一区二区三区大桥未久 | 一区二区三区乱码在线 | 欧洲 | 亚洲人亚洲人成电影网站色 | 99久久精品国产一区二区蜜芽 | 久久久亚洲欧洲日产国码αv | 97精品人妻一区二区三区香蕉 | 国产成人人人97超碰超爽8 | 娇妻被黑人粗大高潮白浆 | 亚洲男女内射在线播放 | 国产超碰人人爽人人做人人添 | 女人被男人躁得好爽免费视频 | 丝袜人妻一区二区三区 | 国产性生交xxxxx无码 | 一区二区传媒有限公司 | 东京热男人av天堂 | 日本熟妇人妻xxxxx人hd | 乱中年女人伦av三区 | 亚洲自偷自偷在线制服 | 久久久国产一区二区三区 | 色欲av亚洲一区无码少妇 | 国产精品第一区揄拍无码 | 久久综合狠狠综合久久综合88 | 国内揄拍国内精品人妻 | 久精品国产欧美亚洲色aⅴ大片 | 国产精品人人爽人人做我的可爱 | 日日干夜夜干 | 国产麻豆精品精东影业av网站 | 免费无码av一区二区 | 在线观看国产午夜福利片 | 欧美国产日韩久久mv | 久久国产自偷自偷免费一区调 | 亚洲国产精品无码久久久久高潮 | 好男人www社区 | 亚洲综合色区中文字幕 | 国产绳艺sm调教室论坛 | 丰满少妇人妻久久久久久 | 亚洲无人区一区二区三区 | 国产精品成人av在线观看 | 亚洲码国产精品高潮在线 | 久青草影院在线观看国产 | 中文字幕人妻无码一夲道 | 少女韩国电视剧在线观看完整 | 网友自拍区视频精品 | 国产绳艺sm调教室论坛 | 国产内射老熟女aaaa | 激情内射亚州一区二区三区爱妻 | www国产亚洲精品久久网站 | 人人澡人人妻人人爽人人蜜桃 | 国产明星裸体无码xxxx视频 | 给我免费的视频在线观看 | 少妇高潮一区二区三区99 | 日本一区二区更新不卡 | 亚洲人成网站在线播放942 | 午夜福利一区二区三区在线观看 | 国产精品久久久久9999小说 | 日韩精品无码一本二本三本色 | 亚洲精品国产品国语在线观看 | 99精品视频在线观看免费 | 亚洲中文字幕av在天堂 | 国产成人无码av在线影院 | 天天躁夜夜躁狠狠是什么心态 | 亚洲日韩乱码中文无码蜜桃臀网站 | 欧美高清在线精品一区 | 人人妻人人藻人人爽欧美一区 | 成年女人永久免费看片 | 欧美日本精品一区二区三区 | 亚洲一区二区三区无码久久 | 少妇久久久久久人妻无码 | 中文字幕久久久久人妻 | 久久精品人妻少妇一区二区三区 | 国产成人综合美国十次 | 日日噜噜噜噜夜夜爽亚洲精品 | 天堂久久天堂av色综合 | 人妻人人添人妻人人爱 | 国产精品99久久精品爆乳 | 国内精品人妻无码久久久影院 | 亚洲精品中文字幕久久久久 | 131美女爱做视频 | 亚洲啪av永久无码精品放毛片 | 精品一二三区久久aaa片 | 丰满妇女强制高潮18xxxx | 未满成年国产在线观看 | 久久无码专区国产精品s | 3d动漫精品啪啪一区二区中 | 无码人妻丰满熟妇区毛片18 | 7777奇米四色成人眼影 | a片免费视频在线观看 | 日本大香伊一区二区三区 | 国产口爆吞精在线视频 | 老子影院午夜伦不卡 | 亚洲精品欧美二区三区中文字幕 | 国内精品人妻无码久久久影院 | 日韩 欧美 动漫 国产 制服 | 黑人玩弄人妻中文在线 | 无套内射视频囯产 | 亚洲 欧美 激情 小说 另类 | 中文字幕av日韩精品一区二区 | 激情内射亚州一区二区三区爱妻 | 色偷偷人人澡人人爽人人模 | 日本大乳高潮视频在线观看 | 无码人妻精品一区二区三区下载 | 高潮毛片无遮挡高清免费视频 | 老子影院午夜伦不卡 | 18禁黄网站男男禁片免费观看 | 国产精品99爱免费视频 | 亚洲伊人久久精品影院 | 精品一区二区三区无码免费视频 | 成人精品视频一区二区 | 午夜性刺激在线视频免费 | 女人被爽到呻吟gif动态图视看 | 激情亚洲一区国产精品 | 亚洲成a人片在线观看无码3d | 国内少妇偷人精品视频免费 | 久久zyz资源站无码中文动漫 | 精品无码一区二区三区的天堂 | 久久久久成人片免费观看蜜芽 | 亚洲国产成人av在线观看 | 国产区女主播在线观看 | 小泽玛莉亚一区二区视频在线 | 久久久久国色av免费观看性色 | 亚洲高清偷拍一区二区三区 | 亚洲精品欧美二区三区中文字幕 | 香港三级日本三级妇三级 | 亚洲精品久久久久avwww潮水 | 色五月五月丁香亚洲综合网 | 国产女主播喷水视频在线观看 | 大胆欧美熟妇xx | 六十路熟妇乱子伦 | 麻豆人妻少妇精品无码专区 | 亚洲阿v天堂在线 | 99精品久久毛片a片 | 狠狠色噜噜狠狠狠7777奇米 | 3d动漫精品啪啪一区二区中 | 波多野结衣 黑人 | 国产精品久免费的黄网站 | 中文字幕乱码亚洲无线三区 | 中文字幕无码av波多野吉衣 | 亚洲成a人片在线观看无码3d | 久久99精品久久久久久 | 六月丁香婷婷色狠狠久久 | 国产真实伦对白全集 | 中文字幕无码乱人伦 | 欧美老人巨大xxxx做受 | 国产乱码精品一品二品 | 国产精品久久久久久久9999 | 亚洲精品国偷拍自产在线麻豆 | 久久www免费人成人片 | 无码一区二区三区在线观看 | 成人无码精品一区二区三区 | 荫蒂被男人添的好舒服爽免费视频 | 久久精品丝袜高跟鞋 | 东京热男人av天堂 | 真人与拘做受免费视频 | 欧美老熟妇乱xxxxx | 内射巨臀欧美在线视频 | 久久亚洲中文字幕精品一区 | 亚洲啪av永久无码精品放毛片 | 中文字幕乱妇无码av在线 | 大色综合色综合网站 | 免费男性肉肉影院 | 人妻无码αv中文字幕久久琪琪布 | 亚洲自偷自拍另类第1页 | 国产熟女一区二区三区四区五区 | 日本大香伊一区二区三区 | 成人无码精品1区2区3区免费看 | 无码精品国产va在线观看dvd | 亚洲国产av美女网站 | 丰满肥臀大屁股熟妇激情视频 | 性开放的女人aaa片 | 久久无码中文字幕免费影院蜜桃 | 日日天干夜夜狠狠爱 | 老司机亚洲精品影院 | 奇米影视7777久久精品 | 人妻aⅴ无码一区二区三区 | 国精产品一品二品国精品69xx | 天天摸天天透天天添 | 2020久久超碰国产精品最新 | 亚洲 高清 成人 动漫 | 国产超碰人人爽人人做人人添 | 精品少妇爆乳无码av无码专区 | 久久综合狠狠综合久久综合88 | 欧美激情内射喷水高潮 | 国产精品内射视频免费 | 亚欧洲精品在线视频免费观看 | 初尝人妻少妇中文字幕 | 日日碰狠狠丁香久燥 | 曰韩少妇内射免费播放 | 国内少妇偷人精品视频免费 | 亚洲人交乣女bbw | 无遮挡国产高潮视频免费观看 | 人妻少妇精品久久 | 永久黄网站色视频免费直播 | a在线亚洲男人的天堂 | 无码av免费一区二区三区试看 | 一本色道久久综合亚洲精品不卡 | 伊人久久大香线焦av综合影院 | 国内精品人妻无码久久久影院蜜桃 | 亚洲人成人无码网www国产 | 精品成人av一区二区三区 | 日本大香伊一区二区三区 | 无码人妻久久一区二区三区不卡 | 亚洲欧美国产精品久久 | 性生交大片免费看l | 日日鲁鲁鲁夜夜爽爽狠狠 | 久久亚洲日韩精品一区二区三区 | 亚洲另类伦春色综合小说 | 国产精品无码永久免费888 | 永久黄网站色视频免费直播 | 精品亚洲成av人在线观看 | 55夜色66夜色国产精品视频 | 国产成人亚洲综合无码 | 亚洲aⅴ无码成人网站国产app | 久久综合九色综合97网 | 亚洲 激情 小说 另类 欧美 | 丰满诱人的人妻3 | 婷婷丁香五月天综合东京热 | 中文无码精品a∨在线观看不卡 | 天天躁日日躁狠狠躁免费麻豆 | 欧美国产日韩亚洲中文 | 内射老妇bbwx0c0ck | 色综合久久久无码网中文 | 亚洲va中文字幕无码久久不卡 | 国产亚洲tv在线观看 | 国产午夜精品一区二区三区嫩草 | 中文亚洲成a人片在线观看 | 最新版天堂资源中文官网 | 国产免费无码一区二区视频 | 久久午夜夜伦鲁鲁片无码免费 | 免费无码一区二区三区蜜桃大 | 久久精品女人天堂av免费观看 | www一区二区www免费 | 欧美性猛交xxxx富婆 | 亚洲の无码国产の无码影院 | 亚洲精品国偷拍自产在线观看蜜桃 | 日本大香伊一区二区三区 | 欧美大屁股xxxxhd黑色 | 中国女人内谢69xxxx | 久久精品中文字幕一区 | 夜夜影院未满十八勿进 | 天堂а√在线地址中文在线 | 亚洲国产精品美女久久久久 | 无码成人精品区在线观看 | 东京无码熟妇人妻av在线网址 | 国内精品一区二区三区不卡 | 欧美日韩一区二区三区自拍 | 九九久久精品国产免费看小说 | 亚洲人成人无码网www国产 | 西西人体www44rt大胆高清 | 色偷偷av老熟女 久久精品人妻少妇一区二区三区 | 亚洲小说图区综合在线 | 亚洲大尺度无码无码专区 | 免费人成在线观看网站 | 久久综合给合久久狠狠狠97色 | 国产在线精品一区二区高清不卡 | 99久久久国产精品无码免费 | 色偷偷人人澡人人爽人人模 | 国产国语老龄妇女a片 | 午夜福利不卡在线视频 | 网友自拍区视频精品 | av无码电影一区二区三区 | 国产精品人人爽人人做我的可爱 | 成人无码视频在线观看网站 | 久久人妻内射无码一区三区 | 国产精品人人妻人人爽 | 波多野结衣乳巨码无在线观看 | 国精品人妻无码一区二区三区蜜柚 | 国产乡下妇女做爰 | 欧美国产亚洲日韩在线二区 | 亚洲精品一区三区三区在线观看 | 夜夜夜高潮夜夜爽夜夜爰爰 | 精品一二三区久久aaa片 | 亚洲中文无码av永久不收费 | 久久国产精品偷任你爽任你 | 无遮挡啪啪摇乳动态图 | 日韩精品a片一区二区三区妖精 | 福利一区二区三区视频在线观看 | 久久国内精品自在自线 | 成人精品天堂一区二区三区 | 一本大道伊人av久久综合 | 亚洲中文字幕久久无码 | 日本大香伊一区二区三区 | 日韩视频 中文字幕 视频一区 | 98国产精品综合一区二区三区 | 无码帝国www无码专区色综合 | 男女性色大片免费网站 | 男女下面进入的视频免费午夜 | 亚洲va中文字幕无码久久不卡 | 天天爽夜夜爽夜夜爽 | 欧美freesex黑人又粗又大 | 国产超级va在线观看视频 | 亚洲一区二区三区 | 人妻有码中文字幕在线 | 综合人妻久久一区二区精品 | 国产小呦泬泬99精品 | 成人综合网亚洲伊人 | 久久亚洲日韩精品一区二区三区 | 宝宝好涨水快流出来免费视频 | 鲁一鲁av2019在线 | 国产偷抇久久精品a片69 | 亚洲中文字幕va福利 | 国产成人无码av在线影院 | 亚洲成熟女人毛毛耸耸多 | 国产一区二区三区日韩精品 | 亚洲精品一区国产 | www国产亚洲精品久久久日本 | 国内揄拍国内精品人妻 | 成年美女黄网站色大免费全看 | 国产成人无码午夜视频在线观看 | 人人爽人人爽人人片av亚洲 | 夜夜影院未满十八勿进 | 成 人 免费观看网站 | 99久久亚洲精品无码毛片 | 久久99热只有频精品8 | 亚洲无人区午夜福利码高清完整版 | 亚洲色无码一区二区三区 | 亚洲国产成人av在线观看 | 国产精品a成v人在线播放 | 亚洲精品午夜无码电影网 | 久久这里只有精品视频9 | 久久99久久99精品中文字幕 | 一本色道婷婷久久欧美 | 国产农村乱对白刺激视频 | a片免费视频在线观看 | 亚欧洲精品在线视频免费观看 | 久久久久人妻一区精品色欧美 | 亚洲精品一区二区三区四区五区 | 国产精品怡红院永久免费 | 欧美 亚洲 国产 另类 | 一本色道婷婷久久欧美 | 国产乱人伦av在线无码 | 无码人妻丰满熟妇区毛片18 | 欧美性生交xxxxx久久久 | 国模大胆一区二区三区 | 亚洲欧美精品伊人久久 | 欧美黑人巨大xxxxx | 午夜精品一区二区三区在线观看 | 一区二区三区乱码在线 | 欧洲 | 中文精品无码中文字幕无码专区 | 一本久久伊人热热精品中文字幕 | 在线欧美精品一区二区三区 | 色一情一乱一伦一视频免费看 | 人妻天天爽夜夜爽一区二区 | 国产亚洲人成在线播放 | 久久久中文久久久无码 | 国产乱人伦av在线无码 | 久久久www成人免费毛片 | 18无码粉嫩小泬无套在线观看 | 国产国语老龄妇女a片 | 狠狠亚洲超碰狼人久久 | 最新国产乱人伦偷精品免费网站 | 国产午夜福利100集发布 | 乱人伦中文视频在线观看 | 亚洲 激情 小说 另类 欧美 | 中文字幕无码视频专区 | 搡女人真爽免费视频大全 | 亚洲 a v无 码免 费 成 人 a v | 四虎国产精品一区二区 | 最新国产麻豆aⅴ精品无码 | 蜜臀av无码人妻精品 | 久久久久久九九精品久 | 丝袜足控一区二区三区 | 1000部啪啪未满十八勿入下载 | 国产精品多人p群无码 | 亚洲精品国产品国语在线观看 | 最新版天堂资源中文官网 | 色婷婷综合中文久久一本 | 亚洲综合伊人久久大杳蕉 | 欧美老妇与禽交 | 国产精品va在线观看无码 | 国产激情精品一区二区三区 | 一个人看的www免费视频在线观看 | 亚洲人成无码网www | 中文字幕亚洲情99在线 | 日韩精品a片一区二区三区妖精 | 国产免费无码一区二区视频 | 好男人社区资源 | 亚洲国产一区二区三区在线观看 | 人人爽人人澡人人高潮 | 亚欧洲精品在线视频免费观看 | 欧美刺激性大交 | 四虎国产精品免费久久 | 婷婷六月久久综合丁香 | 国产人妻精品一区二区三区 | 亚洲国产成人av在线观看 | 中文字幕人妻无码一区二区三区 | 在线播放无码字幕亚洲 | 麻豆国产丝袜白领秘书在线观看 | 久久亚洲精品成人无码 | 亚洲无人区一区二区三区 | 自拍偷自拍亚洲精品被多人伦好爽 | 免费国产黄网站在线观看 | 99久久精品无码一区二区毛片 | 人人妻人人藻人人爽欧美一区 | 欧美日韩亚洲国产精品 | 欧美人与善在线com | 精品亚洲韩国一区二区三区 | 亚洲精品国产精品乱码不卡 | 性色av无码免费一区二区三区 | 国产亚洲精品久久久ai换 | 97夜夜澡人人双人人人喊 | 99久久精品国产一区二区蜜芽 | 亚洲成av人片天堂网无码】 | 亚洲一区二区观看播放 | 少妇高潮一区二区三区99 | 国产成人av免费观看 | 一本大道伊人av久久综合 | 国产手机在线αⅴ片无码观看 | 亚洲熟悉妇女xxx妇女av | 好爽又高潮了毛片免费下载 | 国产美女极度色诱视频www | 亚洲成在人网站无码天堂 | 国产做国产爱免费视频 | 丰满人妻精品国产99aⅴ | 亚洲色大成网站www国产 | 久久午夜无码鲁丝片秋霞 | 欧美喷潮久久久xxxxx | 真人与拘做受免费视频 | 欧美丰满熟妇xxxx | 撕开奶罩揉吮奶头视频 | 一本久久a久久精品vr综合 | 精品厕所偷拍各类美女tp嘘嘘 | 成在人线av无码免观看麻豆 | 免费人成在线视频无码 | 好男人www社区 | 精品一区二区不卡无码av | 亚洲日本一区二区三区在线 | 亚洲欧美综合区丁香五月小说 | 亚洲综合无码一区二区三区 | 欧美黑人巨大xxxxx | 亚洲精品无码人妻无码 | 日韩成人一区二区三区在线观看 | 欧洲美熟女乱又伦 | 欧美丰满熟妇xxxx性ppx人交 | 亚洲中文无码av永久不收费 | 狠狠综合久久久久综合网 | 日产精品高潮呻吟av久久 | 一本色道久久综合亚洲精品不卡 | 美女极度色诱视频国产 | 我要看www免费看插插视频 | 国产美女精品一区二区三区 | 2020最新国产自产精品 | 岛国片人妻三上悠亚 | 亚洲中文无码av永久不收费 | 国产婷婷色一区二区三区在线 | 荫蒂被男人添的好舒服爽免费视频 | 永久黄网站色视频免费直播 | 亚洲日韩中文字幕在线播放 | 永久免费观看美女裸体的网站 | 日韩人妻少妇一区二区三区 | 国产精品福利视频导航 | 亚洲日韩乱码中文无码蜜桃臀网站 | 99久久婷婷国产综合精品青草免费 | 亚洲爆乳精品无码一区二区三区 | 黑人玩弄人妻中文在线 | 宝宝好涨水快流出来免费视频 | 55夜色66夜色国产精品视频 | 99riav国产精品视频 | 少妇高潮一区二区三区99 | 丰满人妻翻云覆雨呻吟视频 | 麻豆国产人妻欲求不满谁演的 | 成人无码视频在线观看网站 | 国产高潮视频在线观看 | 久久国内精品自在自线 | 综合人妻久久一区二区精品 | 亚洲s色大片在线观看 | 色综合久久久无码网中文 | 成人精品天堂一区二区三区 | 无码人妻少妇伦在线电影 | 日韩视频 中文字幕 视频一区 | 波多野结衣乳巨码无在线观看 | 婷婷综合久久中文字幕蜜桃三电影 | 黑人玩弄人妻中文在线 | 日本精品人妻无码77777 天堂一区人妻无码 | 久久久久se色偷偷亚洲精品av | 中文字幕无码免费久久9一区9 | 欧美第一黄网免费网站 | 学生妹亚洲一区二区 | 亚洲日韩av一区二区三区中文 | 久久综合香蕉国产蜜臀av | 无码人妻精品一区二区三区不卡 | 日本乱人伦片中文三区 | 中文精品久久久久人妻不卡 | 无码吃奶揉捏奶头高潮视频 | 欧美精品无码一区二区三区 | 夜夜影院未满十八勿进 | 午夜福利不卡在线视频 | 午夜精品一区二区三区的区别 | 又大又硬又黄的免费视频 | 国产亚洲视频中文字幕97精品 | 少女韩国电视剧在线观看完整 | 沈阳熟女露脸对白视频 | 久久无码人妻影院 | 天堂а√在线中文在线 | 无码免费一区二区三区 | 国产av剧情md精品麻豆 | 精品亚洲成av人在线观看 | 无码一区二区三区在线 | 久久精品国产大片免费观看 | 国产精品igao视频网 | 99久久精品无码一区二区毛片 | 激情综合激情五月俺也去 | 九九在线中文字幕无码 | 久久国产劲爆∧v内射 | 撕开奶罩揉吮奶头视频 | 任你躁国产自任一区二区三区 | 大乳丰满人妻中文字幕日本 | 在线精品亚洲一区二区 | 国语精品一区二区三区 | 午夜福利一区二区三区在线观看 | 国产偷抇久久精品a片69 | 在教室伦流澡到高潮hnp视频 | 亚洲中文字幕av在天堂 | a在线观看免费网站大全 | av在线亚洲欧洲日产一区二区 | 日本va欧美va欧美va精品 | 无套内谢的新婚少妇国语播放 | 丰满岳乱妇在线观看中字无码 | 伊人久久大香线蕉av一区二区 | 特级做a爰片毛片免费69 | 国产亚洲精品久久久久久 | 日韩成人一区二区三区在线观看 | 国内精品九九久久久精品 | 中文字幕av伊人av无码av | 亚洲午夜无码久久 | 亚洲综合无码久久精品综合 | 妺妺窝人体色www婷婷 | 无码帝国www无码专区色综合 | 亚洲中文字幕乱码av波多ji | 大肉大捧一进一出好爽视频 | 又大又硬又黄的免费视频 | 亚洲综合另类小说色区 | 夜先锋av资源网站 | 国内揄拍国内精品人妻 | 女人被男人躁得好爽免费视频 | 亚洲国产成人a精品不卡在线 | 久久婷婷五月综合色国产香蕉 | 国产真实夫妇视频 | 人妻夜夜爽天天爽三区 | 亚洲综合伊人久久大杳蕉 | 欧美肥老太牲交大战 | 成人欧美一区二区三区黑人免费 | 鲁鲁鲁爽爽爽在线视频观看 | 水蜜桃色314在线观看 | 久久人人爽人人爽人人片av高清 | 亚洲成a人一区二区三区 | 高潮毛片无遮挡高清免费视频 | 国产精品久久久久久久影院 | 亚洲精品国产第一综合99久久 | 精品久久8x国产免费观看 | 国产色精品久久人妻 | 亚洲欧美国产精品专区久久 | 亚洲一区二区三区 | 97久久国产亚洲精品超碰热 | 国产精品久久久久无码av色戒 | 亚洲乱码中文字幕在线 | 欧洲精品码一区二区三区免费看 | 日本一卡二卡不卡视频查询 | 任你躁国产自任一区二区三区 | av无码久久久久不卡免费网站 | 国产成人一区二区三区别 | 久久久久国色av免费观看性色 | 亚洲一区二区三区播放 | 国产网红无码精品视频 | 丰满护士巨好爽好大乳 | 色一情一乱一伦一视频免费看 | 激情爆乳一区二区三区 | 噜噜噜亚洲色成人网站 | 成人一在线视频日韩国产 | 性做久久久久久久免费看 | 欧美变态另类xxxx | 久久无码专区国产精品s | 荫蒂被男人添的好舒服爽免费视频 | 日韩av激情在线观看 | 久久久精品国产sm最大网站 | 亚洲区欧美区综合区自拍区 | 美女黄网站人色视频免费国产 | 日本大乳高潮视频在线观看 | 无码av最新清无码专区吞精 | 国色天香社区在线视频 | 国产激情精品一区二区三区 | 免费男性肉肉影院 | 乱码午夜-极国产极内射 | 无码精品人妻一区二区三区av | 天天综合网天天综合色 | 久久久精品欧美一区二区免费 | 最近中文2019字幕第二页 | 国产免费久久久久久无码 | 性做久久久久久久久 | 在线看片无码永久免费视频 | 熟女少妇在线视频播放 | 婷婷综合久久中文字幕蜜桃三电影 | 欧美freesex黑人又粗又大 | 国产av一区二区三区最新精品 | 精品无码一区二区三区的天堂 | 欧美高清在线精品一区 | 狠狠综合久久久久综合网 | 性生交片免费无码看人 | 亚洲欧洲日本综合aⅴ在线 | 亚洲大尺度无码无码专区 | 久久精品无码一区二区三区 | 精品国产一区av天美传媒 | 亚洲欧美日韩综合久久久 | 国内精品人妻无码久久久影院 | 国产亚洲精品久久久闺蜜 | 国产免费无码一区二区视频 | 小鲜肉自慰网站xnxx | 日韩精品一区二区av在线 | 国产成人人人97超碰超爽8 | 久久久久久久女国产乱让韩 | 亚洲熟妇色xxxxx亚洲 | 人妻夜夜爽天天爽三区 | 久久天天躁夜夜躁狠狠 | 性欧美videos高清精品 | 国产精品永久免费视频 | 少妇人妻偷人精品无码视频 | 人人妻人人澡人人爽人人精品 | 丰满少妇熟乱xxxxx视频 | 中文字幕亚洲情99在线 | 久久99热只有频精品8 | 无码av免费一区二区三区试看 | 久久久久久国产精品无码下载 | 午夜福利不卡在线视频 | 久久99精品国产.久久久久 | www国产精品内射老师 | 狠狠噜狠狠狠狠丁香五月 | 亚洲精品一区国产 | 老司机亚洲精品影院无码 | 无遮挡啪啪摇乳动态图 | 夜夜高潮次次欢爽av女 | 日本饥渴人妻欲求不满 | 无码任你躁久久久久久久 | 亚洲国产日韩a在线播放 | 国产精品久久久久久亚洲毛片 | 亚洲精品国产精品乱码视色 | 天堂亚洲免费视频 | 麻豆果冻传媒2021精品传媒一区下载 | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | 激情内射日本一区二区三区 | 无码人妻丰满熟妇区五十路百度 | 国产熟女一区二区三区四区五区 | 国产成人精品无码播放 | 亚洲欧洲日本无在线码 | 亚洲欧洲无卡二区视頻 | 18精品久久久无码午夜福利 | 亚洲精品国产精品乱码不卡 | 国产亚洲精品精品国产亚洲综合 | 国产亚洲视频中文字幕97精品 | 成熟女人特级毛片www免费 | 国产免费无码一区二区视频 | 亚洲日本一区二区三区在线 | 色爱情人网站 | 大肉大捧一进一出好爽视频 | 国产农村乱对白刺激视频 | 免费观看的无遮挡av | 四虎国产精品一区二区 | 精品国精品国产自在久国产87 | 免费国产成人高清在线观看网站 | 久久综合给合久久狠狠狠97色 | 日产精品99久久久久久 | 亚洲最大成人网站 | 纯爱无遮挡h肉动漫在线播放 | 国产亚洲人成在线播放 | 久久午夜夜伦鲁鲁片无码免费 | 免费观看又污又黄的网站 | 欧洲熟妇精品视频 | 国产福利视频一区二区 | 无遮挡啪啪摇乳动态图 | 国产精品-区区久久久狼 | 亚洲中文字幕成人无码 | 午夜无码人妻av大片色欲 | 久久精品国产日本波多野结衣 | 日韩人妻无码中文字幕视频 | 99久久精品国产一区二区蜜芽 | 欧美人与善在线com | 欧美成人高清在线播放 | 国产亚洲tv在线观看 | 一本久久a久久精品vr综合 | 久久综合激激的五月天 | 精品一区二区不卡无码av | 亚洲娇小与黑人巨大交 | 四虎4hu永久免费 | 成人无码视频在线观看网站 | 欧美人与禽zoz0性伦交 | 天天摸天天透天天添 | 4hu四虎永久在线观看 | 日本大乳高潮视频在线观看 | 成人精品一区二区三区中文字幕 | 黑人巨大精品欧美黑寡妇 | 男女爱爱好爽视频免费看 | 亚洲 欧美 激情 小说 另类 | 麻豆果冻传媒2021精品传媒一区下载 | 国产精品视频免费播放 | 成人无码视频在线观看网站 | 夫妻免费无码v看片 | 国产成人精品久久亚洲高清不卡 | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 日日干夜夜干 | 国产手机在线αⅴ片无码观看 | 美女张开腿让人桶 | 人人妻人人澡人人爽人人精品浪潮 | 国产精品久久久久久亚洲影视内衣 | 乱码午夜-极国产极内射 | 欧美喷潮久久久xxxxx | 狠狠色丁香久久婷婷综合五月 | 久久99精品久久久久久 | 国产激情综合五月久久 | 波多野结衣一区二区三区av免费 | 欧美日韩一区二区三区自拍 | 97久久精品无码一区二区 | 色老头在线一区二区三区 | 青春草在线视频免费观看 | 爽爽影院免费观看 | 亚洲熟悉妇女xxx妇女av | 300部国产真实乱 | 99riav国产精品视频 | 免费国产成人高清在线观看网站 | 国产情侣作爱视频免费观看 | 亚洲欧洲日本综合aⅴ在线 | 国产人妻精品一区二区三区 | 日韩欧美成人免费观看 | 成人无码精品一区二区三区 | 东京一本一道一二三区 | 成年女人永久免费看片 | 亚洲精品鲁一鲁一区二区三区 | 乱码午夜-极国产极内射 | 中文字幕无码免费久久99 | 蜜臀aⅴ国产精品久久久国产老师 | 欧美精品国产综合久久 | a在线亚洲男人的天堂 | 欧美真人作爱免费视频 | 男女猛烈xx00免费视频试看 | 四虎国产精品免费久久 | 影音先锋中文字幕无码 | 婷婷五月综合缴情在线视频 | 成人三级无码视频在线观看 | 久久zyz资源站无码中文动漫 | 波多野结衣aⅴ在线 | 国产成人亚洲综合无码 | 亚洲熟妇色xxxxx亚洲 | 国产精品va在线观看无码 | www一区二区www免费 | 久9re热视频这里只有精品 | 色综合久久久无码网中文 | 亚洲日韩中文字幕在线播放 | 国产精品亚洲专区无码不卡 | 天海翼激烈高潮到腰振不止 | 国产网红无码精品视频 | 99久久人妻精品免费一区 | 亚洲中文字幕无码一久久区 | 亚洲精品成人福利网站 | 成 人 免费观看网站 | 高清无码午夜福利视频 | 国产福利视频一区二区 | 国产成人一区二区三区在线观看 | 国产免费无码一区二区视频 | 久久国产精品偷任你爽任你 | a片免费视频在线观看 | 国产精品亚洲lv粉色 | 亚洲午夜无码久久 | 国产精品毛多多水多 | 日韩精品无码一本二本三本色 | 国产亚洲精品久久久久久大师 | 国产精品欧美成人 | 亚洲s码欧洲m码国产av | 亚洲一区二区三区含羞草 | 最新国产麻豆aⅴ精品无码 | 中文字幕无码免费久久9一区9 | 欧美人与物videos另类 | 国产人妻大战黑人第1集 | 亚无码乱人伦一区二区 | 美女毛片一区二区三区四区 | 久久国产精品萌白酱免费 | 在线欧美精品一区二区三区 | 久久久精品456亚洲影院 | 亚洲精品无码人妻无码 | 婷婷丁香五月天综合东京热 | 成人一区二区免费视频 | 日韩欧美中文字幕公布 | www国产精品内射老师 | 又色又爽又黄的美女裸体网站 | 伊人久久大香线蕉亚洲 | 久久五月精品中文字幕 | 无码国内精品人妻少妇 | 全黄性性激高免费视频 | 精品人妻中文字幕有码在线 | 欧美高清在线精品一区 | 7777奇米四色成人眼影 | 成人一在线视频日韩国产 | 国产日产欧产精品精品app | 丝袜足控一区二区三区 | 久久婷婷五月综合色国产香蕉 | 一本大道伊人av久久综合 | 国产亚洲精品久久久久久国模美 | 一本精品99久久精品77 | 国色天香社区在线视频 | 在线欧美精品一区二区三区 | 久久国产精品精品国产色婷婷 | 日本xxxx色视频在线观看免费 | 中文字幕无码热在线视频 | 精品国产aⅴ无码一区二区 | 免费人成在线观看网站 | 丝袜美腿亚洲一区二区 | 国产亲子乱弄免费视频 | 老司机亚洲精品影院 | 蜜桃无码一区二区三区 | 东京热无码av男人的天堂 | 蜜桃av抽搐高潮一区二区 |