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

JavaScript 原始值與包裝對象

開發 前端
隨著 JavaScript 越來越流行,越來越多地開發者開始接觸并使用 JavaScript。同時我也發現,有不少開發者對于 JavaScript 最基本的原始值和包裝對象都沒有很清晰的理解。

[[398785]]

本文轉載自微信公眾號「菜鳥小棧」,作者文弱書生陳皮皮  。轉載本文請聯系菜鳥小棧公眾號。

前言

隨著 JavaScript 越來越流行,越來越多地開發者開始接觸并使用 JavaScript。

同時我也發現,有不少開發者對于 JavaScript 最基本的原始值和包裝對象都沒有很清晰的理解。

那么本篇文章,就由渣皮來給大家詳細介紹一下它們。

話不多說,Let's go!

正文

原始類型 (Primitive types)

原始類型也被稱為“基本類型”。

目前在 JavaScript 中有以下幾種原始類型:

  • string(字符串)
  • number(數字)
  • boolean(布爾)
  • null(空)
  • undefined(未定義)
  • bigint(大整數,ES6)
  • symbol(標志?ES6)

如下:

  1. typeof 'chenpipi';  // "string" 
  2. typeof 12345;       // "number" 
  3. typeof true;        // "boolean" 
  4. typeof null;        // "object" 
  5. typeof undefined;   // "undefined" 
  6. typeof 12345n;      // "bigint" 
  7. typeof Symbol();    // "symbol" 

 特別注意

typeof null 雖然返回 "object",但是這不代表 null 就是對象,這其實是 JavaScript 的一個 Bug,且從 JavaScript 誕生以來便如此。

在 JavaScript 最初的實現中,JavaScript 中的值是由一個表示類型的標簽和實際數據值表示的。對象的類型標簽是 0。由于 null 代表的是空指針(大多數平臺下值為 0x00),因此,null 的類型標簽是 0,typeof null 也因此返回 "object"。

The history of “typeof null”:https://2ality.com/2013/10/typeof-null.html

原始值 (Primitive values)

原始值也就是原始類型的值(數據)。

A primitive value is data that is not an object and has no methods.

原始值是一種沒有任何方法的非對象數據。

也就是說,string、number 和 boolean 等原始類型的值本身是沒有任何屬性和方法的。

 這個時候嗅覺敏銳的小伙伴是不是已經察覺到有什么不對勁了?

是孜然!我加了孜然!(手動狗頭并劃掉)

這里有一個非常有意思的點,但是在討論這個問題之前,先讓我們認識下包裝對象。

包裝對象 (Wrapper objects)

除了 null 和 undefined 外的原始類型都有其相應的包裝對象:

  • String(字符串)
  • Number(數字)
  • Boolean(布爾)
  • BigInt(大整數,ES6)
  • Symbol(標志?ES6)

對象 (Object)

對象是引用類型。

首先,包裝對象本身是一個對象,也是函數。

  1. String instanceof Object;   // true 
  2. String instanceof Function; // true 

構造函數 (Constructor)

實例 (Instance)

其中 String、Number 和 Boolean 均支持使用 new 運算符來創建對應的包裝對象實例。

例如 String 的聲明(節選):

  1. interface StringConstructor { 
  2.   new(value?: any): String; 
  3.   (value?: any): string; 
  4.   readonly prototype: String; 
  5. declare var String: StringConstructor; 

使用 new 運算符得到的數據是對象(Object):

  1. // 字符串 
  2. typeof 'pp';                      // "string" 
  3. typeof new String('pp');          // "object" 
  4. new String() instanceof Object;   // true 
  5. // 數字 
  6. typeof 123;                       // "number" 
  7. typeof new Number(123);           // "object" 
  8. new Number() instanceof Object;   // true 
  9. // 布爾 
  10. typeof true;                      // "boolean" 
  11. typeof new Boolean(true);         // "object" 
  12. new Boolean() instanceof Object;  // true 

我們可以調用包裝對象實例的 valueOf() 函數來獲取其原始值:

  1. // 字符串 
  2. let s = new String('pp'); 
  3. s.valueOf();                // "pp" 
  4. typeof s.valueOf();         // "string" 
  5. // 數字 
  6. let n = new Number(123); 
  7. n.valueOf();                // 123 
  8. typeof n.valueOf();         // "number" 
  9. // 布爾 
  10. let b = new Boolean(true); 
  11. b.valueOf();                // true 
  12. typeof b.valueOf();         // "boolean" 

“異類” (Attention)

而 BigInt 和 Symbol 都屬于“不完整的類”,不支持 new 運算符。

例如 BigInt 的聲明(節選):

  1. interface BigIntConstructor { 
  2.   (value?: any): bigint
  3.   readonly prototype: BigInt
  4. declare var BigInt: BigIntConstructor; 

可以看到 BigInt 的聲明中沒有 new 運算符相關函數。

普通函數 (Function)

包裝對象也可以作為普通函數來使用。

其中 String()、Number() 和 Boolean() 函數都可以用來對任意類型的數據進行顯式類型轉換。

另外 Object() 函數也可用于顯式類型轉換,但本文不再展開。

String

示例代碼:

  1. typeof String();    // "string" 
  2. String();           // "" 
  3. String('pp');       // "pp" 
  4. String(123);        // "123" 
  5. String(true);       // "true" 
  6. String(false);      // "false" 
  7. String(null);       // "null" 
  8. String(undefined);  // "undefined" 
  9. String([]);         // "" 
  10. String({});         // "[object Object]" 

小貼士 1

當我們使用 String() 函數來轉換對象時,JavaScript 會先訪問對象上的 toString() 函數,如果沒有實現,則會順著原型鏈向上查找。

舉個栗子:執行 String({ toString() { return 'pp'; } }) 返回的結果是 "pp",并非 "[object Object]"。

所以 String() 函數并不能夠用來判斷一個值是否為對象(會翻車)。

小貼士 2

常用的判斷對象的方式為 Object.prototype.toString({}) === '[object Object]'。

舉個栗子:執行 Object.prototype.toString({ toString() { return 'pp'; } }) 返回的是 "[object Object]"。

Number

 示例代碼:

  1. typeof Number();    // "number" 
  2. Number();           // 0 
  3. Number('');         // 0 
  4. Number('pp');       // NaN 
  5. Number(123);        // 123 
  6. Number(true);       // 1 
  7. Number(false);      // 0 
  8. Number(null);       // 0 
  9. Number(undefined);  // NaN 
  10. Number([]);         // 0 
  11. Number({});         // NaN 

小貼士

對于 Number() 函數來說,可能最實用的轉換就是將 true 和 false 轉換為 1 和 0 吧。

Boolean

示例代碼:

  1. typeof Boolean();   // "boolean" 
  2. Boolean();          // false 
  3. Boolean('');        // false 
  4. Boolean('pp');      // true 
  5. Boolean(0);         // false 
  6. Boolean(1);         // true 
  7. Boolean(null);      // false 
  8. Boolean(undefined); // false 
  9. Boolean([]);        // true 
  10. Boolean({});        // true 

小貼士

某些情況下,我們會在數據中使用 0 和 1 來表示真假狀態,此時就可以使用 Boolean() 進行狀態的判斷。

BigInt

BigInt() 函數用于將整數轉換為大整數。

該函數接受一個整數作為參數,傳入參數若為浮點數或任何非數字類型數據都會報錯。

 示例代碼:

  1. BigInt(123);        // 123n 
  2. BigInt(123n);       // 123n 
  3. typeof 123n;        // "bigint" 
  4. typeof BigInt(123); // "bigint" 

BigInt & Number

需要注意的是,BigInt 和 Number 是不嚴格相等(寬松相等)的。

示例代碼:

  1. 123n === 123; // false 
  2. 123n == 123;  // true 

Symbol

Symbol() 函數用于創建一個 symbol 類型的值。

該函數接受一個字符串作為描述符(參數),如果傳入其他類型的值則會被轉換為字符串(除了 undefined)。

注意,每一個 symbol 值都是獨一無二的,即使它們的描述符都是一樣的。

且 symbol 類型的數據只能通過 Symbol() 函數來創建。

示例代碼:

  1. // 后面的返回值是 Devtools 模擬出來的,并非實際值 
  2. Symbol('pp');                   // Symbol(pp) 
  3. Symbol(123);                    // Symbol(123) 
  4. Symbol(null);                   // Symbol(null
  5. Symbol({});                     // Symbol([object Object]) 
  6.  
  7. // 類型 
  8. typeof Symbol('pp');            // "symbol" 
  9. Symbol('pp') === Symbol('pp');  // false 
  10.  
  11. // 描述符 
  12. Symbol('pp').description;       // "pp" 
  13. Symbol(123).description;        // "123" 
  14. Symbol({}).description;         // "[object Object]" 
  15. Symbol().description;           // undefined 
  16. Symbol(undefined).description;  // undefined 

原始值不是對象 (Primitive not Object)

有意思的來了~

沒有屬性和方法 (No properties, no functions)

本文前面有提到:「原始值是一種沒有任何方法的非對象數據。」

我們都知道對象(Object)上可以有屬性和方法。

但是字符串不是對象,所以你不能給字符串增加屬性。

 做個小實驗:

  1. let a = 'chenpipi'
  2. console.log(a.length);  // 8 
  3. // 嘗試增加新的屬性 
  4. a.name = '吳彥祖'
  5. console.log(a.name);    // undefined 
  6. // 嘗試修改已有的屬性 
  7. typeof a.slice;         // "function" 
  8. a.slice = null
  9. typeof a.slice;         // "function" 

渣皮小劇場

此時一位頭鐵的小伙伴使用了反駁技能。

渣皮你別在這忽悠人了,我平時寫 Bug 哦不寫代碼的時候明明可以調用到字符串、數字和布爾值上的方法!

 比如下面這段代碼,能夠正常執行并得到符合預期的結果:

  1. // 字符串 
  2. let s = 'chenpipi'
  3. s.toUpperCase();      // "CHENPIPI" 
  4. 'ChenPiPi'.slice(4);  // "PiPi" 
  5. // 數字 
  6. let n = 123; 
  7. n.toString();         // "123" 
  8. (123.45).toFixed(2);  // "123.5" 
  9. // 布爾值 
  10. let b = true
  11. b.toString();         // "true" 
  12. false.toString();     // "false" 

無用小知識

有沒有發現,數字的字面量后面不能直接調用函數?例如執行 123.toString() 會報 SyntaxError(語法錯誤)。

這是因為數字(浮點數)本身會用到小數點 .,而調用函數也需要用小數點,這時就出現了歧義(字符串和布爾值就沒有這種煩惱)。

對于這種情況,我們可以使用括號 () 將數字包裹起來,如 (123).toString();或者使用兩個連續的小數點 .. 來調用函數,如 123..toString()。

 奇了怪了

那么既然字符串不是對象,那么為什么字符串會有屬性和方法呢?

轉念一想,數字就是數字,數字身上怎么會有方法呢?

這確實不符合邏輯,但是這又與實際相矛盾。

咋回事呢???

替身使者 (I can't translate this)

答案揭曉~

 暗中操作

以字符串(string)為例,當我們在代碼中讀取字符串的屬性或者方法時, JavaScript 會靜默地執行下面的操作:

  1. 將字符串通過 new String() 的方式來創建一個臨時的包裝對象實例;
  2. 通過創建的對象來執行我們的代碼邏輯(讀取屬性或執行函數);
  3. 臨時對象不再使用,可以被銷毀。

如下面的栗子:

  1. let a = 'chenpipi'
  2. console.log(a);   // "chenpipi" 
  3. // ------------------------------ 
  4. let b1 = a.length; 
  5. console.log(b1);  // 8 
  6. // 上面的代碼相當于: 
  7. let b2 = (new String(a)).length; 
  8. console.log(b2);  // 8 
  9. // ------------------------------ 
  10. let c1 = a.toUpperCase(); 
  11. console.log(c1);  // "CHENPIPI" 
  12. // 上面的代碼相當于: 
  13. let c2 = (new String(a)).toUpperCase(); 
  14. console.log(c2);  // "CHENPIPI" 

數字(number)和布爾值(boolean)同理,但數字通過 new Number() 來創建臨時對象,而布爾值則通過 new Boolean() 來創建。

除了上面的例子,最有力的證明,就是他們的構造函數:

  1. 'chenpipi'.constructor === String;  // true 
  2. (12345).constructor === Number;     // true 
  3. true.constructor === Boolean;       // true 

這一切都是 JavaScript 在暗中完成的,且過程中產生的臨時對象都是一次性的(用完就丟)。

原來如此

蕪湖,這么一來就說得通了!

這也就能解釋為什么我們能夠訪問字符串上的屬性和方法,卻不能增加或修改屬性。

那是因為我們實際操作的目標其實是 JavaScript 創建的臨時對象,而并非字符串本身!

所以我們的增加或修改操作實際上是生效了的,只不過是在臨時對象上生效了!

 就像這樣:

  1. // 代碼中: 
  2. let a = 'chenpipi'
  3. a.name = '吳彥祖'
  4. console.log(a.name);  // undefined 
  5.  
  6. // 相當于: 
  7. let a = 'chenpipi'
  8. (new String(a)).name = '吳彥祖'
  9. console.log(a.name);  // undefined 
  10.  
  11. // 相當于: 
  12. let a = 'chenpipi'
  13. let temp = new String(a); 
  14. temp.name = '吳彥祖'
  15. console.log(a.name);  // undefined 

總結 (Summary)

以上,就是本篇文章的全部內容了。

最后我們來總結一下:

  1. 多數原始類型都有相應的包裝對象;
  2. 有些包裝對象可以被 new,有些不行;
  3. 包裝對象一般被用來進行顯式的類型轉換;
  4. 對象上有屬性和方法;
  5. 原始值上沒有屬性和方法;
  6. 原始值上也不能有屬性和方法;
  7. 但我們可以像操作對象一樣來操作原始值;
  8. 這是因為 JavaScript 在執行代碼的時候偷偷搞小動作;
  9. JavaScript 會用臨時的包裝對象來替原始值執行操作。

我們平時寫代碼的時候不太會注意到這件事,實際上這些也不會影響到我們寫代碼。

所以,這篇文章不就白看啦?

是,也不全是~

知己知彼,百戰百勝。

學會以上這些無用小知識,也算是對 JavaScript 有了更深的理解了吧,至少還能用來吹牛皮(手動狗頭~)。

相關資料

《JavaScript 高級程序設計(第4版)》

《JavaScript 權威指南(第6版)》

Primitive - MDN:https://developer.mozilla.org/en-US/docs/Glossary/Primitive

The history of “typeof null”:https://2ality.com/2013/10/typeof-null.html

 

責任編輯:武曉燕 來源: 菜鳥小棧
相關推薦

2020-06-09 09:13:12

JavaScript重構對象

2011-07-20 10:27:29

JavaScript

2016-10-28 21:13:33

JavaScript基本包裝類型

2017-02-06 09:20:23

JavaScript實踐

2016-06-20 11:32:27

JS原型class

2021-07-16 08:10:06

識別實體對象

2020-11-20 08:53:35

JavaScript

2024-05-15 18:59:01

JavaScript語言原型

2018-11-08 15:50:18

前端Javascript重用性

2020-11-24 08:00:22

JavaScript對象迭代器

2022-03-07 13:58:30

JavaScript原始數據前端

2012-02-13 09:57:26

虛擬化VMware微軟

2020-09-28 08:11:14

JavaScript數據

2021-05-14 00:00:15

JavaScript開發代碼

2017-04-21 09:07:39

JavaScript對象編程

2021-04-07 10:12:05

Javascript對象拷貝開發

2010-10-08 10:26:45

JavaScript內

2012-01-17 09:34:52

JavaScript

2015-09-29 09:27:04

JavaScript對象

2021-10-21 18:47:37

JavaScript面向對象
點贊
收藏

51CTO技術棧公眾號

欧美大片第1页| 欧美日韩国产一区二区三区地区| 精品国产91亚洲一区二区三区www| 日韩视频免费观看高清| 成人vr资源| 欧美刺激午夜性久久久久久久| 欧美精品一区免费| 天天影视久久综合| 成人国产在线观看| 国产精品中文字幕在线观看| 久久久久久久9999| 视频一区在线观看| 日韩视频一区二区三区在线播放 | 天堂av一区二区三区| 另类av一区二区| 欧美另类交人妖| 最新中文字幕av| 欧美日韩一区二区三区四区不卡 | 激情五月综合网| 欧美一级视频精品观看| 国产一级片黄色| av中文字幕电影在线看| 亚洲色图欧洲色图婷婷| 日本欧美精品久久久| 欧美一区二区黄片| 国产激情一区二区三区四区| 国产精品午夜一区二区欲梦| 成人免费a视频| 欧美二区视频| 久久亚洲欧美日韩精品专区 | 久久裸体网站| 亚洲美女av黄| 一二三不卡视频| av综合网页| 日韩一区二区在线看片| 国产三级精品三级在线| 91亚洲视频| 欧美性一级生活| 黄色国产小视频| 桃花岛成人影院| 色婷婷综合中文久久一本| 男人日女人视频网站| 欧美人与性动交α欧美精品济南到| 国产精品久久看| 视频一区二区在线| 国产毛片在线| 国产欧美一区在线| 水蜜桃一区二区三区| 国产黄在线播放| 国产欧美一区二区在线| 视频一区二区三| av在线第一页| 国产精品美女www爽爽爽| 五月天国产一区| 91青青在线视频| 亚洲欧洲色图综合| 浴室偷拍美女洗澡456在线| 黄色片网站在线| 亚洲欧美一区二区不卡| 91传媒免费视频| 国产精品186在线观看在线播放| 亚洲精品免费视频| 人妻av无码专区| www在线观看黄色| 色综合天天天天做夜夜夜夜做| 国产自偷自偷免费一区| 在线免费成人| 欧美不卡一区二区三区| 在线精品一区二区三区| 国产亚洲一区| 久久精品亚洲国产| 国产极品美女高潮无套嗷嗷叫酒店| 亚洲第一在线| 日本精品久久久久久久| 成人黄色片在线观看| 韩国av一区二区三区四区| 成人欧美一区二区三区视频xxx| 神马午夜精品95| 欧美高清在线视频| 影音先锋男人的网站| sqte在线播放| 91国产精品成人| 欧美体内she精高潮| 日韩精品丝袜美腿| xxx成人少妇69| 国产对白videos麻豆高潮| 久热精品在线| 亚洲一区二区三区777| 天天干天天草天天射| 欧美国产欧美综合| 男人天堂av片| 国产一区高清| 亚洲国产精品嫩草影院久久| 中文字幕免费在线看线人动作大片| 中文乱码免费一区二区三区下载| 国内精品久久久久影院 日本资源| 亚洲综合图片网| 国产精品自拍网站| 热舞福利精品大尺度视频| 污污的网站在线免费观看| 狠狠色狠色综合曰曰| 男人午夜视频在线观看| 亚洲电影男人天堂| 欧美精品中文字幕一区| 免费视频网站在线观看入口| 国产成人精品三级| 亚洲一区三区电影在线观看| 色在线免费观看| 欧美一区午夜视频在线观看| 在线观看日本中文字幕| 亚洲激情av| 亚洲一区免费网站| 欧美mv日韩mv国产网站| 日韩免费av一区| 久久精品一区| 精品国产免费久久久久久尖叫| 爆操欧美美女| 欧美老女人在线| 91成人破解版| 亚洲影院免费| 国产亚洲欧美另类一区二区三区| 毛片免费不卡| 欧美乱妇15p| 色www亚洲国产阿娇yao| 免费在线观看成人av| 国产精品国产精品| 丝袜美腿av在线| 欧美一区二区三区在线看| 亚洲图片第一页| 日韩电影免费一区| 日韩久久久久久久| 美脚恋feet久草欧美| 国产偷亚洲偷欧美偷精品| 国产精品日日夜夜| 岛国av在线一区| 日韩美女爱爱视频| 一区二区亚洲视频| 久久久久久久久中文字幕| 国产高清视频免费观看| 亚洲乱码精品一二三四区日韩在线| 亚洲另类第一页| 日韩一区三区| 亚洲www在线| av官网在线播放| 欧美一区永久视频免费观看| 国产97免费视频| 国产精品综合一区二区三区| 在线观看av的网址| 日韩欧美中文字幕在线视频 | 福利一区二区三区四区| 成人午夜电影久久影院| 亚洲国产精品成人天堂| 老司机aⅴ在线精品导航| 97婷婷大伊香蕉精品视频| 天天色综合av| 欧美性猛交99久久久久99按摩| av鲁丝一区鲁丝二区鲁丝三区| 国产日韩欧美一区| 欧美久久久久久一卡四| 成人在线免费av| 超碰91人人草人人干| 成人福利小视频| 欧美日韩国产一区二区| 美女被到爽高潮视频| 蜜臀va亚洲va欧美va天堂| eeuss中文| 综合欧美亚洲| 欧美在线视频网站| 日本在线视频站| 日韩你懂的在线播放| 日本一级淫片色费放| 国产亚洲美州欧州综合国| 在线观看日本一区二区| 亚洲欧美亚洲| 欧美精品欧美精品| 自拍偷拍亚洲图片| 国内精品视频一区| 国产在线一二三| 91麻豆精品国产91久久久| 中文在线观看免费网站| 亚洲国产高清在线观看视频| 亚洲成人手机在线观看| 国产专区一区| 日韩欧美亚洲区| 日韩精品一级| 日韩免费在线观看视频| v片在线观看| 亚洲精品资源在线| 国产精品视频在线观看免费| 亚洲电影在线播放| 亚洲色图欧美色| 成人ar影院免费观看视频| 999在线免费视频| 一区免费视频| 人人妻人人澡人人爽精品欧美一区| 欧美三级午夜理伦三级在线观看| 国产精品视频地址| √天堂8资源中文在线| 日韩中文字幕欧美| 亚洲人成色777777老人头| 91精品国产入口在线| 日本免费精品视频| 亚洲一区二区视频| 国产第一页精品| 99精品黄色片免费大全| 999在线精品视频| 日日摸夜夜添夜夜添亚洲女人| 青青青青在线视频| 天天做天天爱综合| 日韩av一区二区三区在线| 大桥未久女教师av一区二区| 国产日韩换脸av一区在线观看| 周于希免费高清在线观看| 欧美高清视频一区二区| 92国产在线视频| 亚洲人成网站777色婷婷| 日本韩国免费观看| 日韩欧美国产三级电影视频| 亚洲视频一区二区三区四区| 色综合咪咪久久| 日韩精品视频免费播放| 一区二区三区丝袜| 免费精品在线视频| 国产精品视频九色porn| 欧美特级黄色录像| 久久日韩粉嫩一区二区三区| 久草视频福利在线| 国产精品77777竹菊影视小说| 天天干天天综合| 免播放器亚洲一区| 性欧美极品xxxx欧美一区二区| 先锋影音久久| 国产主播在线看| 免费欧美在线| 少妇性l交大片| 久久久久看片| 十八禁视频网站在线观看| 久久亚洲精品伦理| 玩弄japan白嫩少妇hd| 午夜在线一区| aa免费在线观看| 视频在线观看一区| 日本成人中文字幕在线| 日本视频在线一区| 欧美午夜aaaaaa免费视频| 青青草伊人久久| 色播五月综合网| 精品在线一区二区三区| а 天堂 在线| 国产成人综合自拍| 亚洲天堂2024| 久久久三级国产网站| 91在线无精精品白丝| 国产精品福利电影一区二区三区四区| 亚洲天堂最新地址| 亚洲色欲色欲www在线观看| 国产又黄又爽又无遮挡| 亚洲一区二区综合| 亚洲男人的天堂在线视频| 色综合咪咪久久| 一级片在线免费观看视频| 欧美一区日本一区韩国一区| 蜜桃视频在线观看www| 日韩不卡在线观看| 国产三级在线免费| 不卡av电影在线观看| av中文资源在线资源免费观看| 欧美一级淫片播放口| 99亚洲伊人久久精品影院| 51国偷自产一区二区三区的来源| 日韩一区二区三区精品视频第3页| 国产乱码精品一区二区三区不卡| 神马日本精品| 最新国产精品久久| 在线欧美三区| 天天操天天爱天天爽| 国产精品中文字幕欧美| 性欧美成人播放77777| 国产精品国产三级国产aⅴ入口 | 欧美偷拍一区二区| av在线资源观看| 亚洲欧美国产视频| a级网站在线播放| 欧美最猛黑人xxxx黑人猛叫黄| 成人国产精品一区二区免费麻豆 | 国产一区二区三区电影在线观看| 亚洲精品久久久久久一区二区| 欧美视频日韩| 在线视频日韩一区| 成人午夜视频免费看| 五月天精品在线| 亚洲国产精品久久久久秋霞影院| 波多野结衣激情视频| 欧美一卡二卡三卡四卡| 国产在线电影| 久久免费观看视频| 伦一区二区三区中文字幕v亚洲| 国产日韩欧美一区二区三区四区| 成人午夜av| 国产极品粉嫩福利姬萌白酱| 韩国三级中文字幕hd久久精品| 九色porny自拍视频| 亚洲综合精品久久| 一级片在线观看视频| 亚洲人成网站免费播放| 成人影音在线| 91久久精品一区二区别| 四虎成人av| 欧美精品第三页| 91偷拍与自偷拍精品| 久久久无码精品亚洲国产| 欧美日韩黄色一区二区| 青青草视频免费在线观看| 久久久爽爽爽美女图片| 亚洲日韩中文字幕一区| 视频在线观看成人| 香蕉亚洲视频| 深田咏美中文字幕| 亚洲黄色av一区| 国产裸体永久免费无遮挡| 在线观看日韩视频| 成人日韩在线观看| 麻豆久久久9性大片| 黄色另类av| 三级av免费看| 亚洲欧洲精品天堂一级| 中文字幕在线观看视频一区| 亚洲精品小视频| 久久男人天堂| 久久久99爱| 一本色道精品久久一区二区三区| 国产亚洲精品成人a| 亚洲欧美怡红院| 国产免费一区二区三区最新不卡| 日韩视频免费在线观看| 青青久久精品| 亚洲国产日韩美| 蜜桃久久av一区| 中文字幕求饶的少妇| 91麻豆精品国产91久久久久久久久| 男人天堂久久久| 国产综合福利在线| 伊人色**天天综合婷婷| 日本黄色www| 一区二区三区精品久久久| 精品人妻一区二区三区三区四区| 久久香蕉频线观| av综合网站| 青青草原av在线播放| 久久久久久久久久久久久夜| 精品国产一区二区三区四| 亚洲人成电影网站色| 久久天堂av| 一区二区三区av在线| 国产精品资源在线| 久青草视频在线观看| 亚洲国产精品久久精品怡红院| 理论不卡电影大全神| 免费看成人片| 精一区二区三区| 久久免费精彩视频| 日韩va亚洲va欧洲va国产| 美女写真久久影院| 在线日韩av永久免费观看| 国产精品99久久久久久宅男| 日本一级淫片色费放| 亚洲人成网站免费播放| 9999精品| www在线观看免费| 国产农村妇女毛片精品久久麻豆 | 日韩亚洲一区二区| 中文字幕久久精品一区二区| 黄色一级片播放| 国产精品入口麻豆九色| 国产后入清纯学生妹| 欧美一区二区.| 久久国产综合| yjizz视频| 欧美色精品天天在线观看视频| 国产网友自拍视频导航网站在线观看| 国产精品久久亚洲7777| 久久亚洲风情| 青青草国产在线观看| 亚洲欧美日韩一区二区三区在线| av一级久久| 日本免费一级视频| 亚洲色图视频网| 蜜桃视频在线播放| 97视频中文字幕| 日本中文字幕一区二区视频| 欧美日韩国产精品综合| 亚洲午夜精品视频| eeuss鲁片一区二区三区| www.激情小说.com| 午夜精品福利在线| 黄色大片在线播放| 日韩高清三级| 99久久99精品久久久久久| 国产情侣激情自拍| 国产成人激情视频|