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

ECMAScript 2024 正式發布,新特性一覽!

開發 前端
通常,當創建一個新的 Promise 時,會傳遞一個執行器函數給 Promise 構造函數,這個執行器函數接收兩個參數:resolve 和 reject 。但在某些情況下,可能想要在 Promise 創建之后仍然能夠訪問到這兩個函數。這就是 Promise.withResolvers() 的用武之地。

2024 年 6 月 26 日,第 127 屆 ECMA 大會正式批準了 ECMAScript 2024 語言規范,這意味著它現在正式成為最新 ECMAScript 標準。

圖片圖片

下面就來看看 ECMAScript 2024 都有哪些新特性吧!

  • Promise.withResolvers()
  • Object.groupBy / Map.groupBy
  • String:isWellFormed() / toWellFormed()
  • ArrayBuffer:resize / transfer
  • Atomics.waitAsync()
  • 正則表達式 v 標志

Promise.withResolvers()

Promise.withResolvers() 允許創建一個新的 Promise,并同時獲得 resolve 和 reject 函數。

Promise.withResolvers() 等同于以下代碼,不過代碼會更簡潔:

let resolve, reject;
const promise = new Promise((res, rej) => {
  resolve = res;
  reject = rej;
});

通常,當創建一個新的 Promise 時,會傳遞一個執行器函數給 Promise 構造函數,這個執行器函數接收兩個參數:resolve 和 reject 。但在某些情況下,可能想要在 Promise 創建之后仍然能夠訪問到這兩個函數。這就是 Promise.withResolvers() 的用武之地。

使用 Promise.withResolvers() 的例子:

const { promise, resolve, reject } = Promise.withResolvers();  
  
// 在這里可以使用 resolve 和 reject 函數  
setTimeout(() => resolve('成功!'), 8000);  
  
promise.then(value => {  
  console.log(value); // 輸出: 成功!  
});

使用 Promise.withResolvers() 關鍵的區別在于resolve 和 reject函數現在與 Promise 本身處于同一作用域,而不是在執行器中被創建和一次性使用。這可能使得一些更高級的用例成為可能,例如在重復事件中重用它們,特別是在處理流和隊列時。這通常也意味著相比在執行器內包裝大量邏輯,嵌套會更少。這個方法對于那些需要更細粒度控制 Promise 的狀態,或者在 Promise 創建后仍然需要訪問 resolve 和 reject 函數的場景來說非常有用。

瀏覽器支持:

圖片圖片

Object.groupBy() / Map.groupBy()

Object.groupBy() 和 Map.groupBy() 方法用于數組分組。

假設有一個由表示水果的對象組成的數組,需要按照顏色進行分組。以前可以使用forEach循環來實現,代碼如下:

const fruits = [  
  { name: "Apple", color: "red" },  
  { name: "Banana", color: "yellow" },  
  { name: "Cherry", color: "red" },  
  { name: "Lemon", color: "yellow" },  
  { name: "Grape", color: "purple" },  
];

const fruitsByColor = {};  

fruits.forEach(fruit => {  
  const color = fruit.color;  
  if (!fruitsByColor[color]) {  
    fruitsByColor[color] = [];  
  }  
  fruitsByColor[color].push(fruit);  
}); 

console.log(fruitsByColor);

輸出結果如下:

圖片圖片

也可以使用reduce方法:

const fruitsByColor = fruits.reduce((acc, fruit) => {  
  const color = fruit.color;  
  if (!acc[color]) {  
    acc[color] = [];  
  }  
  acc[color].push(fruit);  
  return acc;  
}, {});

無論哪種方式,代碼都略顯繁瑣。每次都要檢查對象,看分組的 key 是否存在,如果不存在,則創建一個空數組,并將項目添加到該數組中。

Object.groupBy()

可以通過以下方式來使用新的Object.groupBy方法,代碼更簡潔:

const fruitsByColor = Object.groupBy(fruits, (fruit) => fruit.color);

需要注意,使用Object.groupBy方法返回一個沒有原型(即沒有繼承任何屬性和方法)的對象。這意味著該對象不會繼承Object.prototype上的任何屬性或方法,例如hasOwnProperty或toString等。雖然這樣做可以避免意外覆蓋Object.prototype上的屬性,但也意味著不能使用一些與對象相關的方法。

const fruitsByColor = Object.groupBy(fruits, (fruit) => fruit.color);
console.log(fruitsByColor.hasOwnProperty("red"));
// TypeError: fruitsByColor.hasOwnProperty is not a function

在調用Object.groupBy時,傳遞給它的回調函數應該返回一個字符串或 Symbol 類型的值。如果回調函數返回其他類型的值,它將被強制轉換為字符串。

瀏覽器支持:

圖片圖片

Map.groupBy()

Map.groupBy和Object.groupBy的功能一樣,只是返回的結果類型不同。Map.groupBy返回一個 Map 對象,而Object.groupBy返回一個普通對象。

const fruits = [  
  { name: "Apple", color: "red" },  
  { name: "Banana", color: "yellow" },  
  { name: "Cherry", color: "red" },  
  { name: "Lemon", color: "yellow" },  
  { name: "Grape", color: "purple" },  
];

const fruitsByColor = Map.groupBy(fruits, (fruit) => fruits.color);

這里根據水果顏色進行了分組,輸出結果如下:

圖片圖片

可以通過 Map 的 get 方法來來獲取分組分組結果:

fruitsByColor.get("red");
// [{"name": "Apple", "color": "red"}, {"name": "Cherry", "color": "red"}]

瀏覽器支持:

String:isWellFormed() / toWellFormed()

String.prototype.isWellFormed()

isWellFormed() 用于檢查一個 UTF-16 編碼的字符串是否包含孤立的代理項(即未與另一個代理項配對的高代理或低代理)。UTF-16使用代理對來表示Unicode中超過基本多文種平面的字符。一個有效的UTF-16字符串應該只包含正確配對的代理對或單獨的BMP字符。

下面來看一個例子

const strings = [
  // 單獨的前導代理
  "ab\uD800",
  "ab\uD800c",
  // 單獨的后尾代理
  "\uDFFFab",
  "c\uDFFFab",
  // 格式正確
  "abc",
  "ab\uD83D\uDE04c",
];

for (const str of strings) {
  console.log(str.isWellFormed());
}
// 輸出:
// false
// false
// false
// false
// true
// true

如果傳遞的字符串格式不正確, encodeURI 會拋出錯誤。可以通過使用 isWellFormed() 在將字符串傳遞給 encodeURI() 之前測試字符串來避免這種情況。

const illFormed = "https://example.com/search?q=\uD800";

try {
  encodeURI(illFormed);
} catch (e) {
  console.log(e); // URIError: URI malformed
}

if (illFormed.isWellFormed()) {
  console.log(encodeURI(illFormed));
} else {
  console.warn("Ill-formed strings encountered."); // Ill-formed strings encountered.
}

isWellFormed() 函數的使用場景主要包括以下幾種情況:

  • 數據驗證:當你從外部源(如用戶輸入、文件、網絡請求等)接收字符串時,你可能想要驗證這些字符串是否包含有效的UTF-16編碼。如果字符串包含孤立的代理項(即沒有配對的高代理或低代理),那么它可能不是有效的UTF-16字符串,這可能會導致后續處理時出錯。
  • 文本處理:在處理文本數據(如搜索、排序、轉換等)時,確保文本是有效編碼的非常重要。如果文本包含錯誤的編碼,那么處理結果可能會是不正確的或不可預測的。
  • 網絡傳輸:當你通過網絡發送或接收文本數據時,確保數據的編碼是正確的至關重要。錯誤的編碼可能導致數據在傳輸過程中被損壞,或者在接收端無法正確解析。
  • 數據庫存儲:在將文本數據存儲到數據庫之前,驗證其編碼的正確性也是一個好習慣。這可以確保數據的完整性和可讀性,并避免在后續查詢或處理時出現問題。
  • 用戶界面顯示:在用戶界面中顯示文本時,確保文本是有效編碼的也很重要。錯誤的編碼可能導致文本無法正確顯示,或者顯示出不正確的字符。

瀏覽器支持:

圖片圖片

String.prototype.toWellFormed()

toWellFormed() 方法返回一個字符串,其中該字符串的所有單獨代理項都被替換為 Unicode 替換字符 U+FFFD。

toWellFormed() 迭代字符串的碼元,并將任何單獨代理項替換為 Unicode 替換字符 U+FFFD。這確保了返回的字符串格式正確并可用于期望正確格式字符串的函數,比如 encodeURI。由于引擎能夠直接訪問字符串的內部表示,與自定義實現相比 toWellFormed() 更高效。

const strings = [
  // 單獨的前導代理
  "ab\uD800",
  "ab\uD800c",
  // 單獨的后尾代理
  "\uDFFFab",
  "c\uDFFFab",
  // 格式正確
  "abc",
  "ab\uD83D\uDE04c",
];

for (const str of strings) {
  console.log(str.toWellFormed());
}
// 輸出:
// "ab?"
// "ab?c"
// "?ab"
// "c?ab"
// "abc"
// "ab??c"

如果傳遞的字符串格式不正確, encodeURI 會拋出錯誤。可以先通過使用 toWellFormed() 將字符串轉換為格式正確的字符串來避免這種情況。

const illFormed = "https://example.com/search?q=\uD800";

try {
  encodeURI(illFormed);
} catch (e) {
  console.log(e); // URIError: URI malformed
}

console.log(encodeURI(illFormed.toWellFormed())); // "https://example.com/search?q=%EF%BF%BD"

瀏覽器支持:

圖片圖片

ArrayBuffer:resize / transfer

ArrayBuffer.prototype.resize

ArrayBuffer 實例的 resize() 方法將 ArrayBuffer 調整為指定的大小,以字節為單位,前提是該 ArrayBuffer 是可調整大小的并且新的大小小于或等于該 ArrayBuffer 的 maxByteLength。

const buffer = new ArrayBuffer(8, { maxByteLength: 16 });

console.log(buffer.byteLength); // 8

if (buffer.resizable) {
  console.log("緩沖區大小是可調整的!");
  buffer.resize(12);
}

注意:

  • 如果 ArrayBuffer 已分離或不可調整大小,則拋出該錯誤。
  • 如果 newLength 大于該 ArrayBuffer 的 maxByteLength,則拋出該錯誤。

瀏覽器支持:

ArrayBuffer.prototype.transfer

transfer() 方法執行與結構化克隆算法相同的操作。它將當前 ArrayBuffer 的字節復制到一個新的 ArrayBuffer 對象中,然后分離當前 ArrayBuffer 對象,保留了當前 ArrayBuffer 的大小可調整性。

// 創建一個 ArrayBuffer 并寫入一些字節
const buffer = new ArrayBuffer(8);
const view = new Uint8Array(buffer);
view[1] = 2;
view[7] = 4;

// 將緩沖區復制到另一個相同大小的緩沖區
const buffer2 = buffer.transfer();
console.log(buffer.detached); // true
console.log(buffer2.byteLength); // 8
const view2 = new Uint8Array(buffer2);
console.log(view2[1]); // 2
console.log(view2[7]); // 4

// 將緩沖區復制到一個更小的緩沖區
const buffer3 = buffer2.transfer(4);
console.log(buffer3.byteLength); // 4
const view3 = new Uint8Array(buffer3);
console.log(view3[1]); // 2
console.log(view3[7]); // undefined

// 將緩沖區復制到一個更大的緩沖區
const buffer4 = buffer3.transfer(8);
console.log(buffer4.byteLength); // 8
const view4 = new Uint8Array(buffer4);
console.log(view4[1]); // 2
console.log(view4[7]); // 0

// 已經分離,拋出 TypeError
buffer.transfer(); // TypeError: Cannot perform ArrayBuffer.prototype.transfer on a detached ArrayBuffer

瀏覽器支持:

圖片圖片

Atomics.waitAsync()

Atomics.waitAsync() 靜態方法異步等待共享內存的特定位置并返回一個 Promise。與 Atomics.wait() 不同,waitAsync 是非阻塞的且可用于主線程。

下面來看一個簡單的例子,給定一個共享的 Int32Array。

const sab = new SharedArrayBuffer(1024);
const int32 = new Int32Array(sab);

令一個讀取線程休眠并在位置 0 處等待,預期該位置的值為 0。result.value 將是一個 promise。

const result = Atomics.waitAsync(int32, 0, 0, 1000);
// { async: true, value: Promise {<pending>} }

在該讀取線程或另一個線程中,對內存位置 0 調用以令該 promise 解決為 "ok"。

Atomics.notify(int32, 0);
// { async: true, value: Promise {<fulfilled>: 'ok'} }

如果它沒有解決為 "ok",則共享內存該位置的值不符合預期(value 將是 "not-equal" 而不是一個 promise)或已經超時(該 promise 將解決為 "time-out")。

瀏覽器支持:

圖片圖片

正則表達式 v 標志

RegExp 的 v 標志是 u 標志的超集,并提供了另外兩個功能:

  • 字符串的 Unicode 屬性:通過 Unicode 屬性轉義,可以使用字符串的屬性。
const re = /^\p{RGI_Emoji}$/v;

// 匹配僅包含 1 個代碼點的表情符號:
re.test('?'); // '\u26BD'  // true

// 匹配由多個代碼點組成的表情符號:
re.test('??????'); // '\u{1F468}\u{1F3FE}\u200D\u2695\uFE0F' // true
  • 設置符號:允許在字符類之間進行集合操作。
const re = /[\p{White_Space}&&\p{ASCII}]/v;
re.test('\n'); // true
re.test('\u2028'); // false

那 u 標志是干什么的呢?

在 JavaScript 中,RegExp 對象的 u 標志(也稱為 Unicode 標志)是用于處理 Unicode 字符的。當在正則表達式字面量或構造函數中使用 u 標志時,它將改變正則表達式的行為,以便更準確地處理 Unicode 字符。以下是 u 標志的主要作用:

  1. 完整 Unicode 字符匹配: 在 Unicode 中,有些字符是由多個“代碼單元”(在 UTF-16 編碼中)組成的,如表情符號或某些特殊字符。不使用 u 標志時,正則表達式可能會將這些字符拆分成多個代碼單元,導致不正確的匹配。使用 u 標志后,正則表達式會將整個字符視為一個單位,從而進行更準確的匹配。
  2. Unicode 屬性的支持: 使用 u 標志的正則表達式可以訪問 Unicode 字符的屬性,如是否為大寫字母、是否為標點符號等。這可以通過在正則表達式中使用 \p{...} 和 \P{...} 序列來實現,其中 {...} 中是 Unicode 屬性的名稱。
  3. Unicode 字符類別的支持: 與 Unicode 屬性類似,使用 u 標志的正則表達式還可以支持 Unicode 字符類別,如 \p{Letter} 匹配任何字母字符,\p{Number} 匹配任何數字字符等。
  4. 點號(.)的新行為: 在默認情況下,正則表達式中的點號(.)不匹配換行符,但會匹配任何單個字符(在 UTF-16 編碼中是一個代碼單元)。但是,當使用 u 標志時,點號將匹配任何單個 Unicode 字符,包括那些由多個 UTF-16 代碼單元組成的字符。
  5. 對量詞和邊界斷言的改進: 使用 u 標志的正則表達式將改進對 Unicode 字符的量詞(如 *, +, ?, {n}, {n,}, {n,m})和邊界斷言(如 ^ 和 $)的處理。這確保了它們在整個 Unicode 字符上正確工作,而不是僅僅在 UTF-16 代碼單元上。
  6. 更準確的字符類: 使用 u 標志的正則表達式將更準確地解釋字符類,如 [a-z]。在不使用 u 標志時,這個字符類可能只匹配基本的拉丁字母。但是,使用 u 標志后,它將根據 Unicode 標準來匹配任何被視為“小寫字母”的字符,包括來自其他語言的小寫字母。

下面是一個使用 u 標志的例子:

const regex = /^\p{Letter}+$/u;  
console.log(regex.test('你好')); // 輸出:true  
console.log(regex.test('123')); // 輸出:false

在這個例子中,正則表達式 \p{Letter}+ 匹配一個或多個 Unicode 字母字符。由于 '你好' 包含兩個 Unicode 字母字符(即使它們在 UTF-16 編碼中由多個代碼單元組成),所以 regex.test('你好') 返回 true。而 '123' 不包含任何 Unicode 字母字符,所以 regex.test('123') 返回 false。

責任編輯:武曉燕 來源: 前端充電寶
相關推薦

2017-09-22 14:04:33

前端Node.js新特性

2010-05-11 13:50:26

Scala

2010-07-20 10:19:06

Wine 1.2

2010-07-27 09:34:15

FreeBSD 8.1

2023-09-21 11:12:25

2023-06-28 00:40:01

ECMAScriptWeakMapSymbol

2022-06-24 08:33:13

ECMAScriptjavaScript

2013-10-18 14:23:21

Ubuntu 13.1Kbuntu 13.1

2011-05-26 10:27:37

Fedora 15

2010-06-01 09:52:27

jQuery Tool

2013-06-13 10:14:33

2013-11-26 10:00:30

VMware Hori

2011-12-16 09:24:53

JavaSpring開源框架

2013-11-26 10:00:09

VMware Hori虛擬化Wmware

2025-04-16 00:00:02

2017-10-24 14:57:12

前端Vue 2.5新功能特性

2009-04-03 09:13:17

Eclipse插件EclipseEC2

2021-12-15 19:31:51

Windows 11操作系統微軟

2025-02-18 09:41:00

2011-10-19 08:52:59

Android 4.0新特性
點贊
收藏

51CTO技術棧公眾號

91精品国产免费久久久久久 | 日本丰满大乳奶| 国产真实乱人偷精品视频| 国产一区一区| 亚洲免费观看高清完整版在线观看熊| 欧洲美女7788成人免费视频| 国产sm调教视频| jvid一区二区三区| 国产精品不卡在线观看| 成人黄色免费片| 欧美日韩在线观看成人| 免费一级欧美片在线观看网站| 亚洲品质自拍视频网站| av一区观看| 国产69精品久久久久久久久久| 欧美丝袜足交| 在线观看一区二区视频| 日韩一本精品| 一区二区久久精品66国产精品 | 国产永久免费高清在线观看 | 亚洲精品国产综合久久| 韩国日本在线视频| 中中文字幕av在线| 国产丝袜在线精品| 91精品黄色| 亚洲性猛交富婆| 亚洲美女啪啪| 色综合色综合网色综合| www.涩涩爱| 蜜桃国内精品久久久久软件9| 日韩一级视频免费观看在线| 精品999在线| 校园春色亚洲| 亚洲高清三级视频| 国产又黄又爽免费视频| 国产精品一级伦理| 91视视频在线直接观看在线看网页在线看 | 国产在线免费看| 精品久久成人| 亚洲人成网站免费播放| 欧美熟妇精品一区二区蜜桃视频| 亚洲成人高清| 欧美性感一区二区三区| 成年人视频网站免费观看| 女同一区二区免费aⅴ| 亚洲视频资源在线| 亚洲综合第一| 日本免费在线视频| 国产人成亚洲第一网站在线播放 | 久久激情电影| 亚洲一区第一页| www.中文字幕av| 网曝91综合精品门事件在线| 日韩av网站电影| 捆绑凌虐一区二区三区| 欧美电影完整版在线观看| 亚洲第一综合天堂另类专| 国产精品91av| 99re6热只有精品免费观看| 日韩欧美国产一二三区| 免费在线观看日韩av| 香蕉大人久久国产成人av| 日韩一区二区三区四区五区六区 | 51亚洲精品| 日韩视频在线一区二区| 18禁一区二区三区| 九色丨蝌蚪丨成人| 亚洲精品视频在线观看视频| 特级西西人体wwwww| 亚洲va久久久噜噜噜久久| 亚洲欧美在线磁力| 免费看的黄色录像| 婷婷精品进入| 欧美激情第一页xxx| 成年免费在线观看| 久久裸体视频| 国产日韩欧美影视| 亚洲精品一区二区口爆| jvid福利写真一区二区三区| 你懂的视频在线一区二区| 国产精品一级伦理| 亚洲男同性视频| 日韩一级片免费视频| 亚洲欧洲自拍| 欧美日韩在线直播| 亚洲成人精品在线播放| 久本草在线中文字幕亚洲| 国产一区二区欧美日韩| 日韩一级片大全| 日韩香蕉视频| 国产精品一区二区三区免费视频| 自拍偷拍精品视频| 看片的网站亚洲| 国产伦精品一区二区三区四区视频| 青草久久伊人| 亚洲免费观看在线观看| 三级4级全黄60分钟| www.91精品| 国产午夜精品麻豆| 欧美精品99久久久| 免费看亚洲片| 不卡一区二区三区四区五区| 第一福利在线| 亚洲高清免费视频| 91视频这里只有精品| 懂色av一区二区| 精品国模在线视频| 99久久精品国产亚洲| 韩日av一区二区| 日本在线观看一区二区三区| 蜜臀av在线| 欧美人伦禁忌dvd放荡欲情| 丰满岳乱妇一区二区| 午夜av一区| 国产999精品| 成人免费视频国产| 国产精品久久夜| 久久久久人妻精品一区三寸| 中文字幕日韩高清在线| www国产91| 国产黄网在线观看| jlzzjlzz亚洲日本少妇| 一级黄色片播放| 成人久久网站| 亚洲女人天堂成人av在线| 九九热国产精品视频| 免费人成精品欧美精品 | 日本大胆欧美| 欧美影院在线播放| 可以免费看毛片的网站| 亚洲人成7777| 国产欧美精品一二三| 成人看的视频| 国产精品久久久久91| 亚洲av成人精品一区二区三区在线播放 | 欧美日韩视频在线第一区| 亚洲精品中文字幕在线播放| 国色天香一区二区| 99在线国产| 性欧美猛交videos| 日韩欧美一区在线观看| 夫妻性生活毛片| 久久99国产精品久久99| 亚洲精品一品区二品区三品区| 成人直播视频| 亚洲人成网站色ww在线| 无码免费一区二区三区| 91亚洲精华国产精华精华液| 免费看一级大黄情大片| 免费福利视频一区| 91chinesevideo永久地址| 免费观看a视频| 无吗不卡中文字幕| 182在线视频| 久久久久久亚洲精品杨幂换脸| 欧美成人dvd在线视频| 中文字幕乱码中文乱码51精品| 亚洲精品日韩在线| 亚洲综合成人av| 国产精品久久久久久久久免费樱桃| 一区二区三区视频网| 91视频久久| 成人黄色午夜影院| 91一区二区三区在线| 欧美va亚洲va在线观看蝴蝶网| 国产一级做a爱免费视频| av激情综合网| 日日摸天天爽天天爽视频| 三上亚洲一区二区| 亚洲精品免费一区二区三区| 国产蜜臀一区二区打屁股调教| 精品国产99国产精品| 国产精品乱子伦| 国产日韩欧美在线一区| 国产欧美精品一二三| 一区免费视频| 日本在线播放不卡| 高清不卡一区| 69av在线视频| 麻豆免费在线观看| 亚洲成人黄色网址| 国产一级片一区二区| 亚洲另类中文字| 欧美 日本 国产| 精品一二三四在线| 欧美三级在线观看视频| 日韩久久视频| 久99久视频| 青青青国产精品| 午夜精品福利在线观看| av免费观看一区二区| 日韩欧美一二三区| 欧美一区二区三区久久久| 亚洲欧美电影一区二区| 在线免费看黄视频| 国产乱码精品一区二区三区av| 浮妇高潮喷白浆视频| 三级电影一区| 欧美人xxxxx| 试看120秒一区二区三区| 日韩美女免费视频| 日韩123区| 中文字幕av一区中文字幕天堂| 狠狠人妻久久久久久综合麻豆| 久久精品人人| 亚洲精品在线91| 亚洲视频在线免费播放| 亚洲一级二级三级| 免费黄色在线网址| www.激情成人| 超碰中文字幕在线观看| 麻豆精品91| 国产一二三在线视频| 久久久国产精品| 奇米视频888战线精品播放| 一区二区三区四区视频免费观看 | 超碰超碰在线| 亚洲天堂开心观看| 手机看片一区二区三区| 7777精品伊人久久久大香线蕉经典版下载| 国产精品第5页| 亚洲一区二区三区视频在线 | 性欧美疯狂xxxxbbbb| 91久久久久久久久久久久久久| 久久蜜臀中文字幕| 污污免费在线观看| 国产一区二区三区av电影| 牛夜精品久久久久久久| 性一交一乱一区二区洋洋av| 国产精品一色哟哟| 黄色av一区| 一二三四中文字幕| 888久久久| 一区二区三区四区欧美| 欧美限制电影| 日韩欧美电影一区二区| 香蕉人人精品| 久久婷婷开心| 色老板在线视频一区二区| 国产在线一区二区三区播放| 中文在线免费一区三区| 成人动漫视频在线观看完整版| 久久婷婷五月综合色丁香| 国产精品福利观看| 成人午夜精品| 国产精品久久久久99| 成人在线爆射| 国产国语刺激对白av不卡| 免费看av不卡| 日韩美女视频免费看| 免费福利视频一区二区三区| 国产成人鲁鲁免费视频a| 精品免费av在线| 国产精品久久久久久久电影| 福利一区二区| 国产在线视频2019最新视频| 伊人久久大香伊蕉在人线观看热v| 国产九九精品视频| 亚洲欧美专区| 91日韩久久| 哺乳挤奶一区二区三区免费看| 国产91亚洲精品一区二区三区| 豆花视频一区二区| 久久久久久久久久码影片| 亚洲肉体裸体xxxx137| 国产无套精品一区二区| 亚洲人亚洲人色久| 亚洲视频导航| 国产精品s色| 日韩欧美国产综合在线| 天堂蜜桃一区二区三区| 91极品视频在线观看| 极品销魂美女一区二区三区| 亚洲午夜精品在线观看| av在线这里只有精品| 男人天堂av电影| 国产精品久久久久久久浪潮网站| 精国产品一区二区三区a片| 婷婷久久综合九色综合绿巨人 | 国产高清自产拍av在线| 国产成人精品在线观看| 久久99成人| 精品视频一区二区三区四区| 欧美久久精品一级c片| 精品少妇人妻av一区二区| 99av国产精品欲麻豆| 日韩福利视频在线| 国产成人午夜精品影院观看视频 | 国产成人毛毛毛片| 日韩高清免费观看| 九义人在线观看完整免费版电视剧| 欧美黑人一级爽快片淫片高清| 欧美成人ⅴideosxxxxx| 91嫩草在线| 欧美一区二区三区高清视频| 国产激情片在线观看| 久久天天综合| 国产a级片视频| 国产日韩欧美激情| 国产精品第108页| 色婷婷av一区二区三区gif| 精品国产av鲁一鲁一区| 亚洲午夜小视频| av丝袜在线| 92看片淫黄大片欧美看国产片| 免费观看久久av| 福利在线一区二区| 精品午夜久久福利影院| 亚洲区自拍偷拍| 性做久久久久久免费观看| 99久久久国产精品无码网爆 | 好看的日韩精品视频在线| 日韩理论电影| 粉嫩虎白女毛片人体| www.成人网.com| 欧美日韩免费做爰视频| 欧美日韩另类一区| 国产精品久久久久av| 国产亚洲高清一区| 色女孩综合网| 九色porny在线| 亚洲人成77777在线观看网| 婷婷色在线播放| 成人欧美一区二区三区黑人孕妇 | 欧美日韩激情电影| 好吊色欧美一区二区三区 | 日本黄色三级大片| 成人精品电影在线观看| 亚洲国产美女视频| 欧美日韩亚洲综合在线 欧美亚洲特黄一级 | 欧美交换国产一区内射| 7777精品伊人久久久大香线蕉 | 国产乱码精品一区二三区蜜臂 | 污污网站在线观看| 91精品视频在线免费观看| 日韩av在线中文字幕| 久久精品免费网站| 国产亚洲va综合人人澡精品| 国产一级片毛片| 亚洲精品日韩在线| 欧美黑人疯狂性受xxxxx野外| 麻豆91av| 久久男女视频| 精品无码人妻一区二区免费蜜桃| 色欲综合视频天天天| 日本高清中文字幕二区在线| 欧美亚洲视频在线观看| 亚洲人成网77777色在线播放| 情侣黄网站免费看| 国产午夜精品美女毛片视频| 神马久久久久久久 | 欧美精品在线一区| 久久高清免费观看| 亚洲天堂久久新| 色av成人天堂桃色av| 超碰免费97在线观看| 成人av在线天堂| 欧美精品综合| 亚洲色偷偷色噜噜狠狠99网| 欧美日韩国产在线| 黄色在线小视频| 国产精品自拍视频| 在线精品国产| 国产香蕉精品视频| 欧美性猛交视频| 永久免费av在线| 91视频99| 久久精品30| www深夜成人a√在线| 欧美大黄免费观看| 性欧美18~19sex高清播放| 欧美一区二区三区成人久久片| 蜜桃视频在线观看一区二区| 乱h高h女3p含苞待放| 亚洲国产美女久久久久| 国产成人免费9x9x人网站视频 | 呦呦在线视频| 九色综合婷婷综合| 美腿丝袜亚洲一区| 久久久久成人精品无码| 精品中文字幕久久久久久| 日韩色性视频| 日韩中字在线观看| 亚洲国产精品国自产拍av| 国产高清免费观看| 欧美亚洲第一页| 婷婷亚洲五月色综合| 亚洲成人日韩在线| 7777女厕盗摄久久久| 自拍在线观看| 国产91porn| 国产亚洲污的网站| 亚洲奶汁xxxx哺乳期| 国产精品99久久久久久久久| 欧美成人久久| 色欲AV无码精品一区二区久久 | 91久久精品国产91性色| 亚洲欧洲综合| 综合五月激情网| 亚洲毛茸茸少妇高潮呻吟|