精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

九九视频在线免费观看| 成人黄色大片网站| 中文字幕一区二区三区人妻四季| 深夜福利久久| 欧美无砖砖区免费| 久久精彩视频| 日日摸天天添天天添破| 国产一区不卡| 欧美裸体一区二区三区| 自拍偷拍99| 国产精品久久久久久9999| aaa一区二区三区| 日韩免费在线| 精品国产乱码久久久久久影片| 日韩免费一区二区三区| 国产精品久久久久久久久久久久久久久久久久 | 亚洲精品国产精品国自| 男人天堂资源网| 1024在线播放| 日韩精品电影在线观看| 亚洲国产黄色片| 青青在线免费观看视频| av电影免费在线观看| 久久理论电影网| 官网99热精品| 国产又黄又粗又硬| 日本色综合中文字幕| 亚洲欧美视频在线| xxxxwww一片| 97人人做人人爽香蕉精品| 亚洲国产aⅴ成人精品无吗| 午夜精品一区二区三区在线观看| 天堂资源中文在线| 国产成人自拍高清视频在线免费播放 | 久久精品综合视频| 玖玖玖视频精品| 欧美三级在线播放| av动漫免费看| 性欧美18xxxhd| 亚洲一区在线观看免费 | 国产一级网站视频在线| 国产一区二区三区日韩| 国产精品综合网站| 性高潮视频在线观看| 国产农村妇女精品一区二区| 欧美极品少妇xxxxⅹ喷水| 性欧美疯狂猛交69hd| 日韩系列欧美系列| 一区二区在线视频| 免费观看av网站| 欧美日韩精品一区二区三区在线观看| 精品少妇一区二区三区在线播放 | 91丨porny丨蝌蚪视频| 92看片淫黄大片看国产片| 在线观看毛片网站| 欧美oldwomenvideos| 亚洲欧美日韩中文视频| 成年人网站免费看| 免费av一区| 亚洲欧美制服丝袜| 亚洲欧美天堂在线| 日韩成人精品一区二区三区| 亚洲美女免费在线| 日本xxx免费| 黄色精品免费看| 亚洲欧美日本韩国| www.国产二区| jizz一区二区三区| 洋洋成人永久网站入口| 亚洲精品视频一二三| 亚洲高清视频网站| 国产高清成人在线| 国产亚洲成av人在线观看导航| 懂色av影视一区二区三区| 日本a级片在线观看| jizz性欧美10| 国产精品一品视频| 国产91色在线|| 亚洲午夜18毛片在线看| 性久久久久久| 欧美另类第一页| 九九九在线视频| 一区二区动漫| 久久国产精品久久久久| 少妇久久久久久被弄高潮| 影视一区二区| 欧美激情久久久久久| 日韩欧美a级片| 丝袜亚洲另类欧美综合| 成人黄色av免费在线观看| 国产毛片久久久久| 97久久人人超碰| 亚洲一卡二卡三卡四卡无卡网站在线看| 日本视频在线播放| 亚洲成人激情av| 免费一级特黄录像| 亚洲高清999| 亚洲精品黄网在线观看| 成人三级视频在线观看| 久草精品在线| 久久精品国产亚洲| 久久国产精品系列| 久久精品国产999大香线蕉| 岛国视频一区| 国产一区二区三区福利| 一区二区三区不卡在线观看| 国产福利视频在线播放| 欧美片网站免费| 亚洲美女动态图120秒| 开心激情五月网| 99亚洲一区二区| 国产日韩换脸av一区在线观看| 丰满少妇被猛烈进入| 中文成人av在线| 精品久久久久久无码中文野结衣| 欧美亚洲大片| 精品国精品国产| av免费播放网站| 午夜综合激情| 国产激情一区二区三区在线观看| 91在线直播| 精品久久久免费| 日韩精品xxx| 成人亚洲一区| 日韩av手机在线| 欧美自拍偷拍一区二区| 国产成人在线视频网站| 日韩精品久久久| 亚洲欧美韩国| 亚洲精品av在线播放| 日本福利片在线观看| 日韩专区一卡二卡| 精品无人区一区二区三区 | 亚洲爽爆av| 欧美日韩精品一区视频| 国产ts丝袜人妖系列视频| 欧美日韩国产成人精品| 国产日韩欧美91| 粉嫩av一区| 欧美日韩一区二区免费视频| 老熟女高潮一区二区三区| 一区二区三区在线| 91精品视频在线看| 午夜视频在线免费观看| 欧美午夜不卡视频| 免费看污片的网站| 国产视频欧美| 久久精品国产一区二区三区日韩 | 亚洲免费毛片网站| 自拍偷拍一区二区三区四区| 日韩不卡一区| 国产精品欧美激情在线播放| 成在在线免费视频| 欧美亚洲禁片免费| 在线观看日本黄色| 六月丁香婷婷久久| 吴梦梦av在线| 日韩精品中文字幕吗一区二区| 久久精品国产欧美亚洲人人爽| 一级全黄少妇性色生活片| 国产丝袜在线精品| 日韩大片一区二区| 婷婷中文字幕一区| dy888夜精品国产专区| 成人在线高清免费| 91黄色免费看| 日本综合在线观看| 久久成人免费电影| 久久亚裔精品欧美| 黑人巨大精品| 中文字幕九色91在线| 在线视频播放大全| 亚洲视频一二三区| 中文字幕99页| 国产亚洲一区在线| 日韩三级电影| 国产精品xnxxcom| 高清一区二区三区四区五区| 人成在线免费视频| 欧美色图12p| 18精品爽视频在线观看| 99视频有精品| 亚洲人视频在线| 亚洲一级二级| 日本一区二区不卡高清更新| 99久久999| 97精品欧美一区二区三区| 国产小视频在线观看| 欧美一级一区二区| 亚洲免费在线观看av| 欧美国产精品专区| 欧美图片自拍偷拍| 日本中文字幕一区| 久久久久久久9| 国产日产精品_国产精品毛片| 成人有码视频在线播放| 毛片在线网站| 久久久精品一区二区| 天堂网在线播放| 欧美喷水一区二区| 美日韩一二三区| 亚洲黄色小说网站| 在线观看免费av网址| 激情视频一区二区三区| 亚洲成人蜜桃| 欧美丝袜美腿| 国产一区红桃视频| 樱桃视频成人在线观看| 欧美高跟鞋交xxxxhd| 国产一级片在线播放| 欧美精品一区二区在线播放| 精产国品一区二区| 亚洲欧美激情插| jizz欧美性20| 不卡一区二区中文字幕| 91精产国品一二三产区别沈先生| 噜噜噜躁狠狠躁狠狠精品视频 | 国产丝袜在线| 亚洲免费成人av电影| 亚洲精品一区二区三区区别| 欧美日韩精品一区二区三区蜜桃 | 欧美日韩一区不卡| 欧美三级一区二区三区| 一区二区三区蜜桃网| 国产美女网站视频| 久久久久久久国产精品影院| 精品国产成人av在线免| 国产成人影院| 国产一区二区精品免费| 激情视频亚洲| 成人精品一区二区三区电影黑人| 欧美18—19sex性hd| 高清亚洲成在人网站天堂| 日本欧美电影在线观看| 精品国产美女在线| 2017亚洲天堂1024| 亚洲人成电影在线观看天堂色| 亚洲aaaaaaa| 日本精品一级二级| 亚洲午夜18毛片在线看| 午夜精品久久久久影视| 久久免费精彩视频| 亚洲综合色噜噜狠狠| 免费在线黄色网| 亚洲色图欧美激情| 亚洲 欧美 变态 另类 综合| 中文字幕亚洲在| 国产suv精品一区二区68| 国产精品久久久爽爽爽麻豆色哟哟| 欧美视频国产视频| 麻豆成人91精品二区三区| 一区二区三区入口| 日本怡春院一区二区| 国内性生活视频| 性一交一乱一区二区洋洋av| 欧美黄网站在线观看| 午夜在线视频观看日韩17c| 凹凸日日摸日日碰夜夜爽1| 噜噜噜在线观看免费视频日韩 | 国语自产精品视频在线看抢先版结局 | 欧美日韩电影一区二区三区| 精品中文一区| 亚洲国产精品一区在线观看不卡| 日韩一级毛片| 中文字幕精品一区日韩| 一区二区三区四区在线观看国产日韩| 久久福利一区二区| 在线免费高清一区二区三区| 久久久久人妻精品一区三寸| 三级一区在线视频先锋 | 一本一本久久a久久精品牛牛影视 一本色道久久综合亚洲精品小说 一本色道久久综合狠狠躁篇怎么玩 | 一道本无吗dⅴd在线播放一区| 国产精品一区在线看| 中文字幕一区日韩电影| mm1313亚洲国产精品美女| 性欧美暴力猛交69hd| 欧美色片在线观看| 久久久久久久久久久久av| 色是在线视频| 国产精选久久久久久| 亚洲午夜精品| 欧美日韩亚洲免费| 亚洲精品久久| 成人毛片视频网站| 美女视频黄频大全不卡视频在线播放| 欧美男女交配视频| 粉嫩av亚洲一区二区图片| 谁有免费的黄色网址| 日韩一区有码在线| 亚洲黄色一区二区| 欧美三级日韩在线| 亚洲第一精品网站| 国产午夜精品视频| 免费在线观看av电影| 国产精品白嫩美女在线观看| 依依综合在线| 亚洲va码欧洲m码| 久久99青青| 欧美亚洲色图视频| 另类成人小视频在线| 奇米777第四色| 国产精品久久看| 天天干天天干天天干天天| 91麻豆精品国产91久久久更新时间 | 日韩免费三级| 中国女人久久久| 男女污污视频网站| 国产日韩影视精品| 妺妺窝人体色www婷婷| 欧美日韩国产精选| 免费资源在线观看| 久久久最新网址| 国产精选久久| 亚洲看片网站| 天堂影院一区二区| 屁屁影院国产第一页| 一区二区在线观看视频 | 日本午夜精品一区二区三区电影| 极品白嫩少妇无套内谢| 一区视频在线播放| 国产99久久久久久免费看| 亚洲精品国精品久久99热| 日皮视频在线观看| 91免费精品视频| 不卡在线一区| 久久国产色av免费观看| 白白色 亚洲乱淫| 久久国产免费观看| 欧美一区二区在线免费观看| 在线观看av黄网站永久| 国产成人精品久久亚洲高清不卡 | 四虎一区二区| 麻豆精品网站| 女尊高h男高潮呻吟| 天天色天天操综合| 五月婷婷在线观看视频| 午夜精品久久久久久久99热浪潮 | 欧美一区视久久| 国产精品毛片一区二区三区| 性欧美18—19sex性高清| 99视频精品在线| 五月天综合在线| 日韩欧美国产综合一区 | www.香蕉视频| 美日韩精品视频免费看| 久久视频社区| 国产一区 在线播放| 高清视频一区二区| 欧美亚洲天堂网| 日韩精品免费视频| 欧美7777| 视频一区二区在线观看| 麻豆91精品视频| 青春草免费视频| 欧美v日韩v国产v| 国产三级电影在线播放| 久久99精品国产99久久| 老鸭窝毛片一区二区三区| 亚洲av成人无码久久精品| 欧美色精品在线视频| 国内精品不卡| 国产精品v欧美精品v日韩| 99精品国产一区二区青青牛奶 | 日韩美脚连裤袜丝袜在线| 一本大道熟女人妻中文字幕在线 | 成人性生交视频免费观看| 亚洲黄一区二区三区| 四虎永久在线观看| 国产成人精品免费久久久久| 四虎成人av| 精品人妻无码中文字幕18禁| 亚洲国产成人av| 青青操在线视频| 国产日韩中文字幕| 欧美精品99| 韩国无码一区二区三区精品| 欧美中文字幕亚洲一区二区va在线 | 成人性视频网站| 免费观看成人毛片| 中文字幕久久亚洲| 国产亚洲观看| 91九色在线观看视频| 中文字幕欧美激情一区| 国产精品久久久久毛片| 午夜精品久久久99热福利| 不卡一区综合视频| 日本道中文字幕| 欧美日韩三级视频| www.超碰在线| 亚洲最新在线| av一二三不卡影片| 在线免费观看日韩视频| 久久人91精品久久久久久不卡| 久久不见久久见中文字幕免费 | 日日噜噜噜噜人人爽亚洲精品| 91麻豆精品国产91久久久资源速度 | 国产欧美精品一区aⅴ影院 | 国产视频精品免费播放| 婷婷久久免费视频| 91视频 -- 69xx|