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

5年前,學習 Null 和Undefined ,現在有了新的認知,看看這位人才怎么說?

開發 前端
JavaScript有兩個這樣的非值:undefined和null。在這篇博文中,我們將研究它們有什么不同,以及如何最好地使用或避免它們。

[[413681]]

許多編程語言都有一個稱為null的非值。它指示一個變量當前不指向一個對象,例如,當它還沒有初始化的時候。

相比之下,JavaScript有兩個這樣的非值:undefined和null。在這篇博文中,我們將研究它們有什么不同,以及如何最好地使用或避免它們。

1. undefined vs. null

這兩種值非常相似,經?;Q使用。因此,它們的區別是微妙的。

1.1 ECMAScript語言規范:undefined vs. null

ECMAScript語言規范對其描述如下。

  • undefined是 "當一個變量沒有被賦值時使用"
  • null "表示有意不存在任何對象值"

1.2 兩個非值--一個無法消除的錯誤

在JavaScript中擁有兩個非值現在被認為是一個設計錯誤(甚至被JavaScript的創造者Brendan Eich認為)。

那為什么不從 JavaScript 中刪除其中的一個值呢?JavaScript 的一個核心原則是絕不破壞向后兼容。這個原則有很多好處。它最大的缺點是,設計上的錯誤無法被刪除。

1.3 undefined和null的歷史

在Java中(它啟發了JavaScript的許多方面),初始化值取決于變量的靜態類型。

  • 具有對象類型的變量被初始化為null。
  • 每個原始類型都有自己的初始化值。例如,int變量被初始化為0。

在JavaScript中,每個變量都可以容納對象值和基本類型值。因此,如果null意味著 "不是一個對象",那么JavaScript也需要一個初始化值,意味著 "既不是一個對象也不是一個原始值"。這個初始化值就是 undefined。

undefined 的出現

如果一個變量myVar還沒有被初始化,它的值是undefined。

  1. let myVar; 
  2. assert.equal(myVar, undefined); 

如果一個屬性.unknownProp丟失,訪問該屬性會產生undefined的值。

  1. const obj = {}; 
  2. assert.equal(obj.unknownProp, undefined); 

如果一個函數有一個沒有參數的返回語句,該函數隱含地返回undefined。

  1. function myFunc() { 
  2.   return
  3. assert.equal(myFunc(), undefined); 

如果一個參數x被省略了,語言將該參數初始化為undefined。

  1. function myFunc() { 
  2.   return
  3. assert.equal(myFunc(), undefined); 
  4. myFunc(); 

通過obj?.someProp的可選鏈路,如果obj未定義或為空,則返回未定義。

  1. > undefined?.someProp 
  2. undefined 
  3. null?.someProp 
  4. undefined 

3.null 出現情況

一個對象的原型要么是一個對象,要么在原型鏈的末端是null。Object.prototype沒有原型。

  1. > Object.getPrototypeOf(Object.prototype) 
  2. null 

如果我們將一個正則表達式(如/a/)與一個字符串(如'x')相匹配,我們要么得到一個帶有匹配數據的對象(如果匹配成功),要么得到空(如果匹配失敗)。

  1. > /a/.exec('x'
  2. null 

JSON數據格式不支持undefined,只支持null。

  1. > JSON.stringify({a: undefined, b: null}) 
  2. '{"b":null}' 

4.特別處理 undefined 或 null 的運算符

4.1 undefined 和參數默認值

在以下情況下,將使用參數默認值。

  • 缺少一個參數。
  • 一個參數的值是undefined。

例如:

  1. function myFunc(arg='abc') { 
  2.   return arg; 
  3. assert.equal(myFunc('hello'), 'hello'); 
  4. assert.equal(myFunc(), 'abc'); 
  5. assert.equal(myFunc(undefined), 'abc'); 

undefined也觸發了參數的默認值,這說明它是一個元值。

下面的例子說明了這一點的用處。

  1. function concat(str1='', str2='') { 
  2.   return str1 + str2; 
  3. function twice(str) { // (A) 
  4.   return concat(str, str); 

在A行,我們沒有為str指定一個參數默認值。當這個參數缺失時,我們把這個狀態轉發給concat(),讓它選擇一個默認值。

4.2 undefined 的和解構的默認值

解構中的缺省值與參數缺省值的工作原理類似--如果一個變量在數據中沒有匹配,或者它與undefined的變量匹配,就會使用它們。

  1. const [a='a'] = []; 
  2. assert.equal(a, 'a'); 
  3.  
  4. const [b='b'] = [undefined]; 
  5. assert.equal(b, 'b'); 
  6.  
  7. const {prop: c='c'} = {}; 
  8. assert.equal(c, 'c'); 
  9.  
  10. const {prop: d='d'} = {prop: undefined}; 
  11. assert.equal(d, 'd'); 

4.3 undefined 和 null 以及可選鏈

當通過 value?.prop 進行可選的鏈接時

  • 如果value是undefined或null,則返回 undefined。也就是說,只要value.prop會拋出一個異常,就會發生這種情況。
  • 否則,返回value.prop。
  1. function getProp(value) { 
  2.   // optional static property access 
  3.   return value?.prop; 
  4. assert.equal( 
  5.   getProp({prop: 123}), 123); 
  6. assert.equal( 
  7.   getProp(undefined), undefined); 
  8. assert.equal( 
  9.   getProp(null), undefined); 

下面兩個操作的效果類似。

  1. obj?.[«expr»] // optional dynamic property access 
  2. func?.(«arg0», «arg1») // optional function or method call 

4.4 undefined 和 null 和 nullish 聚結

nullish 合并算子??如果一個值undefined或為null,則允許我們使用默認值:

  1. > undefined ?? 'default value' 
  2. 'default value' 
  3. null ?? 'default value' 
  4. 'default value' 
  5.  
  6. > 0 ?? 'default value' 
  7. > 123 ?? 'default value' 
  8. 123 
  9. '' ?? 'default value' 
  10. '' 
  11. 'abc' ?? 'default value' 
  12. 'abc' 

null合并賦值操作符??=:

  1. function setName(obj) { 
  2.   obj.name ??= '(Unnamed)'
  3.   return obj; 
  4. assert.deepEqual( 
  5.   setName({}), 
  6.   {name'(Unnamed)'
  7. ); 
  8. assert.deepEqual( 
  9.   setName({name: undefined}), 
  10.   {name'(Unnamed)'
  11. ); 
  12. assert.deepEqual( 
  13.   setName({namenull}), 
  14.   {name'(Unnamed)'
  15. ); 
  16. assert.deepEqual( 
  17.   setName({name'Jane'}), 
  18.   {name'Jane'
  19. ); 

5. 處理 undefined 和 null

下面分享一下我們自己的代碼中處理undefined 和null的最常見方法。

5.1 undefined 或 null 都不能作為實際值使用

舉例,我們可能希望一個屬性file.title永遠存在,并且永遠是一個字符串。有兩種常見的方法來實現這一點。

這里,只檢查undefined和null,而不檢查一個值是否是字符串。你必須自己決定是否要把它作為一個額外的安全措施來實施。

5.1 undefined 和 null 都是禁止的

如下所示

  1. function createFile(title) { 
  2.   if (title === undefined || title === null) { 
  3.     throw new Error('`title` must not be nullish'); 
  4.   } 
  5.   // ··· 

為什么選擇這種方法?

我們想把undefined和null當作一樣的東西,因為JavaScript代碼經常這樣做--比如說。

  1. // 檢測一個屬性是否存在 
  2. if (!obj.requiredProp) { 
  3.   obj.requiredProp = 123; 
  4.  
  5. const myValue = myParameter ?? 'some default'

如果我們的代碼中出現了問題,出現了undefined或null,我們希望它盡可能快地失敗。

5.1.2 undefined 和 null 都會觸發默認值

如下所示

  1. function createFile(title) { 
  2.   title ??= '(Untitled)'
  3.   // ··· 

我們不能在這里使用參數缺省值,因為它只由undefined 觸發。相反,我們依靠nullish 合并賦值運算符??=。

為什么選擇這種方法?

  • 我們想把undefined和null同等對待(見上一節)。
  • 我們希望我們的代碼能夠穩健地、無聲地處理 undefined 和null。

5.2 undefined 或 null 都是“關閉”值

例如,我們可能希望一個屬性file.title是一個字符串或 "關閉"(文件沒有標題)。有幾種方法可以實現這一點。

5.2.1 null是 "關閉的 "值

  1. function createFile(title) { 
  2.   if (title === undefined) { 
  3.     throw new Error('`title` must not be undefined'); 
  4.   } 
  5.   return {title}; 

另外,undefined可以觸發一個默認值。

  1. function createFile(title = '(Untitled)') { 
  2.   return {title}; 

為什么選擇這種方法?

  • 我們需要一個表示“關閉”的非值。
  • 我們不希望我們的非值觸發參數默認值和解構默認值。
  • 我們想把非值字符串化為JSON(這是我們不能用undefined做的)。

5.2.2 undefined 是"關閉的 "值。

  1. function createFile(title) { 
  2.   if (title === null) { 
  3.     throw new Error('`title` must not be null'); 
  4.   } 
  5.   return {title}; 

為什么選擇這種方法?

  • 我們需要一個表示“關閉”的非值。
  • 我們確實想讓我們的非值觸發參數默認值和解構默認值。

5.2.3 為什么不同時使用undefined和null作為 "關閉 "的值?

當接收一個值時,把undefined和null都當作 "不是一個值 "是有意義的。然而,當我們創建值時,我們希望不含糊,以便處理這些值時保持簡單。

這指向了一種不同的方法。如果我們需要一個 "關閉"的值,但又不想使用undefined或null作為這樣的值,怎么辦?請往下看。

5.3 處理“關閉”的其他方式

5.3.1 特殊值

我們可以創建一個特殊的值,每當屬性.title被關閉時,我們就使用這個值。

  1. const UNTITLED = Symbol('UNTITLED'); 
  2. const file = { 
  3.   title: UNTITLED, 
  4. }; 

5.3.2 空對象模式

空對象模式來自于面向對象的編程。

  • 一個共同的超類的所有子類都有相同的接口。
  • 每個子類都實現了一個實例運行的不同模式。
  • 其中一個模式是 "null"。

在下面的例子中,UntitledFile實現了 "null" 模式。

  1. // 抽象的超類 
  2. class File { 
  3.   constructor(content) { 
  4.     if (new.target === File) { 
  5.       throw new Error('Can’t instantiate this class'); 
  6.     } 
  7.     this.content = content; 
  8.   } 
  9.  
  10. class TitledFile extends File { 
  11.   constructor(content, title) { 
  12.     super(content); 
  13.     this.title = title; 
  14.   } 
  15.   getTitle() { 
  16.     return this.title; 
  17.   } 
  18.  
  19. class UntitledFile extends File { 
  20.   constructor(content) { 
  21.     super(content); 
  22.   } 
  23.   getTitle() { 
  24.     return '(Untitled)'
  25.   } 
  26.  
  27. const files = [ 
  28.   new TitledFile('Dear diary!''My Diary'), 
  29.   new UntitledFile('Reminder: pick a title!'), 
  30. ]; 
  31.  
  32. assert.deepEqual( 
  33.   files.map(f => f.getTitle()), 
  34.   [ 
  35.     'My Diary'
  36.     '(Untitled)'
  37.   ]); 

我們也可以只對標題使用空對象模式(而不是對整個文件對象)。

5.3.3 Maybe 類型

Maybe 類型是一種函數編程技術。

  1. function getTitle(file) { 
  2.   switch (file.title.kind) { 
  3.     case 'just'
  4.       return file.title.value; 
  5.     case 'nothing'
  6.       return '(Untitled)'
  7.     default
  8.       throw new Error(); 
  9.   } 
  10.  
  11. const files = [ 
  12.   { 
  13.     title: {kind: 'just', value: 'My Diary'}, 
  14.     content: 'Dear diary!'
  15.   }, 
  16.   { 
  17.     title: {kind: 'nothing'}, 
  18.     content: 'Reminder: pick a title!'
  19.   }, 
  20. ]; 
  21.  
  22. assert.deepEqual( 
  23.   files.map(f => getTitle(f)), 
  24.   [ 
  25.     'My Diary'
  26.     '(Untitled)'
  27.   ]); 

我們可以通過Arrays對 "just "和 "nothing "進行編碼。我們的方法的好處是,它得到了TypeScript的良好支持(通過判別性聯合)。

6.我的方法

我不喜歡用undefined作為 "關閉 "的值,有三個原因。

  • undefined經常意外地出現在JavaScript中。
  • ndefined會觸發參數和結構化的默認值(出于同樣的原因,有些人喜歡undefined)。

因此,如果我需要一個特殊的值,我會使用以下兩種方法中的一種。

  • 我使用null作為一個 "關閉 "的值。(作為一個旁觀者,這種方法在TypeScript中得到了比較好的支持)。)
  • 我通過上述的技術之一來避免undefined和null。這樣做的好處是比較干凈,壞處是涉及更多的工作。

作者:Michael Thiessen

譯者:前端小智

來源:dev原文:https://2ality.com/2021/01/undefined-null-revisited.html

 

責任編輯:姜華 來源: 大遷世界
相關推薦

2021-02-04 14:24:25

5G網絡運營商

2018-04-03 14:03:28

2019-10-31 15:45:25

Java薪酬語言

2020-07-31 16:54:52

戴爾

2018-08-27 09:28:02

Windows 95WindowsAPP

2022-05-05 09:14:41

AlpineDocker鏡像開發

2017-01-20 16:01:26

物聯網網絡安全架構

2017-12-26 00:31:04

2012-07-03 10:16:57

OpenFlowSDN軟件定義網絡

2023-07-07 08:15:18

JavaPython編寫

2022-03-16 18:38:06

AI特斯拉神經網絡

2012-06-12 10:07:22

Web

2020-11-24 06:00:55

PythonPython之父編程語言

2018-01-31 11:53:13

傳統企業數字化轉型CIO

2015-11-09 15:19:53

2019-03-06 08:37:46

數據科學數據科學家Python

2020-11-23 10:40:08

比特幣加密貨幣區塊鏈

2020-07-28 08:14:30

JavaScript開發技術

2015-11-03 14:45:58

點贊
收藏

51CTO技術棧公眾號

不卡的日韩av| 91插插插插插插| 亚洲精品555| 国产精品久久久久影视| 99精彩视频在线观看免费| 国产黄色片视频| 欧美一区二区性| 日韩午夜精品视频| 99久久久无码国产精品6| 在线免费观看黄| 成人污视频在线观看| 日本a级片电影一区二区| 97在线观看免费高| 国产成+人+综合+亚洲欧美| 亚洲色图另类专区| 久久成人资源| 精品国产av鲁一鲁一区| 视频一区国产视频| 欧美极品美女视频网站在线观看免费| 师生出轨h灌满了1v1| 9i看片成人免费高清| 亚洲精品综合在线| 日本一区二区三区视频免费看 | 欧美在线 | 亚洲| 日本中文一区二区三区| 在线观看亚洲区| 亚洲天堂资源在线| 日韩黄色av| 欧美日韩国产高清一区| 欧洲av无码放荡人妇网站| 欧美野外wwwxxx| 一区在线观看免费| 青青草久久网络| 天堂成人在线| 成人午夜精品一区二区三区| 国产精品视频自拍| 国产av无码专区亚洲av毛网站| 麻豆国产一区| 一区二区三区不卡视频在线观看 | 国产免费av观看| 久久久国产精品一区二区中文| 一区二区三区天堂av| 日本高清久久久| 国产蜜臀在线| 亚洲欧美福利一区二区| 亚洲国产婷婷香蕉久久久久久99 | 国内精品久久久久影院一蜜桃| 欧美理论电影在线播放| 很污很黄的网站| 欧美成人milf| 日韩中文字在线| 纪美影视在线观看电视版使用方法| 亚洲专区**| 欧美一区二区三区免费大片| www午夜视频| 精品久久福利| 777色狠狠一区二区三区| 欧美精品卡一卡二| 大香伊人久久| 五月天国产精品| 日韩在线综合网| 中文一区一区三区高中清不卡免费| 国产精品久久久久久久久久免费看 | 51xx午夜影福利| 国产在线高清理伦片a| 亚洲天堂av老司机| 蜜臀av性久久久久蜜臀av| 2024最新电影在线免费观看| 亚洲欧美激情插 | 亚洲在线免费视频| 国产成人精品免费看视频| 国产精品一区二区男女羞羞无遮挡| 日韩av毛片网| 伊人成人在线观看| 国产曰批免费观看久久久| 99re视频在线播放| 色屁屁草草影院ccyycom| www久久久久| 欧洲精品国产| 国产福利在线播放麻豆| 亚洲一区中文日韩| 国产成人精品视频免费看| 成人啊v在线| 欧美一级一级性生活免费录像| 国产理论在线播放| 亚洲二区av| 亚洲成年网站在线观看| 久久亚洲AV无码专区成人国产| 狼人精品一区二区三区在线| 亚洲毛片在线观看.| 精品丰满少妇一区二区三区| 午夜精品av| 欧美一级电影免费在线观看| 亚洲天堂手机在线| 成人综合在线观看| 手机成人在线| 97超碰资源站在线观看| 婷婷久久综合九色国产成人| 亚洲综合色在线观看| 9l视频自拍九色9l视频成人| 日韩一区二区在线免费观看| 在线观看日本www| 日韩成人av在线资源| 中文字幕少妇一区二区三区| 日产精品久久久久| 另类成人小视频在线| 国产精选在线观看91| 91美女视频在线| 午夜精品成人在线视频| 天堂在线中文在线| 免费看日本一区二区| 国产午夜精品视频免费不卡69堂| 亚洲精品乱码久久久久久久久久久久| 亚洲永久精品唐人导航网址| 免费av在线一区| av手机天堂网| 白白色亚洲国产精品| 在线亚洲美日韩| 欧美男女交配| 亚洲成成品网站| 国产探花在线播放| 久久99精品一区二区三区三区| 成人性生交大片免费观看嘿嘿视频 | 岛国成人毛片| 亚洲福利一区二区三区| 九九九九九国产| 精品国产乱码久久久| 91黄色8090| 成人毛片在线免费观看| 中文字幕一区二区视频| 17c丨国产丨精品视频| 日韩午夜电影免费看| 亚洲色图色老头| 国产日韩一区二区在线| 欧美少妇激情| 国产亚洲精品一区二555| 女性裸体视频网站| 欧美午夜不卡| 国产精品日韩在线| 国产天堂素人系列在线视频| 福利视频一区二区| 婷婷五月精品中文字幕| 欧美亚洲不卡| 成人午夜电影免费在线观看| 超碰人人在线| 欧美一区二区视频在线观看| 日本护士做爰视频| 国精品一区二区三区| 97久久天天综合色天天综合色hd | 日本精品一区二区三区四区| 青青热久免费精品视频在线18| 色狠狠色噜噜噜综合网| 中文字幕一区二区三区人妻电影| 重囗味另类老妇506070| 91情侣偷在线精品国产| 黄视频网站在线| 欧美一级爆毛片| 久久久美女视频| 99在线精品一区二区三区| www.av中文字幕| 香蕉久久夜色精品国产使用方法| 久热精品视频在线观看| hs视频在线观看| 亚洲一区二区欧美激情| 先锋资源av在线| 中文字幕免费精品| 国产a一区二区| 麻豆mv在线看| 在线视频欧美日韩精品| 在线能看的av| 成人毛片在线观看| dy888午夜| 超碰一区二区三区| 97香蕉久久超级碰碰高清版| 免费在线观看一级毛片| 欧美日韩在线不卡| 91精品国自产在线| 久久成人免费网站| 国产夫妻自拍一区| 亚洲男人都懂第一日本| 国产精品美女免费看| 男男电影完整版在线观看| 欧美日韩国产精品自在自线| 精品少妇久久久| 久久女同性恋中文字幕| 午夜视频你懂的| 国产专区一区| 99国产超薄丝袜足j在线观看| 好吊日视频在线观看| 欧美日韩免费在线视频| 在线观看免费小视频| 国产一区二区三区四区五区入口| 一区二区三区四区免费视频| 一区二区三区高清在线观看| 国产99视频精品免视看7| 黄色网在线播放| 91精品国产色综合久久ai换脸| 日本免费网站视频| 美女性感视频久久| 全黄性性激高免费视频| 日本久久一二三四| 国产丝袜不卡| 另类一区二区三区| 久久久av一区| 蜜芽tv福利在线视频| 色美美综合视频| 久久午夜无码鲁丝片午夜精品| 粉嫩av一区二区三区在线播放 | 久操视频在线观看免费| 粉嫩嫩av羞羞动漫久久久| 久久这里只精品| 夜间精品视频| 日产国产精品精品a∨| 97青娱国产盛宴精品视频| 欧美激情精品久久久| porn视频在线观看| 欧美一区二区三区视频| 天堂免费在线视频| 高跟丝袜欧美一区| 久草视频在线免费看| 国产精品免费视频一区| av小说在线观看| 99久久亚洲一区二区三区青草| www黄色在线| 亚洲第一天堂| 色一情一区二区三区四区| 日韩av系列| 国产精品一区二区三区四区五区 | 亚洲午夜精品一区二区三区他趣| 四虎永久免费观看| 欧美在线播放| 影音先锋欧美资源| av中文一区| 国产精品毛片一区视频| 国产一区精品二区| 国产免费一区二区三区在线能观看| 丝袜国产在线| 麻豆国产va免费精品高清在线| 少妇高潮一区二区三区69| 日韩欧美一级精品久久| av片免费播放| 日韩午夜在线观看| 亚洲国产精品suv| 欧洲av一区二区嗯嗯嗯啊| 成人午夜淫片100集| 欧美日韩在线视频首页| 黄色片子在线观看| 日韩理论片网站| 精品无码久久久久成人漫画| 亚洲激情图片一区| 久久国产露脸精品国产| 亚洲综合一二区| 精品无码m3u8在线观看| 亚洲福利视频一区| 亚洲伊人成人网| 一区二区三区欧美在线观看| 欧美黑人精品一区二区不卡| 亚洲精品成人精品456| 国内精品卡一卡二卡三| 中文字幕不卡在线观看| www中文在线| 亚洲视频在线一区二区| 国产大学生自拍| 亚洲成在人线免费| 欧美 日韩 精品| 亚洲成人免费在线| 综合激情网五月| 欧美色综合网站| 91精品中文字幕| 欧美专区日韩专区| 国产又爽又黄的视频| 色综合久久中文综合久久97| 在线观看 中文字幕| 一本大道久久a久久精二百| 中文字幕av久久爽| 日韩一区二区在线观看| 天天爱天天干天天操| 亚洲人成亚洲人成在线观看| 日本免费在线观看| 欧美激情一区二区三区成人| 在线āv视频| 91av免费观看91av精品在线| 国产精品蜜月aⅴ在线| 97久久人人超碰caoprom欧美| 欧美成年网站| 精品中文字幕人| 99久久99久久精品国产片果冰| 亚洲精品不卡| 欧美三级网页| 国产精彩免费视频| 国产高清视频一区| 亚洲熟妇一区二区三区| 亚洲精品乱码久久久久久日本蜜臀| 久久99久久99精品免费看小说| 国产精品美女久久久久av爽李琼| 91成人精品一区二区| 一区二区在线观看免费视频播放| 岛国毛片在线观看| 日韩欧美综合在线视频| jlzzjlzzjlzz亚洲人| 亚洲欧洲国产伦综合| a篇片在线观看网站| 国产成人短视频| 成人国产一区| 国产色综合一区二区三区| 91精品久久久久久久蜜月| 超碰10000| 热久久免费视频| 香港三日本8a三级少妇三级99| 久久夜色精品国产欧美乱极品| av在线网站观看| 亚洲私人影院在线观看| 日本久久综合网| 亚洲国产日韩欧美综合久久| 国产美女av在线| 国产精品无码专区在线观看| 少妇高潮一区二区三区| 少妇大叫太大太粗太爽了a片小说| 亚洲激情偷拍| 免费人成视频在线播放| av不卡在线观看| 麻豆chinese极品少妇| 欧美日韩在线亚洲一区蜜芽| 韩国三级av在线免费观看| 97精品视频在线播放| 亚洲网一区二区三区| 综合一区中文字幕| 蜜桃视频一区二区三区在线观看| 四虎国产精品永久免费观看视频| 成人动漫视频在线| 一区二区视频免费看| 欧美日韩精品一区二区天天拍小说| 国产绿帽一区二区三区| 最近2019年日本中文免费字幕 | 欧美国产日韩一区| 亚洲一级少妇| 久久精品丝袜高跟鞋| 日韩午夜av在线| 小毛片在线观看| 精品magnet| 天天干天天做天天操| 91精品国产高清久久久久久久久| 成人在线中文| 亚洲综合欧美日韩| 久久超级碰视频| 精品在线观看一区| 欧美日韩加勒比精品一区| 人妻与黑人一区二区三区| 久久久久久91| 伦理一区二区| 97在线播放视频| 久久久综合网站| 中文字幕第2页| 日韩中文在线中文网三级| 欧美xxxx网站| 亚洲天堂第一区| 顶级嫩模精品视频在线看| 国产在线视频你懂的| 日韩av网址在线观看| 成人免费看黄| 国产欧美一区二区视频| 亚洲成人av| 日本成人在线免费观看| 亚洲一级二级三级在线免费观看| 国产一区二区网站| 九九精品在线视频| 露出调教综合另类| 激情小视频网站| 久久蜜桃一区二区| 中文天堂在线视频| www.亚洲天堂| 99久热这里只有精品视频免费观看| 亚洲成人动漫在线| 国产成人免费av在线| 天堂网中文字幕| 日韩av在线导航| 亚洲成a人片| 青青草原网站在线观看| 成人app下载| 国产一级片免费视频| 欧美日韩成人在线观看| 亚洲丁香日韩| 91欧美一区二区三区| 调教+趴+乳夹+国产+精品| 亚洲精品中文字幕成人片| 欧美一级大片在线观看| 亚洲精品国产setv| 欧美性猛交xxxx乱大交91| 午夜视频在线观看一区二区三区 | www.欧美日韩| 涩涩视频在线观看| 国产综合在线视频| 波多野结衣一区| 在线观看免费视频高清游戏推荐| 欧美激情综合五月色丁香小说| 久久久999久久久| 欧美丰满片xxx777| 日韩中文欧美| 特级西西人体4444xxxx| 91精品国产综合久久精品app|