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

ECMAScript 2023 有哪些更新?

開發 前端
這種限制存在是因為記錄和元組提案的關鍵目標之一是默認具有深度不可變性保證和結構相等性。接受 Symbol 值作為 WeakMap 鍵將允許 JavaScript 庫實現它們自己的類似 RefCollection 的東西,它可以重用同時不會隨著時間的推移泄漏內存。

ECMAScript 規范每年都會更新一次,ECMAScript  2023 預計將于  6 月左右獲得批準,這將是 ECMAScript 的第 14 版。下面是 ECMAScript 提案中已完成并預計在 ECMAScript 2023 發布的功能!

圖片

已完成的提案:https://github.com/tc39/proposals/blob/main/finished-proposals.md

下面就來看看這些功能都有什么用!

從尾到頭搜索數組

(1)概述

在 JavaScript 中,通過 find()? 和 findIndex() 

const array = [{v: 1}, {v: 2}, {v: 3}, {v: 4}, {v: 5}];

array.find(elem => elem.v > 3); // {v: 4}
array.findIndex(elem => elem.v > 3); // 3

如果要從數組的末尾開始遍歷,就必須反轉數組并使用上述方法。這樣做就需要一個額外的數組操作。findLast()? 和 findLastIndex() 的就解決了這一問題。提出這兩個方法的一個重要原因就是:語義。

(2)使用

它們的用法和find()、findIndex()類似,唯一不同的是它們是 從后向前 遍歷數組,這兩個方法適用于數組和類數組。

  • findLast()? 會返回第一個查找到的元素,如果沒有找到,就會返回 undefined;
  • findLastIndex() 會返回第一個查找到的元素的索引。如果沒有找到,就會返回 -1;

const array = [{v: 1}, {v: 2}, {v: 3}, {v: 4}, {v: 5}];

array.findLast(elem => elem.v > 3); // {v: 5}
array.findLastIndex(elem => elem.v > 3); // 4
array.findLastIndex(elem => elem.v > 5); // undefined

(3)polyfill

下面來實現一下這兩個方法:

  • Array.prototype.findLast

Array.prototype.findLast = function(arr, callback, thisArg) {
for (let index = arr.length - 1; index >= 0; index--) {
const value = arr[index];
if (callback.call(thisArg, value, index, arr)) {
return value;
}
}
return undefined;
}

  • Array.prototype.findLastIndex

Array.prototype.findLastIndex = function(arr, callback, thisArg) {
for (let index = arr.length - 1; index >= 0; index--) {
const value = arr[index];
if (callback.call(thisArg, value, index, arr)) {
return index;
}
}
return -1;
}

(4)參考源碼

lodash 中也提供了類似方法,下面是相關源碼:

  • findLast()

import findLastIndex from './findLastIndex.js'
import isArrayLike from './isArrayLike.js'

/**
* This method is like `find` except that it iterates over elements of
* `collection` from right to left.
*
* @since 2.0.0
* @category Collection
* @param {Array|Object} collection The collection to inspect.
* @param {Function} predicate The function invoked per iteration.
* @param {number} [fromIndex=collection.length-1] The index to search from.
* @returns {*} Returns the matched element, else `undefined`.
* @see find, findIndex, findKey, findLastIndex, findLastKey
* @example
*
* findLast([1, 2, 3, 4], n => n % 2 == 1)
* // => 3
*/
function findLast(collection, predicate, fromIndex) {
let iteratee
const iterable = Object(collection)
if (!isArrayLike(collection)) {
collection = Object.keys(collection)
iteratee = predicate
predicate = (key) => iteratee(iterable[key], key, iterable)
}
const index = findLastIndex(collection, predicate, fromIndex)
return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined
}

export default findLast

  • findLastIndex()

import baseFindIndex from './.internal/baseFindIndex.js'
import toInteger from './toInteger.js'

/**
* This method is like `findIndex` except that it iterates over elements
* of `collection` from right to left.
*
* @since 2.0.0
* @category Array
* @param {Array} array The array to inspect.
* @param {Function} predicate The function invoked per iteration.
* @param {number} [fromIndex=array.length-1] The index to search from.
* @returns {number} Returns the index of the found element, else `-1`.
* @see find, findIndex, findKey, findLast, findLastKey
* @example
*
* const users = [
* { 'user': 'barney', 'active': true },
* { 'user': 'fred', 'active': false },
* { 'user': 'pebbles', 'active': false }
* ]
*
* findLastIndex(users, ({ user }) => user == 'pebbles')
* // => 2
*/
function findLastIndex(array, predicate, fromIndex) {
const length = array == null ? 0 : array.length
if (!length) {
return -1
}
let index = length - 1
if (fromIndex !== undefined) {
index = toInteger(fromIndex)
index = fromIndex < 0
? Math.max(length + index, 0)
: Math.min(index, length - 1)
}
return baseFindIndex(array, predicate, index, true)
}

export default findLastIndex

Hashbang Grammar

Unix 的命令行腳本都支持#!命令,又稱為 Hashbang。這個命令放在腳本的第一行,用來指定腳本的執行器。Hashbang Grammar 功能就是想為 JavaScript 腳本引入了#!命令,這個命令寫在腳本文件或者模塊文件的第一行:

// 寫在腳本文件的第一行
#!/usr/bin/env node
'use strict';
console.log(1);

// 寫在模塊文件的第一行
#!/usr/bin/env node
export {};
console.log(1);

這樣,Unix 命令行就可以直接執行腳本了:

# 以前執行腳本
node hello.js

# 有了 hashbang 之后執行腳本
./hello.js

不過這樣的話,hashbang 就必須嚴格的在文件頭,否則就會出現語法錯誤,導致這個 JavaScript 腳本文件無法使用。

通過副本更改數組

通過副本更改數組的方法有四個:

  • Array.prototype.toReversed()
  • Array.prototype.toSorted()
  • Array.prototype.toSpliced()
  • Array.prototype.with()

我們知道,大多數的數組方法都是非破壞性的,也就是說,在數組執行該方法時,不會改變原數組,比如 filter() 方法:

const arr = ['a', 'b', 'b', 'a'];
const result = arr.filter(x => x !== 'b');
console.log(result); // ['a', 'a']

當然,也有一些是破壞性的方法,它們在執行時會改變原數組,比如 sort() 方法:

const arr = ['c', 'a', 'b'];
const result = arr.sort();
console.log(result); // ['a', 'b', 'c']

在數組的方法中,下面的方法是具有破壞性的:

  • .reverse()
  • .sort()
  • .splice()

如果我們想要這些數組方法應用于數組而不改變它,可以使用下面任意一種形式:

const sorted1 = arr.slice().sort();
const sorted2 = [...arr].sort();
const sorted3 = Array.from(arr).sort();

可以看到,我們首先需要創建數組的副本,再對這個副本進行修改。因此就引入了這三個方法的非破壞性版本,因此不需要手動創建副本再進行操作:

  • .reverse()? 的非破壞性版本:.toReversed()
  • .sort()? 非破壞性版本:.toSorted(compareFn)
  • .splice()? 非破壞性版本:.toSpliced(start, deleteCount, ...items)

這些函數屬性引入到了 Array.prototype:

  • Array.prototype.toReversed() -> Array
  • Array.prototype.toSorted(compareFn) -> Array
  • Array.prototype.toSpliced(start, deleteCount, ...items) -> Array
  • Array.prototype.with(index, value) -> Array

除此之外,還有了一個新的非破壞性方法:with()?。該方法會以非破壞性的方式替換給定 index 處的數組元素,即 arr[index]=value 的非破壞性版本。

所有這些方法都將保持目標數組不變,并返回它的副本并執行更改。這些方法適用于數組,也適用于類型化數組,即以下類的實例:

  • Int8Array
  • Uint8Array
  • Uint8ClampedArray
  • Int16Array
  • Uint16Array
  • Int32Array
  • Uint32Array
  • Float32Array
  • Float64Array
  • BigInt64Array
  • BigUint64Array

TypedArray是一種通用的固定長度緩沖區類型,允許讀取緩沖區中的二進制數據。其在WEBGL規范中被引入用于解決Javascript處理二進制數據的問題。類型化數組也是數組,只不過其元素被設置為特定類型的值。

類型化數組的核心就是一個名為 ArrayBuffer 的類型。每個ArrayBuffer對象表示的只是內存中指定的字節數,但不會指定這些字節用于保存什么類型的數據。通過ArrayBuffer能做的就是為了將來使用而分配一定數量的字節。

這些方法也適用于元組,元組相當于不可變的數組。它們擁有數組的所有方法——除了破壞性的方法。因此,將后者的非破壞性版本添加到數組對元組是有幫助的,這意味著我們可以使用相同的方法來非破壞性地更改數組和元組。

(1)Array.prototype.toReversed()

.toReversed()? 是 .reverse() 方法的非破壞性版本:

const arr = ['a', 'b', 'c'];
const result = arr.toReversed();
console.log(result); // ['c', 'b', 'a']
console.log(arr); // ['a', 'b', 'c']

下面是 .toReversed() 方法的一個簡單的 polyfill:

if (!Array.prototype.toReversed) {
Array.prototype.toReversed = function () {
return this.slice().reverse();
};
}

(2)Array.prototype.toSorted()

.toSorted()? 是 .sort() 方法的非破壞性版本:

const arr = ['c', 'a', 'b'];
const result = arr.toSorted();
console.log(result); // ['a', 'b', 'c']
console.log(arr); // ['c', 'a', 'b']

下面是 .toSorted() 方法的一個簡單的 polyfill:

if (!Array.prototype.toSorted) {
Array.prototype.toSorted = function (compareFn) {
return this.slice().sort(compareFn);
};
}

(3)Array.prototype.toSpliced()

.splice()? 方法比其他幾種方法都復雜,其使用形式:splice(start, deleteCount, ...items)?。該方法會從從 start? 索引處開始刪除 deleteCount?個元素,然后在 start? 索引處開始插入item 中的元素,最后返回已經刪除的元素。

.toSpliced? 是 .splice() 方法的非破壞性版本,它會返回更新后的數組,原數組不會變化,并且我們無法再得到已經刪除的元素:

const arr = ['a', 'b', 'c', 'd'];
const result = arr.toSpliced(1, 2, 'X');
console.log(result); // ['a', 'X', 'd']
console.log(arr); // ['a', 'b', 'c', 'd']

下面是 .toSpliced() 方法的一個簡單的 polyfill:

if (!Array.prototype.toSpliced) {
Array.prototype.toSpliced = function (start, deleteCount, ...items) {
const copy = this.slice();
copy.splice(start, deleteCount, ...items);
return copy;
};
}

(4)Array.prototype.with()

.with()?方法的使用形式:.with(index, value)?,它是 arr[index] = value 的非破壞性版本。

const arr = ['a', 'b', 'c'];
const result = arr.with(1, 'X');
console.log(result); // ['a', 'X', 'c']
console.log(arr); // ['a', 'b', 'c']

下面是 .with() 方法的一個簡單的 polyfill:

if (!Array.prototype.with) {
Array.prototype.with = function (index, value) {
const copy = this.slice();
copy[index] = value;
return copy;
};
}

Symbol 作為 WeakMap 的鍵

目前,WeakMaps 僅允許使用對象作為鍵,這是 WeakMaps 的一個限制。新功能擴展了 WeakMap API,允許使用唯一的 Symbol 作為鍵。

這樣更易于創建和共享 key:

const weak = new WeakMap();

// 更具象征意義的key
const key = Symbol('my ref');
const someObject = { /* data data data */ };

weak.set(key, someObject);

除此之外,該功能還解決了記錄和元組提案中引入的問題:如何在原始數據類型中引用和訪問非原始值?Records & Tuples 不能包含對象、函數或方法,當這樣做時會拋出 TypeError:

const server = #{
port: 8080,
handler: function (req) { /* ... */ }, // TypeError!
};

這種限制存在是因為記錄和元組提案的關鍵目標之一是默認具有深度不可變性保證和結構相等性。接受 Symbol 值作為 WeakMap 鍵將允許 JavaScript 庫實現它們自己的類似 RefCollection 的東西,它可以重用同時不會隨著時間的推移泄漏內存:

class RefBookkeeper {
#references = new WeakMap();
ref(obj) {
const sym = Symbol();
this.#references.set(sym, obj);
return sym;
}
deref(sym) { return this.#references.get(sym); }
}
globalThis.refs = new RefBookkeeper();

const server = #{
port: 8080,
handler: refs.ref(function handler(req) { /* ... */ }),
};
refs.deref(server.handler)({ /* ... */ });

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

2023-06-28 00:40:01

ECMAScriptWeakMapSymbol

2022-06-24 08:33:13

ECMAScriptjavaScript

2023-01-04 10:45:23

5G

2023-12-29 13:52:00

AI技術

2022-09-15 08:05:16

緩沖區類型TypedArray

2022-12-09 19:00:02

Vite兼容性BigInt

2024-04-18 08:38:15

LLM數據訓練模型

2023-02-01 09:39:38

人工智能發展趨勢

2020-09-11 10:35:17

Kubernetes 日志開源

2010-08-04 10:10:47

2025-11-17 04:00:00

2011-06-21 14:42:37

ECMAScriptJavaScript

2023-11-23 10:21:11

ECMAScriptJavaScript

2022-07-26 09:02:15

ES6ES13ECMAScript

2023-11-09 07:50:01

邊緣計算商業智能

2023-02-22 15:57:41

數據分析商業智能

2021-06-30 08:00:31

ECMAScriptimport 模塊JavaScript

2023-06-28 15:49:35

2023-01-16 14:54:00

CSS前端

2023-02-03 17:16:33

ECMAScriptAPITC39
點贊
收藏

51CTO技術棧公眾號

91chinesevideo永久地址| 欧美日韩久久久一区| 蜜桃网站成人| 亚洲精品毛片一区二区三区| 911久久香蕉国产线看观看| 精品国产伦一区二区三区观看方式 | 91麻豆高清视频| 国产精品香蕉国产| 日本三级黄色大片| 日韩精品永久网址| 亚洲电影免费观看高清完整版在线| 国产麻花豆剧传媒精品mv在线| 女女色综合影院| gogogo免费视频观看亚洲一| 国产美女被下药99| 国产香蕉视频在线| 久久久久久久久久久久久久久久久久 | 在线电影一区二区| 亚洲天堂色网站| 潘金莲一级淫片aaaaaaa| 怡红院成人在线| 亚洲综合视频在线| 亚洲美女搞黄| 偷拍自拍在线| 国产成人综合在线观看| 国产精品白丝jk喷水视频一区| 九九热精品免费视频| 欧洲杯什么时候开赛| 亚洲国产精品va| 欧美又黄又嫩大片a级| 欧美日韩视频免费观看| 精品二区三区线观看| 最新av在线免费观看| 岛国在线大片| 久久久久久久免费视频了| 国产精品一区在线播放| 99精品久久久久久中文字幕 | 国产成人免费91av在线| 日本少妇做爰全过程毛片| 99精品综合| 在线成人一区二区| 无码h肉动漫在线观看| 美女一区2区| 欧美精品一区二区在线播放| 五月天六月丁香| 青青伊人久久| 欧美色成人综合| 国产又黄又猛又粗又爽的视频| 中文在线8资源库| 亚洲va韩国va欧美va精品| 黄色特一级视频| а√天堂资源地址在线下载| 亚洲欧洲av一区二区三区久久| 亚洲一区二区在线看| 第九色区av在线| 国产精品久久久一本精品| 日本婷婷久久久久久久久一区二区 | 88xx成人免费观看视频库| 欧美午夜宅男影院在线观看| 一区二区传媒有限公司| 免费h在线看| 色婷婷一区二区| 午夜dv内射一区二区| 99久久伊人| 7777精品伊人久久久大香线蕉 | www.日韩在线观看| 国产成人日日夜夜| 国产乱码精品一区二区三区卡| 黄色片一区二区三区| 99久久精品久久久久久清纯| 免费h精品视频在线播放| 撸视在线观看免费视频| 欧美韩国日本不卡| 天堂v在线视频| 国产亚av手机在线观看| 无码av免费一区二区三区试看| 男人揉女人奶房视频60分| 欧美xxxx做受欧美护士| 制服丝袜成人动漫| 中文在线字幕观看| 亚洲免费观看高清完整版在线观| 亚洲日本成人女熟在线观看| 狂野欧美性猛交| 欧美黄色aaaa| 欧洲一区二区视频| 亚洲天堂视频在线| 国产成人aaa| 免费亚洲一区二区| 欧美日韩在线资源| 激情成人中文字幕| 亚洲精品第三页| 丁香一区二区| 一区二区国产精品视频| 欧美成人一二三区| 新狼窝色av性久久久久久| 国产精品久久久久av| av网站在线免费看| 久久九九久久九九| avove在线观看| 伊人久久视频| 欧美成人乱码一区二区三区| 国产免费一区二区三区网站免费| 中文在线日韩| 国产ts人妖一区二区三区| 999av视频| 久久久国产精品不卡| 干日本少妇视频| 在线成人视屏 | 亚洲欧洲一区| 国产一区二区在线免费| 深夜影院在线观看| 亚洲乱码一区二区三区在线观看| 5月婷婷6月丁香| 精品视频在线一区| 国产午夜精品全部视频在线播放| 久草视频在线资源站| 蜜桃av一区二区三区| 国外成人免费视频| 国产一二区在线观看| 色婷婷综合五月| 免费日本黄色网址| 欧美影视一区| 国产精品视频地址| 欧美理论在线观看| 精品久久久久久久久国产字幕 | 精品视频在线观看网站| 中文字幕日本精品| 亚洲自拍一区在线观看| 国产成都精品91一区二区三 | 99亚洲伊人久久精品影院红桃| 国产区亚洲区欧美区| 久草在线免费福利资源| 亚洲大片免费看| 任你躁av一区二区三区| 亚洲最新av| 成人精品视频99在线观看免费| 韩国三级在线观看久| 黑人巨大精品欧美一区二区| 少妇搡bbbb搡bbb搡打电话| 综合久久十次| 91社区国产高清| 青青青青在线| 91精选在线观看| 天天操夜夜操av| 九一久久久久久| 做爰高潮hd色即是空| 欧美videos粗暴| 最新中文字幕亚洲| 中文字幕乱码人妻无码久久 | 亚洲图片都市激情| 成人福利片在线| 国产亚洲一级高清| 成人免费一级片| 国产偷v国产偷v亚洲高清| 十八禁视频网站在线观看| 九九热爱视频精品视频| 国产成人a亚洲精品| 精品无人乱码| 欧美色大人视频| 99久久婷婷国产综合| 国产一区二区按摩在线观看| 国产成人免费高清视频| 亚洲国产欧美在线观看| 国外色69视频在线观看| 手机看片福利在线| 日韩欧美亚洲范冰冰与中字| 摸摸摸bbb毛毛毛片| 免费在线视频一区| 日韩精品一区二区三区电影| 国产成人在线中文字幕| 欧美亚洲激情在线| www免费网站在线观看| 欧美精品第1页| 妺妺窝人体色www聚色窝仙踪 | www.综合| 亚洲天堂男人天堂女人天堂| 国产精品国产av| 自拍偷自拍亚洲精品被多人伦好爽 | 中文字幕在线综合| 国产精品成人a在线观看| 亚洲精品日产aⅴ| 电影在线观看一区| 亚洲欧洲视频在线| 中文字幕在线播放日韩| 亚洲美女免费在线| 亚洲乱码国产乱码精品精大量| 久久先锋影音| 91免费网站视频| www.亚洲一二| 国产精品欧美久久久| 手机电影在线观看| 亚洲欧洲日韩国产| 精品免费久久久| 色欧美日韩亚洲| 九九在线观看视频| 国产午夜精品一区二区三区嫩草 | 2020国产精品自拍| 91精品999| 久久国产主播| 97中文字幕在线| 日韩电影在线视频| 国产精品一国产精品最新章节| av在线一区不卡| 欧美精品久久久久a| av在线播放网站| 亚洲国产欧美一区二区三区同亚洲| 人人草在线观看| 亚洲18女电影在线观看| 国产美女网站视频| 久久亚洲私人国产精品va媚药| 亚洲一区二区三区四区五区| 国产欧美一区二区色老头| 看一级黄色录像| 欧洲乱码伦视频免费| 九色91国产| 亚洲乱码一区| 成人精品在线观看| 国产 日韩 欧美一区| 国外成人性视频| 三级资源在线| 久久高清视频免费| 色欧美激情视频在线| 亚洲午夜未删减在线观看| 天天综合天天综合| 欧美va亚洲va香蕉在线| 国产又大又黄又爽| 欧美男男青年gay1069videost| av大全在线观看| 亚洲超碰97人人做人人爱| 婷婷在线精品视频| 国产精品久久久久久久午夜片| 手机av免费看| 91在线观看污| 国产 xxxx| aaa国产一区| 国产精品一区二区人妻喷水| 国产成人综合亚洲网站| 九九九久久久久久久| 国产中文字幕精品| 亚洲色图欧美自拍| 精品亚洲国内自在自线福利| 爆乳熟妇一区二区三区霸乳| 视频一区在线播放| 超碰网在线观看| 三级欧美在线一区| 嫩草av久久伊人妇女超级a| 久久婷婷av| 热久久精品免费视频| 青青草国产精品亚洲专区无| 国产高清视频网站| 久久99九九99精品| 亚洲一区二区三区四区精品| 国产乱人伦偷精品视频免下载| 视频区 图片区 小说区| 国产福利91精品一区二区三区| 国产精品99久久久精品无码| 成人免费视频免费观看| 男男做爰猛烈叫床爽爽小说| 91麻豆国产福利精品| 一级黄色免费在线观看| 国产精品久久久久久久成人午夜| 婷婷丁香激情综合| 无码人妻久久一区二区三区不卡| 色噜噜狠狠成人中文综合| 中文在线免费看视频| 正在播放亚洲一区| 亚洲产国偷v产偷v自拍涩爱| 精品福利在线导航| 日本福利片在线| 中文字幕精品—区二区| 国产成人无吗| 久久久久久久国产精品视频| 澳门成人av网| 国产专区欧美专区| av不卡一区| 欧美在线视频二区| 久久久久久久久久久妇女 | 亚洲在线黄色| 嫩草av久久伊人妇女超级a| 极品美女销魂一区二区三区免费| 佐山爱在线视频| 久久亚洲二区三区| 日本视频在线免费| 一区二区日韩av| 免费的毛片视频| 欧美日韩一区二区在线观看视频| 国产丰满果冻videossex| 日韩成人黄色av| 麻豆视频在线免费观看| 性欧美xxxx交| 狂野欧美性猛交xxxx| 国产精品国产一区二区| 精品99久久| 欧美无砖专区免费| 日本不卡视频在线| 日本不卡视频一区| 国产精品免费久久| 日本网站在线播放| 欧美猛男男办公室激情| 视频国产在线观看| 美女性感视频久久久| 成人免费网站视频| 91青青草免费观看| 精品日韩免费| 成人免费观看cn| 精一区二区三区| 伊人网在线视频观看| 一区二区欧美国产| 在线观看中文字幕2021| 精品视频久久久久久| 2024短剧网剧在线观看| 国产成一区二区| 欧美久久精品| 4444亚洲人成无码网在线观看| 青青草国产精品亚洲专区无| 精品国产一区在线| 亚洲精品成a人| 亚洲最大成人av| 亚洲欧美精品伊人久久| av3级在线| 高清一区二区三区视频| 婷婷综合在线| 五月婷婷六月合| www成人在线观看| 国产精品自拍视频一区| 日韩一级片网站| 麻豆视频在线免费观看| 国产精品久久看| 日本肉体xxxx裸体xxx免费| 91免费视频观看| 国产午夜小视频| 精品久久久影院| 日本资源在线| 亚洲最大av网站| 自拍偷拍欧美专区| 午夜免费视频网站| 亚洲欧洲综合另类| 国产男男gay网站| 久久视频中文字幕| 伊人久久大香伊蕉在人线观看热v 伊人久久大香线蕉综合影院首页 伊人久久大香 | 国内在线免费视频| 999视频在线观看| 欧美99久久| 宇都宫紫苑在线播放| 最新国产精品久久精品| 一级黄色大片免费| 日韩中文字幕免费视频| 欧美大陆国产| 最新国产精品久久| 国产一区999| 激情五月婷婷小说| 精品久久99ma| 欧美aaaaa性bbbbb小妇| 精品国产一二| 久久综合影视| 制服丨自拍丨欧美丨动漫丨| 51午夜精品国产| 日本大胆在线观看| 国产在线一区二区三区播放| 亚洲欧美卡通另类91av| 一级黄色录像毛片| 欧美日韩国产首页在线观看| 国产在线激情| 国产高清自拍99| 亚洲欧美视频| 永久免费毛片在线观看| 5858s免费视频成人| 日本小视频在线免费观看| 国产女主播一区二区三区| 久久一二三区| 天天色影综合网| 精品国产一区久久| 电影天堂国产精品| eeuss中文| 99精品在线观看视频| 无码人妻一区二区三区线| 色老头一区二区三区在线观看| 久久天堂久久| 欧美国产亚洲一区| 国产精品美女久久久久av爽李琼| www.蜜臀av| 国产成人短视频| 欧美日韩1区| 国产综合精品在线| 91精品国产色综合久久 | 国产日韩欧美视频在线| 欧美日韩精选| 国产成人精品无码免费看夜聊软件| 91.麻豆视频| 性欧美18~19sex高清播放| 国产高潮呻吟久久久| 26uuu亚洲婷婷狠狠天堂| 97在线公开视频| 欧美一区二区三区四区在线| 中文字幕午夜精品一区二区三区| 捆绑裸体绳奴bdsm亚洲| 欧美精品一二三| 伊人久久国产| 日韩一区二区高清视频| 国产女人水真多18毛片18精品视频|