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

九個JSON.stringify 的秘密,大多數(shù)開發(fā)人員卻不知道

開發(fā) 前端
作為前端開發(fā)工程師,你一定用過JSON.stringify,但你知道它的全部秘密嗎?

作為前端開發(fā)工程師,你一定用過JSON.stringify,但你知道它的全部秘密嗎?

很久以前,我因此在工作中犯下了無法挽回的錯誤。如果我早點知道,就不會發(fā)生這樣的悲劇。

理解 JSON.stringify

基本上,JSON.stringify 將對象轉(zhuǎn)換為 JSON 字符串。同時,JSON.stringify 有如下規(guī)則。

圖片

1. undefined、Function 和 Symbol 不是有效的 JSON 值。

如果在轉(zhuǎn)換過程中遇到任何此類值,它們要么被省略(當(dāng)在對象中找到時),要么更改為 null(當(dāng)在數(shù)組中找到時)。

當(dāng)傳入像 JSON.stringify(function() {}) 或 JSON.stringify(undefined) 這樣的“純”值時,JSON.stringify() 可以返回 undefined。

2.Boolean、Number、String對象在字符串化過程中被轉(zhuǎn)換為對應(yīng)的原始值,符合傳統(tǒng)的轉(zhuǎn)換語義。

3.所有以符號為鍵的屬性將被完全忽略,即使在使用替換函數(shù)時也是如此。

4. 數(shù)字 Infinity 和 NaN,以及值 null,都被認(rèn)為是 null。

5. 如果該值有一個 toJSON() 方法,它負(fù)責(zé)定義哪些數(shù)據(jù)將被序列化。

圖片

6. Date實例通過返回字符串實現(xiàn)toJSON()函數(shù)(同date.toISOString())。 

因此,它們被視為字符串。

圖片

7. 在包含循環(huán)引用的對象上執(zhí)行此方法會拋出錯誤。

8. 所有其他對象實例(包括 Map、Set、WeakMap 和 WeakSet)將只序列化它們的可枚舉屬性。

9.嘗試轉(zhuǎn)換BigInt類型的值時拋出錯誤。

自己實現(xiàn) JSON.stringify

理解功能的最好方法是自己去實現(xiàn)它。 下面我寫了一個簡單的函數(shù)來模擬JSON.stringify。

const jsonstringify = (data) => {
// Check if an object has a circular reference
const isCyclic = (obj) => {
// Use the Set data type to store detected objects
let stackSet = new Set()
let detected = false

const detect = (obj) => {
// If it is not an object type, you can skip it directly
if (obj && typeof obj != 'object') {
return
}
// When the object to be checked already exists in the stackSet, it means that there is a circular reference
if (stackSet.has(obj)) {
return detected = true
}
// Save the current obj as a stackSet
stackSet.add(obj)

for (let key in obj) {
if (obj.hasOwnProperty(key)) {
detect(obj[key])
}
}
// After the level detection is completed, delete the current object to prevent misjudgment
/*
For example:
an object's attribute points to the same reference.
If it is not deleted, it will be regarded as a circular reference
let tempObj = {
name: 'fatfish'
}
let obj4 = {
obj1: tempObj,
obj2: tempObj
}
*/
stackSet.delete(obj)
}

detect(obj)

return detected
}

// 7#:
// Executing this method on an object that contains a circular reference throws an error.

if (isCyclic(data)) {
throw new TypeError('Converting circular structure to JSON')
}

// 9#: An error is thrown when trying to convert a value of type BigInt
// An error is thrown when trying to convert a value of type bigint
if (typeof data === 'bigint') {
throw new TypeError('Do not know how to serialize a BigInt')
}

const type = typeof data
const commonKeys1 = ['undefined', 'function', 'symbol']
const getType = (s) => {
return Object.prototype.toString.call(s).replace(/\[object (.*?)\]/, '$1').toLowerCase()
}

// not an object
if (type !== 'object' || data === null) {
let result = data
// 4#:The numbers Infinity and NaN, as well as the value null, are all considered null.
if ([NaN, Infinity, null].includes(data)) {
result = 'null'
// 1#:undefined, Function, and Symbol are not valid JSON values.
// If any such values are encountered during conversion they are either omitted (when found in an object) or changed to null (when found in an array).
// JSON.stringify() can return undefined when passing in "pure" values like JSON.stringify(function() {}) or JSON.stringify(undefined).
} else if (commonKeys1.includes(type)) {
return undefined
} else if (type === 'string') {
result = '"' + data + '"'
}

return String(result)
} else if (type === 'object') {
// 5#: If the value has a toJSON() method, it's responsible to define what data will be serialized.
// 6#: The instances of Date implement the toJSON() function by returning a string (the same as date.toISOString()).
// Thus, they are treated as strings.
if (typeof data.toJSON === 'function') {
return jsonstringify(data.toJSON())
} else if (Array.isArray(data)) {
let result = data.map((it) => {
// 1#: If any such values are encountered during conversion they are either omitted (when found in an object) or changed to null (when found in an array).
return commonKeys1.includes(typeof it) ? 'null' : jsonstringify(it)
})

return `[${result}]`.replace(/'/g, '"')
} else {
// 2#:Boolean, Number, and String objects are converted to the corresponding primitive values during stringification, in accord with the traditional conversion semantics.
if (['boolean', 'number'].includes(getType(data))) {
return String(data)
} else if (getType(data) === 'string') {
return '"' + data + '"'
} else {
let result = []
// 8#: All the other Object instances (including Map, Set, WeakMap, and WeakSet) will have only their enumerable properties serialized.
Object.keys(data).forEach((key) => {
// 3#: All Symbol-keyed properties will be completely ignored, even when using the replacer function.
if (typeof key !== 'symbol') {
const value = data[key]
// 1#: undefined, Function, and Symbol are not valid JSON values.
if (!commonKeys1.includes(typeof value)) {
result.push(`"${key}":${jsonstringify(value)}`)
}
}
})

return `{${result}}`.replace(/'/, '"')
}
}
}
}

還有一個測試

// 1. Test basic features
console.log(jsonstringify(undefined)) // undefined
console.log(jsonstringify(() => { })) // undefined
console.log(jsonstringify(Symbol('fatfish'))) // undefined
console.log(jsonstringify((NaN))) // null
console.log(jsonstringify((Infinity))) // null
console.log(jsonstringify((null))) // null
console.log(jsonstringify({
name: 'fatfish',
toJSON() {
return {
name: 'fatfish2',
sex: 'boy'
}
}
}))
// {"name":"fatfish2","sex":"boy"}

// 2. Compare with native JSON.stringify
console.log(jsonstringify(null) === JSON.stringify(null));
// true
console.log(jsonstringify(undefined) === JSON.stringify(undefined));
// true
console.log(jsonstringify(false) === JSON.stringify(false));
// true
console.log(jsonstringify(NaN) === JSON.stringify(NaN));
// true
console.log(jsonstringify(Infinity) === JSON.stringify(Infinity));
// true
let str = "fatfish";
console.log(jsonstringify(str) === JSON.stringify(str));
// true
let reg = new RegExp("\w");
console.log(jsonstringify(reg) === JSON.stringify(reg));
// true
let date = new Date();
console.log(jsonstringify(date) === JSON.stringify(date));
// true
let sym = Symbol('fatfish');
console.log(jsonstringify(sym) === JSON.stringify(sym));
// true
let array = [1, 2, 3];
console.log(jsonstringify(array) === JSON.stringify(array));
// true
let obj = {
name: 'fatfish',
age: 18,
attr: ['coding', 123],
date: new Date(),
uni: Symbol(2),
sayHi: function () {
console.log("hello world")
},
info: {
age: 16,
intro: {
money: undefined,
job: null
}
},
pakingObj: {
boolean: new Boolean(false),
string: new String('fatfish'),
number: new Number(1),
}
}
console.log(jsonstringify(obj) === JSON.stringify(obj))
// true
console.log((jsonstringify(obj)))
// {"name":"fatfish","age":18,"attr":["coding",123],"date":"2021-10-06T14:59:58.306Z","info":{"age":16,"intro":{"job":null}},"pakingObj":{"boolean":false,"string":"fatfish","number":1}}
console.log(JSON.stringify(obj))
// {"name":"fatfish","age":18,"attr":["coding",123],"date":"2021-10-06T14:59:58.306Z","info":{"age":16,"intro":{"job":null}},"pakingObj":{"boolean":false,"string":"fatfish","number":1}}

// 3. Test traversable objects
let enumerableObj = {}

Object.defineProperties(enumerableObj, {
name: {
value: 'fatfish',
enumerable: true
},
sex: {
value: 'boy',
enumerable: false
},
})

console.log(jsonstringify(enumerableObj))
// {"name":"fatfish"}

// 4. Testing circular references and Bigint

let obj1 = { a: 'aa' }
let obj2 = { name: 'fatfish', a: obj1, b: obj1 }
obj2.obj = obj2

console.log(jsonstringify(obj2))
// TypeError: Converting circular structure to JSON
console.log(jsonStringify(BigInt(1)))
// TypeError: Do not know how to serialize a BigInt

// 1. Test basic featuresconsole.log(jsonstringify(undefined)) // undefined console.log(jsonstringify(() { })) // undefinedconsole.log(jsonstringify(Symbol('fatfish'))) // undefinedconsole.log(jsonstringify((NaN))) // nullconsole.log(jsonstringify((Infinity))) // nullconsole.log(jsonstringify((null))) // nullconsole.log(jsonstringify({name: 'fatfish',  toJSON() {    return {name: 'fatfish2',sex: 'boy'    }  }}))// {"name":"fatfish2","sex":"boy"}
// 2. Compare with native JSON.stringifyconsole.log(jsonstringify(null) === JSON.stringify(null));// trueconsole.log(jsonstringify(undefined) === JSON.stringify(undefined));// trueconsole.log(jsonstringify(false) === JSON.stringify(false));// trueconsole.log(jsonstringify(NaN) === JSON.stringify(NaN));// trueconsole.log(jsonstringify(Infinity) === JSON.stringify(Infinity));// truelet str = "fatfish";console.log(jsonstringify(str) === JSON.stringify(str));// truelet reg = new RegExp("\w");console.log(jsonstringify(reg) === JSON.stringify(reg));// truelet date = new Date();console.log(jsonstringify(date) === JSON.stringify(date));// truelet sym = Symbol('fatfish');console.log(jsonstringify(sym) === JSON.stringify(sym));// truelet array = [1, 2, 3];console.log(jsonstringify(array) === JSON.stringify(array));// truelet obj = {name: 'fatfish',age: 18,attr: ['coding', 123],date: new Date(),uni: Symbol(2),sayHi: function () { console.log("hello world") },info: {age: 16,intro: {money: undefined,job: null } },pakingObj: {boolean: new Boolean(false),string: new String('fatfish'),number: new Number(1), }}console.log(jsonstringify(obj) === JSON.stringify(obj)) // trueconsole.log((jsonstringify(obj)))// {"name":"fatfish","age":18,"attr":["coding",123],"date":"2021-10-06T14:59:58.306Z","info":{"age":16,"intro":{"job":null}},"pakingObj":{"boolean":false,"string":"fatfish","number":1}}console.log(JSON.stringify(obj))// {"name":"fatfish","age":18,"attr":["coding",123],"date":"2021-10-06T14:59:58.306Z","info":{"age":16,"intro":{"job":null}},"pakingObj":{"boolean":false,"string":"fatfish","number":1}}
// 3. Test traversable objectslet enumerableObj = {}
Object.defineProperties(enumerableObj, {name: {value: 'fatfish',enumerable: true },sex: {value: 'boy',enumerable: false },})
console.log(jsonstringify(enumerableObj))// {"name":"fatfish"}
// 4. Testing circular references and Bigint
let obj1 = { a: 'aa' }let obj2 = { name: 'fatfish', a: obj1, b: obj1 }obj2.obj = obj2
console.log(jsonstringify(obj2))// TypeError: Converting circular structure to JSONconsole.log(jsonStringify(BigInt(1)))// TypeError: Do not know how to serialize a BigInt

最后

以上就是我今天跟你分享的全部內(nèi)容,希望你能從今天的文章中學(xué)到新的知識。

責(zé)任編輯:華軒 來源: web前端開發(fā)
相關(guān)推薦

2023-02-27 15:44:17

Java開發(fā)技巧

2021-12-22 09:08:39

JSON.stringJavaScript字符串

2021-03-01 19:13:45

YAML程序員數(shù)據(jù)

2020-05-25 14:37:31

JSON.string前端秘密特性

2020-03-29 20:16:09

JavaScript前端技術(shù)

2024-03-25 00:10:00

JSON后端開發(fā)

2023-01-31 10:22:00

HiveMapReduce文件合并

2018-04-08 10:08:43

開發(fā)人員工具

2020-12-03 15:10:31

Linux開發(fā)

2023-10-23 09:48:00

2023-10-26 16:56:24

2023-07-12 07:56:13

CSS規(guī)則元素

2023-02-06 18:27:00

開發(fā)人員語言

2019-05-20 08:11:02

淘寶個性化推薦

2024-09-30 11:08:18

JSON局限性數(shù)據(jù)

2013-01-15 09:22:49

2019-10-11 10:03:02

負(fù)載均衡器LVS虛擬服務(wù)器

2024-07-17 14:12:07

開源工具開發(fā)管理模板

2024-11-04 14:18:32

JavaScript編程語言開發(fā)

2018-03-26 09:39:06

大數(shù)據(jù)IT互聯(lián)網(wǎng)
點贊
收藏

51CTO技術(shù)棧公眾號

国产亚洲人成网站| 欧美超碰在线| 日韩欧美在线视频观看| 欧美日韩精品中文字幕一区二区| 黄色av一级片| 欧美精品一区二区久久| 欧美日韩www| 毛片在线视频观看| 性xxxxbbbb| 石原莉奈在线亚洲二区| 日韩视频―中文字幕| av在线免费观看不卡| 美女的胸无遮挡在线观看| 国产亚洲精品资源在线26u| 国产日韩在线看| 精品无码m3u8在线观看| 亚洲电影男人天堂| 欧美精品电影在线播放| 国产亚洲黄色片| 国产资源在线观看| 国产九色精品成人porny| 91国内在线视频| 日本免费www| 91麻豆精品激情在线观看最新| 欧美性高潮在线| 中文字幕色一区二区| 国产香蕉在线观看| 美女一区二区视频| 97精品国产97久久久久久免费| 怡红院一区二区三区| 久久在线观看| 91精品福利视频| 日韩a级黄色片| 国产黄在线看| 99久久亚洲一区二区三区青草| 国产在线观看精品| 秋霞精品一区二区三区| 欧美区一区二| 中文字幕欧美亚洲| 粉嫩av蜜桃av蜜臀av| 亚洲va欧美va人人爽成人影院| 色噜噜狠狠色综合欧洲selulu| 欧美极品少妇无套实战| 在线观看黄av| 91视频www| 亚洲曰本av电影| 中文字幕在线网址| 久久先锋影音| 亚洲97在线观看| 欧美日韩亚洲国产另类| 日韩大片在线| 亚洲欧美在线播放| japanese在线观看| 91成人福利| 91精品国产全国免费观看 | 成人久久久精品国产乱码一区二区 | 热久久最新网址| 番号在线播放| 久久久亚洲高清| 国产一区在线观| 亚洲精品成人电影| 国产精品资源网| 国产在线拍揄自揄视频不卡99| 无码人妻久久一区二区三区 | 青青草手机视频在线观看| 久久影院一区| 在线看日韩av| 中文字幕欧美激情极品| jlzzjlzz亚洲女人| 尤物tv国产一区| 免费在线观看a视频| 国内亚洲精品| 一个色综合导航| 国产精品成人无码免费| 成人影视亚洲图片在线| 中文字幕亚洲第一| 可以免费看av的网址| 91亚洲人成网污www| 久久精品国产欧美激情| 亚洲女人久久久| 亚洲中无吗在线| 九九精品在线播放| 日本特黄一级片| 99这里有精品| 欧美在线观看一区二区三区| 国产精品100| 丝袜亚洲精品中文字幕一区| 国产精品日日摸夜夜添夜夜av| 一区二区乱子伦在线播放| 免费视频最近日韩| 成人性生交大片免费看小说| 亚洲国产精彩视频| wwwwww.欧美系列| 欧洲精品久久| 免费大片黄在线观看视频网站| 亚洲视频一区二区免费在线观看| 国内自拍中文字幕| 成人观看网址| 在线看一区二区| 在线免费看v片| 成人春色在线观看免费网站| 国产视频一区在线| 黄色免费一级视频| 欧美久久99| 日产精品久久久一区二区福利| 这里只有精品6| 国产馆精品极品| 欧美高清性xxxxhd | 中文字幕日韩电影| 九九热精品在线观看| 另类激情亚洲| 成人国产在线激情| 亚洲三区在线播放| 国产精品白丝在线| 一区二区传媒有限公司| 日韩久久一区| 亚洲精品网站在线播放gif| 四虎影视1304t| 99成人在线| 国产一区二中文字幕在线看| 天天干天天操av| 中文字幕在线观看一区| 国产综合av在线| 高清一区二区| 亚洲色图综合久久| 久久精品无码人妻| 看电视剧不卡顿的网站| 精品欧美一区二区精品久久| 精品麻豆一区二区三区| 91久久精品一区二区三区| 久久久高清视频| 日韩在线视频精品| 欧洲一区二区视频| 亚洲av综合色区无码一二三区| 国产清纯白嫩初高生在线观看91| 精品国产一区二区三区无码| 欧美亚洲综合视频| 亚洲欧美激情在线视频| 国产一级黄色av| 久久er精品视频| 欧美综合77777色婷婷| 黄色软件视频在线观看| 日韩精品一区二区在线| 日本一级特级毛片视频| 天堂午夜影视日韩欧美一区二区| 国产伦精品一区二区三| av在线免费观看网址| 欧美日韩亚洲综合在线| 亚洲第一视频区| 媚黑女一区二区| 国产专区一区二区| 福利在线导航136| 欧美一区二区三区在线电影| 北条麻妃在线观看视频| 奇米影视7777精品一区二区| 日本一区免费在线观看| 自拍偷拍亚洲视频| 亚洲精品第一国产综合精品| 国产亚洲精品久久久久久无几年桃 | 日韩欧美在线免费| 香港三日本8a三级少妇三级99| 国产精品v欧美精品v日本精品动漫| 成人性生交大片免费观看嘿嘿视频| 91官网在线| 欧美性色aⅴ视频一区日韩精品| 中文字幕一二三四区| 国产精品久久久久久久久久妞妞 | 极品颜值美女露脸啪啪| 国产尤物一区二区| 黄色一级视频播放| 精品国产麻豆| 久久97精品久久久久久久不卡| 国产日韩在线观看一区| 亚洲四区在线观看| 奇米777在线视频| 亚洲欧美亚洲| 国产精品国产亚洲精品看不卡15| 黄色的视频在线观看| 亚洲国产成人精品女人久久久 | 在线观看日韩电影| www久久久久久久| 毛片一区二区三区| 成人免费看片视频在线观看| 亚洲国产中文在线| 97热精品视频官网| 久香视频在线观看| 欧美日韩在线免费视频| 国产在线一卡二卡| 成人性生交大片免费看中文| 国产免费黄色av| 残酷重口调教一区二区| 亚洲qvod图片区电影| h片精品在线观看| 亚洲女成人图区| 伊人网视频在线| 亚洲美女偷拍久久| 亚洲精品女人久久久| 免费日本视频一区| 屁屁影院ccyy国产第一页| 日本成人中文| 国产美女高潮久久白浆| 日本不卡影院| 亚洲欧美日韩中文在线| 91亚洲精品国偷拍自产在线观看 | 99久久亚洲精品蜜臀| 99中文视频在线| a欧美人片人妖| 精品国产一区久久久| 手机看片福利永久| 欧美视频日韩视频在线观看| 免费中文字幕视频| 国产亚洲精品超碰| 欧美午夜精品一区二区| 日日摸夜夜添夜夜添精品视频| 在线播放 亚洲| 日本成人a网站| 成人福利视频在线观看| 98色花堂精品视频在线观看| 中文字幕日韩综合av| 欧美一区二区三区黄片| 欧美体内she精视频| 日本午夜小视频| 国产精品污www在线观看| 国产精品亚洲一区二区无码| 免费观看在线色综合| 日韩在线综合网| 久久精品亚洲人成影院| 欧美日韩在线一二三| 澳门精品久久国产| 成人激情视频免费在线| 日本免费久久| 久久久久久久久久久免费| 日本视频在线观看| 亚洲人成在线观| 午夜福利视频一区二区| 日韩一二三四区| 一本色道久久综合亚洲| 日本精品一区二区三区高清 | 黄色一级片av| 大片网站久久| 欧美一级二级三级九九九| 林ゆな中文字幕一区二区| 99精品99久久久久久宅男| 日韩大陆av| 国产精品你懂得| 写真福利精品福利在线观看| 69久久夜色精品国产69乱青草| 性欧美videoshd高清| 日韩视频在线一区| 99se视频在线观看| 国产亚洲在线播放| 欧美扣逼视频| 日韩精品一区二区视频| 天堂在线视频免费| 亚洲а∨天堂久久精品喷水| 亚洲成人久久精品| 日韩精品一区二区三区四区 | 亚洲iv一区二区三区| 国产在线一区不卡| 成人免费视频97| 亚洲ww精品| 成人日韩在线电影| 91麻豆精品一二三区在线| 国产自摸综合网| 亚洲网站三级| 91九色单男在线观看| 国产精品日韩精品在线播放| 国产在线999| 欧美国产亚洲精品| 国产精品乱子乱xxxx| 精品三级av| 久久久久久久久久久一区| 日韩福利视频一区| 欧美日韩高清在线一区| 米奇777超碰欧美日韩亚洲| 鲁丝片一区二区三区| 最新亚洲精品| 亚洲国产精品毛片| 91精品天堂福利在线观看| japanese在线播放| 亚洲裸体俱乐部裸体舞表演av| 日韩中文字幕在线视频观看| 美女日韩在线中文字幕| 欧美美女性视频| 国产一区二区三区免费| 国产精品熟妇一区二区三区四区 | 五月激情综合网| 国产成人亚洲精品自产在线 | 一区二区日韩视频| 欧美一二三四在线| 天天干,天天操,天天射| 亚洲天堂av电影| 高潮毛片在线观看| 91国产美女视频| 视频精品导航| 91一区二区三区| 色爱av综合网| 亚洲一区三区| 亚洲视频福利| 日本熟妇人妻中出| 国产精品一区二区x88av| 国产一级伦理片| 国产精品美日韩| 日韩人妻无码一区二区三区99| 91福利在线导航| 99视频在线观看免费| 亚洲美女精品久久| 2021国产在线| 欧美影院久久久| 成人午夜888| 美乳视频一区二区| 亚洲色图国产| 欧美成人精品欧美一级乱| 国产一区二区三区四| 日韩一级av毛片| 亚洲成av人综合在线观看| 亚洲一区 中文字幕| 亚洲国产欧美久久| 精品176二区| 国产va免费精品高清在线| 日韩一区二区三区高清在线观看| 欧美一区二区三区成人久久片| 欧美视频成人| 57pao国产成永久免费视频| 97久久精品人人做人人爽50路| 性生交大片免费全黄| 色呦呦一区二区三区| 国精产品一品二品国精品69xx | 一区二区视频观看| 亚洲天堂av一区| 高潮毛片又色又爽免费| 亚洲精品一线二线三线| 秋霞午夜在线观看| 国产不卡一区二区在线播放| 老牛精品亚洲成av人片| 中国一级黄色录像| 日本不卡一区二区| 9.1成人看片免费版| 亚洲国产精品久久久男人的天堂| 国产精品一区二区免费视频| 影音先锋欧美精品| 26uuu亚洲电影| 国产精品久久国产精品| 亚洲激情中文在线| 国产视频1区2区3区| 国产午夜精品福利| 手机看片久久久| 亚洲黄页网在线观看| 后进极品白嫩翘臀在线播放| 51国偷自产一区二区三区的来源| 99精品在线观看| 尤物国产在线观看| 国产蜜臀av在线一区二区三区| 无码任你躁久久久久久久| 国产视频欧美视频| 中文字幕成在线观看| 精品无人乱码一区二区三区的优势 | www.四虎在线| 亚洲一区二区五区| 亚洲精品成人区在线观看| 久久97久久97精品免视看| 中文字幕日韩高清在线| 国内自拍中文字幕| 国产suv一区二区三区88区| 欧美日韩精品在线观看视频| 4438x成人网最大色成网站| 日本美女在线中文版| 成人在线激情视频| 女生裸体视频一区二区三区| 四虎国产精品免费| 亚洲午夜久久久久| 日韩永久免费视频| 91精品国产网站| 免费精品国产| 国产精品天天av精麻传媒| 国产精品午夜在线| 国产一区二区小视频| 久久99亚洲热视| 91欧美极品| 欧美女人性生活视频| 久久精品亚洲精品国产欧美| 中文在线观看免费高清| 草民午夜欧美限制a级福利片| 9l视频自拍蝌蚪9l视频成人| 久久综合九色综合88i| 久久嫩草精品久久久精品| 最近中文字幕在线免费观看| 久久综合久久88| 国产成人一二片| 97国产在线播放| 中文字幕精品一区二区三区精品| 国产内射老熟女aaaa∵| 久久久久久久久国产| 妖精视频一区二区三区免费观看| av污在线观看| 亚洲自拍偷拍九九九| 国产在线观看黄| 亚洲影视中文字幕| 午夜亚洲福利在线老司机| 精品一区二区在线观看视频|