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

ECMAScript 2024(ES15)將帶來這些新特性,超實用!

開發 前端
在JavaScript的正則表達式中,u 標志表示“Unicode”模式。當你在正則表達式中使用這個標志時,它會將模式視為Unicode序列的集合,而不僅僅是一組ASCII字符。這意味著正則表達式會正確地處理四個字節的UTF-16編碼。

ECMAScript 語言規范每年都會進行一次更新,而備受期待的 ECMAScript 2024 將于 2024 年 6 月正式亮相。目前,ECMAScript 2024 的候選版本已經發布,為我們帶來了一系列實用的新功能。接下來,就讓我們一起先睹為快吧!

全文概覽:

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

Promise.withResolvers()

Promise.withResolvers() 允許創建一個新的 Promise,并同時獲得 resolve 和 reject 函數。這在某些場景下非常有用,特別是當需要同時訪問到 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('成功!'), 1000);  
  
promise.then(value => {  
  console.log(value); // 輸出: 成功!  
});

在這個例子中,首先通過 Promise.withResolvers() 創建了一個新的 Promise,并同時獲得了 resolve 和 reject 函數。然后,在 setTimeout 回調中使用 resolve 函數來解析這個 Promise。最后,添加了一個 .then 處理程序來處理 Promise 解析后的值。

使用 Promise.withResolvers() 關鍵的區別在于解決和拒絕函數現在與 Promise 本身處于同一作用域,而不是在執行器中被創建和一次性使用。這可能使得一些更高級的用例成為可能,例如在重復事件中重用它們,特別是在處理流和隊列時。這通常也意味著相比在執行器內包裝大量邏輯,嵌套會更少。

這個功能對于那些需要更細粒度控制 Promise 的狀態,或者在 Promise 創建后仍然需要訪問 resolve 和 reject 函數的場景來說非常有用。

Object.groupBy / Map.groupBy

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

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

const people = [
  { name: "Alice", age: 28 },
  { name: "Bob", age: 30 },
  { name: "Eve", age: 28 },
];

const peopleByAge = {};

people.forEach((person) => {
  const age = person.age;
  if (!peopleByAge[age]) {
    peopleByAge[age] = [];
  }
  peopleByAge[age].push(person);
});

console.log(peopleByAge);

輸出結果如下:

{
  "28": [{"name":"Alice","age":28}, {"name":"Eve","age":28}],
    "30": [{"name":"Bob","age":30}]
}

也可以使用reduce方法:

const peopleByAge = people.reduce((acc, person) => {
  const age = person.age;
  if (!acc[age]) {
    acc[age] = [];
  }
  acc[age].push(person);
  return acc;
}, {});

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

使用 Object.groupBy 分組

可以通過以下方式來使用新的Object.groupBy方法:

const peopleByAge = Object.groupBy(people, (person) => person.age);

可以看到,代碼非常簡潔!

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

const peopleByAge = Object.groupBy(people, (person) => person.age);
console.log(peopleByAge.hasOwnProperty("28"));
// TypeError: peopleByAge.hasOwnProperty is not a function

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

在這個例子中,回調函數返回的是一個數字類型的age屬性值,但由于Object.groupBy方法要求鍵必須是字符串或 Symbol 類型,所以該數字會被強制轉換為字符串類型。

console.log(peopleByAge[28]);
// => [{"name":"Alice","age":28}, {"name":"Eve","age":28}]
console.log(peopleByAge["28"]);
// => [{"name":"Alice","age":28}, {"name":"Eve","age":28}]

使用 Map.groupBy 分組

Map.groupBy和Object.groupBy幾乎做的是相同的事情,只是返回的結果類型不同。Map.groupBy返回一個Map對象,而不是像Object.groupBy返回一個普通的對象。

const ceo = { name: "Jamie", age: 40, reportsTo: null };
const manager = { name: "Alice", age: 28, reportsTo: ceo };

const people = [
  ceo
  manager,
  { name: "Bob", age: 30, reportsTo: manager },
  { name: "Eve", age: 28, reportsTo: ceo },
  ];

const peopleByManager = Map.groupBy(people, (person) => person.reportsTo);

這里根據人的匯報上級將他們進行了分組。如果想通過對象來從這個Map中獲取數據,那么要求這些對象具有相同的身份或引用。這是因為Map在比較鍵時使用的是嚴格相等(===),只有兩個對象具有相同的引用,才能被認為是相同的鍵。

peopleByManager.get(ceo);
// => [{ name: "Alice", age: 28, reportsTo: ceo }, { name: "Eve", age: 28, reportsTo: ceo }]
peopleByManager.get({ name: "Jamie", age: 40, reportsTo: null });
// => undefined

在上面的例子中,如果嘗試使用與ceo對象類似的對象作為鍵去訪問Map中的項,由于這個對象與之前存儲在Map中的ceo對象不是同一個對象,所以無法檢索到對應的值。

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

String.prototype.isWellFormed()

isWellFormed() 方法返回一個表示該字符串是否包含單獨代理項的布爾值。

JavaScript 中的字符串是 UTF-16 編碼的。UTF-16 編碼中的代理對是指:

在UTF-16編碼中,代理對(Surrogate Pair)是一種特殊的編碼機制,用于表示那些超出基本多文種平面(BMP)的Unicode字符。這些字符的Unicode碼點高于U+FFFF,因此無法用一個16位的UTF-16碼元來表示。為了解決這個問題,UTF-16引入了代理對機制。


代理對是由兩個16位的碼元組成的,一個稱為高代理(或高代理碼元),其碼點范圍在U+D800到U+DBFF之間;另一個稱為低代理(或低代理碼元),其碼點范圍在U+DC00到U+DFFF之間。這兩個碼元合在一起,可以表示一個超出BMP的Unicode字符。


例如,Unicode碼點U+10000(這是BMP之外的第一個碼點)在UTF-16中的編碼就是高代理碼元U+D800和低代理碼元U+DC00的組合,即“D800 DC00”。同樣,碼點U+10001的UTF-16編碼就是“D800 DC01”,以此類推。


通過這種方式,UTF-16編碼能夠完全表示所有Unicode字符,無論是BMP內的還是BMP外的。這種代理對機制是UTF-16編碼方案的一個重要組成部分,使得UTF-16成為一種能夠靈活處理各種語言字符的編碼方式。

isWellFormed() 讓你能夠測試一個字符串是否是格式正確的(即不包含單獨代理項)。由于引擎能夠直接訪問字符串的內部表示,與自定義實現相比 isWellFormed() 更高效。如果需要將字符串轉換為格式正確的字符串,可以使用 toWellFormed() 方法。isWellFormed() 讓你可以對格式正確和格式錯誤的字符串進行不同的處理,比如拋出一個錯誤或將其標記為無效。

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.
}

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());
}
// Logs:
// "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"

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

在JavaScript的正則表達式中,u 標志表示“Unicode”模式。當你在正則表達式中使用這個標志時,它會將模式視為Unicode序列的集合,而不僅僅是一組ASCII字符。這意味著正則表達式會正確地處理四個字節的UTF-16編碼。


具體來說,u 標志有以下幾個作用:

正確處理Unicode字符:不使用 u 標志時,正則表達式可能無法正確處理Unicode字符,尤其是那些超出基本多文種平面(BMP)的字符。使用 u 標志后,你可以匹配和處理任何有效的Unicode字符。

改變量詞的行為:在Unicode模式下,量詞(如 *、+、?、{n}、{n,}、{n,m})會匹配任何有效的Unicode字符,而不僅僅是ASCII字符。

允許使用\p{...} 和 \P{...}:這兩個是Unicode屬性轉義,允許匹配或不匹配具有特定Unicode屬性的字符。例如,\p{Script=Arabic} 會匹配任何阿拉伯腳本的字符。

正確處理Unicode轉義:在Unicode模式下,你可以使用 \u{...} 來表示一個Unicode字符,其中 {...} 是一個四位的十六進制數。

修正了某些正則表達式方法的行為:例如,String.prototype.match()、String.prototype.replace()、String.prototype.search() 和 RegExp.prototype.exec() 等方法在Unicode模式下會返回更準確的結果。

責任編輯:姜華 來源: 前端充電寶
相關推薦

2024-08-05 08:38:13

2024-07-02 08:36:09

JavaScriptUnicode模式

2025-03-04 10:03:47

2021-08-02 23:12:04

iOS蘋果系統

2016-03-14 15:43:31

GCC新特性

2024-06-28 11:39:21

2023-01-05 08:00:24

RegExpFoo類字段

2025-06-27 08:45:43

2021-02-22 11:51:15

Java開發代碼

2020-08-31 08:11:01

V8 8.5Promise前端

2023-06-28 00:40:01

ECMAScriptWeakMapSymbol

2022-06-24 08:33:13

ECMAScriptjavaScript

2021-03-05 18:38:45

ESvue項目

2012-03-02 11:35:12

微軟Windows 8

2023-04-19 15:26:52

JavaScriptES13開發

2023-05-22 16:03:00

Javascript開發前端

2013-09-09 13:48:53

SDN

2011-05-26 10:27:37

Fedora 15

2020-11-25 08:15:20

數字貨幣區塊鏈比特幣

2025-02-21 08:30:00

JavaScripES代碼
點贊
收藏

51CTO技術棧公眾號

91动漫免费网站| 色呦呦网站入口| 成人在线免费看视频| 亚洲人成伊人成综合图片| 日韩欧美国产免费播放| 日韩黄色影视| 久久影视中文字幕| 国产永久精品大片wwwapp| 欧美另类高清zo欧美| 日韩精品手机在线观看| 无码精品视频一区二区三区 | 成人免费视频国产在线观看| 欧美亚洲一区在线| 国产美女免费网站| 国产乱子精品一区二区在线观看| 夜色激情一区二区| 国产精品香蕉视屏| 亚洲天堂视频网站| 欧美亚洲激情| 日韩精品一区二区在线观看| 成熟老妇女视频| 成人影欧美片| 久久综合久久综合九色| 91在线观看免费观看 | 久久无码专区国产精品s| 日韩脚交footjobhdboots| 中文字幕不卡在线| 成人资源av| 亚洲中文无码av在线| 樱桃成人精品视频在线播放| 尤物yw午夜国产精品视频| 性生活一级大片| 怡红院成人在线| 亚洲成人黄色影院| 亚洲欧美日产图| 午夜一区在线观看| 日韩高清欧美激情| 欧美富婆性猛交| 国产三级短视频| 日本午夜精品| 精品国产三级电影在线观看| 波多野结衣在线免费观看| 国产精品专区免费| 一区二区三区在线观看视频| 亚洲精品一区二区三区av| 午夜福利视频一区二区| 国产成人精品综合在线观看| 成人免费在线视频网址| 中文字幕在线天堂| 在线日本高清免费不卡| 欧美精品免费在线观看| 亚洲色图27p| 精品国产一区一区二区三亚瑟| 精品性高朝久久久久久久| 亚洲一级Av无码毛片久久精品| 国产一区 二区| 欧美日韩国产乱码电影| 三级a在线观看| 日韩av中字| 黑人巨大精品欧美一区二区一视频 | 国产成人精品一区二区三区在线观看| 99国内精品久久久久| 欧美日韩mp4| www亚洲成人| 日韩精品一区二区三区av| 欧美日韩中国免费专区在线看| 少妇高潮毛片色欲ava片| 不卡的av影片| 午夜欧美视频在线观看 | 野花社区视频在线观看| 欧美电影完整版在线观看| 亚洲丁香婷深爱综合| 国产综合内射日韩久| 国产成人夜色高潮福利影视 | 电影av在线| 国产欧美日韩卡一| 欧美一区少妇| 天堂а√在线资源在线| 亚洲同性同志一二三专区| 亚洲 欧洲 日韩| 影音先锋在线播放| 亚洲精品v日韩精品| 久久亚洲国产成人精品无码区| 538在线精品| 亚洲国产成人高清精品| 欧洲黄色一级视频| 毛片电影在线| 欧美午夜寂寞影院| 亚洲 欧美 另类人妖| 爱情电影网av一区二区| 精品国产99国产精品| 精品中文字幕在线播放| 国产尤物久久久| 久久香蕉频线观| 日本特黄特色aaa大片免费| 国产精品普通话对白| 国产成人在线一区二区| 国产精品久久久久久久久久久久久久久久久久 | 少妇久久久久久久久久| 日韩精品免费一区二区三区| 久久99精品国产99久久6尤物| 国产成人精品网| 激情综合色播激情啊| 国产激情美女久久久久久吹潮| 免费国产在线视频| 中文字幕一区三区| 欧美a级免费视频| 午夜欧美巨大性欧美巨大| 777精品伊人久久久久大香线蕉| 波多野结衣视频播放| 欧美综合一区| 久久久久久综合网天天| 亚洲午夜在线播放| 国产在线日韩欧美| 日韩一区二区电影网| 丰满岳乱妇一区二区| av伊人久久| 欧美激情欧美狂野欧美精品| 久久久久精彩视频| 国产精品538一区二区在线| 欧美日韩大片一区二区三区 | 亚洲欧美一区二区在线观看| 一区二区传媒有限公司| 久久九九精品视频| 亚洲精品少妇网址| 在线观看美女av| 久久久久91| 国产福利久久精品| 超碰免费在线| 欧美日韩亚洲网| 中文字幕无人区二| 北条麻妃国产九九九精品小说| 美女久久久久久久久久久| 91丨九色丨海角社区| 成年人国产精品| 男女激烈动态图| 国产成人免费精品| 日韩毛片在线观看| 极品颜值美女露脸啪啪| 开心九九激情九九欧美日韩精美视频电影 | 女同久久另类99精品国产| 久久久www成人免费精品张筱雨| 国产91av在线播放| 成人av免费观看| 国产 欧美 日本| 国产精品美女久久久久| 日韩在线视频网站| 久久久黄色大片| 99国产精品久久| 全黄性性激高免费视频| 欧美特黄不卡| 不用播放器成人网| 中文字幕欧美色图| 久久蜜桃香蕉精品一区二区三区| 凹凸国产熟女精品视频| 精品人人人人| 97在线日本国产| 天天干天天摸天天操| 亚洲成人免费看| 人妻无码中文久久久久专区| 国产欧美亚洲一区| 国产精品国模大尺度私拍| 怡红院红怡院欧美aⅴ怡春院| 91精品国产色综合久久不卡电影 | 色综合久久综合网欧美综合网 | 日本乱人伦a精品| 日本一级在线观看| 精品久久久久久久久国产字幕| 亚洲av无码一区二区三区网址 | 日韩a级作爱片一二三区免费观看| 精品久久久一区| 中文字字幕码一二三区| 水野朝阳av一区二区三区| 欧美一级日本a级v片| 自拍偷自拍亚洲精品被多人伦好爽| 亚洲美女自拍视频| www.久久精品视频| 久久夜色精品一区| 免费高清在线观看免费| 国产亚洲一卡2卡3卡4卡新区 | 成人精品在线播放| 亚洲中国最大av网站| 国产女人18毛片水真多18| 亚洲影院一区| 亚洲精品一区二区三区四区五区 | 美女视频一区二区三区| 天堂v在线视频| 日韩欧美中文字幕在线视频| 91福利视频网| a天堂在线资源| 91精品国产综合久久福利软件 | 首页综合国产亚洲丝袜| 中文视频一区视频二区视频三区| 成人高潮视频| 国产精品成久久久久三级| 黄色国产网站在线播放| 精品国产3级a| 最新黄色网址在线观看| 日日天天久久| 热久久免费国产视频| 国产经典自拍视频在线观看| 日韩精品中文字幕一区二区三区| 欧美一区二区三区不卡视频| 亚洲精品美腿丝袜| 一级特黄a大片免费| 精品一区二区免费视频| 久久九九久久九九| 黄色一级片av| 国产影视一区| 国产麻豆乱码精品一区二区三区 | 亚洲成人自拍一区| 美国黄色a级片| 国产一区999| 国产熟女高潮视频| 97精品一区二区| 久久超碰亚洲| 日本精品视频| 国产成人在线亚洲欧美| 丁香花高清在线观看完整版| 中文字幕亚洲无线码a| 婷婷开心激情网| 91精品国产综合久久小美女| 欧美brazzers| 精品福利视频导航| 黄色av片三级三级三级免费看| 91啪亚洲精品| 精品无码人妻少妇久久久久久| 久久9热精品视频| 国产精品人人妻人人爽人人牛| 在线成人h网| 视色,视色影院,视色影库,视色网 日韩精品福利片午夜免费观看 | 久色成人在线| 欧美 日韩 亚洲 一区| 欧美黄污视频| 在线国产伦理一区| 爽爽窝窝午夜精品一区二区| 国产精品一 二 三| 福利一区二区三区视频在线观看| 日本视频久久久| 黄色在线网站噜噜噜| 欧美激情影音先锋| 欧美另类极品| 中文字幕亚洲无线码a| 国产视频在线看| 亚洲精品一区二区网址| 色综合久久久久久| 欧美欧美欧美欧美| 日本精品入口免费视频| 91福利国产成人精品照片| 精品在线播放视频| 亚洲影院理伦片| 欧美精品成人久久| 久久伊人中文字幕| 日本道中文字幕| 久久国产乱子精品免费女| 女性隐私黄www网站视频| 伊人精品成人久久综合软件| 分分操这里只有精品| 亚洲一级黄色| 午夜精品一区二区在线观看的| 精品久久久久中文字幕小说| 欧美日韩另类综合| 卡通动漫国产精品| 国产综合香蕉五月婷在线| 国语对白在线刺激| 久久精品青青大伊人av| 国内精品不卡| 欧美大片va欧美在线播放| 制服丝袜在线播放| 精品国模在线视频| 免费a级在线播放| 搡老女人一区二区三区视频tv| 色视频在线免费观看| 亚洲精品国产综合区久久久久久久| 中文字幕免费播放| 欧美日韩精品免费观看视频| av天堂一区二区三区| 欧美人妇做爰xxxⅹ性高电影| www.国产.com| 色国产精品一区在线观看| 亚洲综合久久网| 欧美亚洲动漫制服丝袜| 91精品国产色综合久久不8| 欧美一级久久久久久久大片| 特黄视频在线观看| 亚洲精品99久久久久| 蜜芽tv福利在线视频| 伊人久久男人天堂| 亚洲xxxxxx| 欧美黄色小视频| 成人一区福利| 国产精品丝袜久久久久久高清| 亚洲精品在线a| 97se国产在线视频| 黑人久久a级毛片免费观看| 欧美12av| 欧美日韩免费| 热久久精品国产| 国产在线精品不卡| 免费在线观看日韩av| 国内精品视频666| 黑丝av在线播放| 中文字幕亚洲不卡| www.色小姐com| 欧美午夜无遮挡| 国产精品视频a| 欧美肥胖老妇做爰| 丰满大乳国产精品| 亚洲人成在线观看网站高清| 酒色婷婷桃色成人免费av网| 欧美片一区二区三区| 欧美精品日日操| 国产精品成人一区二区| 日韩08精品| 日韩精品久久久| 亚洲ab电影| 99国产精品白浆在线观看免费| 日韩1区2区日韩1区2区| 久久久久亚洲av无码专区首jn| 91在线小视频| 免费一级a毛片夜夜看| 欧洲国产伦久久久久久久| 狠狠综合久久av一区二区| 中文字幕精品久久| 尤物视频在线看| 国产欧美一区二区三区视频| 亚洲小说图片视频| 中文字幕一区综合| 一本色道久久综合一区| 日本少妇一区二区三区| 成人午夜看片网址| 91丨porny丨九色| 久久久av毛片精品| 九九免费精品视频| 亚洲主播在线播放| 国产一区二区视频免费观看 | 国产精品高潮在线| 成人精品动漫一区二区三区| 国产精品国三级国产av| 经典一区二区三区| 日本黄色录像片| 国产精品美女久久久久久2018| 69亚洲精品久久久蜜桃小说| 日韩av在线免费观看| 日本三级韩国三级欧美三级| 91在线看www| 一区二区在线影院| 成人羞羞国产免费网站| 成人涩涩免费视频| 亚洲欧美精品aaaaaa片| 欧美日韩免费一区二区三区| 欧美黑人一区二区| 欧美日韩激情在线| 国产一级免费在线观看| 日韩av电影手机在线| 日本一区影院| 屁屁影院ccyy国产第一页| 国产一区二区三区四区五区入口| 在线观看黄网址| 欧美亚洲综合一区| 嫩草精品影院| 欧美大片免费观看在线观看网站推荐| 亚洲啊v在线免费视频| 三级网在线观看| 国产精品一区二区黑丝| 校园春色 亚洲| 日韩一级免费观看| 国产黄大片在线观看画质优化| 亚洲综合日韩在线| 亚洲裸色大胆大尺寸艺术写真| 欧美 日韩 国产 激情| 成人动漫精品一区二区| 圆产精品久久久久久久久久久| 亚洲香蕉在线观看| 少妇精品视频一区二区免费看| 中文字幕一区二区三区有限公司| 国产麻豆精品在线| 永久免费看黄网站| 欧美成人a视频| 末成年女av片一区二区下载| 神马影院午夜我不卡影院| 久久99精品久久久久久国产越南| 麻豆chinese极品少妇| 亚洲国产成人精品久久久国产成人一区| 亚洲精品福利电影| 日韩精品久久久毛片一区二区| 国产成人一级电影| 欧美一级爱爱视频| 国产激情一区二区三区| 成人午夜视频精品一区| 社区色欧美激情 | 亚洲午夜精品| 激情五月开心婷婷| 日本一二三四高清不卡| a毛片在线免费观看| 1769国产精品| 我不卡手机影院| 喷水视频在线观看| 色婷婷综合久久久| 日本在线免费网|