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

經常被面試官問到的JavaScript數據類型知識,你真的懂嗎?

開發 前端
之前面試了幾個開發者,他們確實做過不少項目,能力也是不錯的,但是發現js基礎不扎實, 于是決定寫一下這篇javascrip數據類型相關的基礎文章,其實也不僅僅是因為面試了他們,之前自己在面試的時候,也曾經被虐過,面試官說過的最深刻的一句話我到現在都記得。

前言

之前面試了幾個開發者,他們確實做過不少項目,能力也是不錯的,但是發現js基礎不扎實,于是決定寫一下這篇javascrip數據類型相關的基礎文章,其實也不僅僅是因為面試了他們,之前自己在面試的時候,也曾經被虐過,面試官說過的最深刻的一句話我到現在都記得。

基礎很重要,只有基礎好才會很少出bug,大多數的bug都是基礎不扎實造成的。

這里給出兩道我們公司數據類型基礎相關的面試題和答案,如果都能做對并且知道為什么(可以選擇忽略本文章):

  1. //類型轉換相關問題 
  2. var bar=true
  3. console.log(bar+0); 
  4. console.log(bar+"xyz"); 
  5. console.log(bar+true); 
  6. console.log(bar+false); 
  7. console.log('1'>bar); 
  8. console.log(1+'2'+false); 
  9. console.log('2' + ['koala',1]); 
  10.  
  11. var obj1 = { 
  12.    a:1, 
  13.    b:2 
  14. console.log('2'+obj1); 
  15.  
  16. var obj2 = { 
  17.     toString:function(){ 
  18.         return 'a' 
  19.     } 
  20. console.log('2'+obj2) 
  21.  
  22. //輸出結果  1 truexyz 2 1 false 12false 2koala,1 2[object Object] 2a 
  1. //作用域和NaN 這里不具體講作用域,意在說明NaN 
  2. var b=1; 
  3. function outer(){ 
  4.     var b=2; 
  5.     function inner(){ 
  6.         b++; 
  7.         console.log(b); 
  8.         var b=3; 
  9.     } 
  10.     inner(); 
  11. outer(); 
  12. //輸出結果 NaN 

本篇文章會以一個面試官問問題的角度來進行分析講解。

js中的數據類型

面試官:說一說javascript中有哪些數據類型?

JavaScript 中共有七種內置數據類型,包括基本類型和對象類型。

基本類型

基本類型分為以下六種:

  • string(字符串)
  • boolean(布爾值)
  • number(數字)
  • symbol(符號)
  • null(空值)
  • undefined(未定義)

注意:

  1. string 、number 、boolean 和 null undefined 這五種類型統稱為原始類型(Primitive),表示不能再細分下去的基本類型;
  2. symbol是ES6中新增的數據類型,symbol 表示***的值,通過 Symbol 函數調用生成,由于生成的 symbol 值為原始類型,所以 Symbol 函數不能使用 new 調用;
  3. null 和 undefined 通常被認為是特殊值,這兩種類型的值唯一,就是其本身。

對象類型

對象類型也叫引用類型,array和function是對象的子類型。對象在邏輯上是屬性的無序集合,是存放各種值的容器。對象值存儲的是引用地址,所以和基本類型值不可變的特性不同,對象值是可變的。

js弱類型語言

面試官:說說你對javascript是弱類型語言的理解?

JavaScript 是弱類型語言,而且JavaScript 聲明變量的時候并沒有預先確定的類型,變量的類型就是其值的類型,也就是說變量當前的類型由其值所決定,夸張點說上一秒種的String,下一秒可能就是個Number類型了,這個過程可能就進行了某些操作發生了強制類型轉換。雖然弱類型的這種不需要預先確定類型的特性給我們帶來了便利,同時也會給我們帶來困擾,為了能充分利用該特性就必須掌握類型轉換的原理。

js中的強制轉換規則

面試官:javascript中強制類型轉換是一個非常易出現bug的點,知道強制轉換時候的規則嗎?

注:規則***配合下面什么時候發生轉換使用這些規則看效果更佳。

ToPrimitive(轉換為原始值)

ToPrimitive對原始類型不發生轉換處理,只針對引用類型(object)的,其目的是將引用類型(object)轉換為非對象類型,也就是原始類型。

ToPrimitive 運算符接受一個值,和一個可選的期望類型作參數。ToPrimitive 運算符將值轉換為非對象類型,如果對象有能力被轉換為不止一種原語類型,可以使用可選的 期望類型 來暗示那個類型。

轉換后的結果原始類型是由期望類型決定的,期望類型其實就是我們傳遞的type。直接看下面比較清楚。

ToPrimitive方法大概長這么個樣子具體如下。

  1. /** 
  2. * @obj 需要轉換的對象 
  3. * @type 期望轉換為的原始數據類型,可選 
  4. */ 
  5. ToPrimitive(obj,type) 

type不同值的說明

  • type為string:
  1. 先調用obj的toString方法,如果為原始值,則return,否則進行第2步
  2. 調用obj的valueOf方法,如果為原始值,則return,否則進行第3步
  3. 拋出TypeError 異常
  • type為number:
  1. 先調用obj的valueOf方法,如果為原始值,則return,否則進行第2步
  2. 調用obj的toString方法,如果為原始值,則return,否則第3步
  3. 拋出TypeError 異常
  • type參數為空
  1. 該對象為Date,則type被設置為String
  2. 否則,type被設置為Number

Date數據類型特殊說明:

對于Date數據類型,我們更多期望獲得的是其轉為時間后的字符串,而非毫秒值(時間戳),如果為number,則會取到對應的毫秒值,顯然字符串使用更多。

其他類型對象按照取值的類型操作即可。

ToPrimitive總結

ToPrimitive轉成何種原始類型,取決于type,type參數可選,若指定,則按照指定類型轉換,若不指定,默認根據實用情況分兩種情況,Date為string,其余對象為number。那么什么時候會指定type類型呢,那就要看下面兩種轉換方式了。

toString

Object.prototype.toString()

toString() 方法返回一個表示該對象的字符串。

每個對象都有一個 toString() 方法,當對象被表示為文本值時或者當以期望字符串的方式引用對象時,該方法被自動調用。

這里先記住,valueOf() 和 toString() 在特定的場合下會自行調用。

valueOf

Object.prototype.valueOf()方法返回指定對象的原始值。

JavaScript 調用 valueOf() 方法用來把對象轉換成原始類型的值(數值、字符串和布爾值)。但是我們很少需要自己調用此函數,valueOf 方法一般都會被 JavaScript 自動調用。

不同內置對象的valueOf實現:

  • String => 返回字符串值
  • Number => 返回數字值
  • Date => 返回一個數字,即時間值,字符串中內容是依賴于具體實現的
  • Boolean => 返回Boolean的this值
  • Object => 返回this

對照代碼會更清晰一些:

  1. var str = new String('123'); 
  2. console.log(str.valueOf());//123 
  3.  
  4. var num = new Number(123); 
  5. console.log(num.valueOf());//123 
  6.  
  7. var date = new Date(); 
  8. console.log(date.valueOf()); //1526990889729 
  9.  
  10. var bool = new Boolean('123'); 
  11. console.log(bool.valueOf());//true 
  12.  
  13. var obj = new Object({valueOf:()=>{ 
  14.     return 1 
  15. }}) 
  16. console.log(obj.valueOf());//1 

Number

Number運算符轉換規則:

  • null 轉換為 0
  • undefined 轉換為 NaN
  • true 轉換為 1,false 轉換為 0
  • 字符串轉換時遵循數字常量規則,轉換失敗返回 NaN

注意:對象這里要先轉換為原始值,調用ToPrimitive轉換,type指定為number了,繼續回到ToPrimitive進行轉換。

String

String 運算符轉換規則

  • null 轉換為 'null'
  • undefined 轉換為 undefined
  • true 轉換為 'true',false 轉換為 'false'
  • 數字轉換遵循通用規則,極大極小的數字使用指數形式

注意:對象這里要先轉換為原始值,調用ToPrimitive轉換,type就指定為string了,繼續回到ToPrimitive進行轉換(上面有將到ToPrimitive的轉換規則)。

  1. String(null)                 // 'null' 
  2. String(undefined)            // 'undefined' 
  3. String(true)                 // 'true' 
  4. String(1)                    // '1' 
  5. String(-1)                   // '-1' 
  6. String(0)                    // '0' 
  7. String(-0)                   // '0' 
  8. String(Math.pow(1000,10))    // '1e+30' 
  9. String(Infinity)             // 'Infinity' 
  10. String(-Infinity)            // '-Infinity' 
  11. String({})                   // '[object Object]' 
  12. String([1,[2,3]])            // '1,2,3' 
  13. String(['koala',1])          //koala,1 

Boolean

ToBoolean 運算符轉換規則

除了下述 6 個值轉換結果為 false,其他全部為 true:

  1. undefined
  2. null
  3. -0
  4. 0或+0
  5. NaN
  6. ''(空字符串)

假值以外的值都是真值。其中包括所有對象(包括空對象)的轉換結果都是true,甚至連false對應的布爾對象new Boolean(false)也是true。

  1. Boolean(undefined) // false 
  2. Boolean(null) // false 
  3. Boolean(0) // false 
  4. Boolean(NaN) // false 
  5. Boolean('') // false 
  6.  
  7. Boolean({}) // true 
  8. Boolean([]) // true 
  9. Boolean(new Boolean(false)) // true 

js轉換規則不同場景應用

面試官問:知道了具體轉換成什么的規則,但是都在什么情況下發生什么樣的轉換呢?

什么時候自動轉換為string類型

  • 在沒有對象的前提下

字符串的自動轉換,主要發生在字符串的加法運算時。當一個值為字符串,另一個值為非字符串,則后者轉為字符串。

  1. '2' + 1 // '21' 
  2. '2' + true // "2true" 
  3. '2' + false // "2false" 
  4. '2' + undefined // "2undefined" 
  5. '2' + null // "2null" 
  • 當有對象且與對象+時候
  1. //toString的對象 
  2. var obj2 = { 
  3.     toString:function(){ 
  4.         return 'a' 
  5.     } 
  6. console.log('2'+obj2) 
  7. //輸出結果2a 
  8.  
  9. //常規對象 
  10. var obj1 = { 
  11.    a:1, 
  12.    b:2 
  13. console.log('2'+obj1); 
  14. //輸出結果 2[object Object] 
  15.  
  16. //幾種特殊對象 
  17. '2' + {} // "2[object Object]" 
  18. '2' + [] // "2" 
  19. '2' + function (){} // "2function (){}" 
  20. '2' + ['koala',1] // 2koala,1 

對下面'2'+obj2詳細舉例說明如下:

  1. 左邊為string,ToPrimitive原始值轉換后不發生變化
  2. 右邊轉化時同樣按照ToPrimitive進行原始值轉換,由于指定的type是number,進行ToPrimitive轉化調用obj2.valueof(),得到的不是原始值,進行第三步
  3. 調用toString() return 'a'
  4. 符號兩邊存在string,而且是+號運算符則都采用String規則轉換為string類型進行拼接
  5. 輸出結果2a

對下面'2'+obj1詳細舉例說明如下:

  1. 左邊為string,ToPrimitive轉換為原始值后不發生變化
  2. 右邊轉化時同樣按照ToPrimitive進行原始值轉換,由于指定的type是number,進行ToPrimitive轉化調用obj2.valueof(),得到{ a: 1, b: 2 }
  3. 調用toString() return [object Object]
  4. 符號兩邊存在string,而且是+號運算符則都采用String規則轉換為string類型進行拼接
  5. 輸出結果2[object Object]

代碼中幾種特殊對象的轉換規則基本相同,就不一一說明,大家可以想一下流程。

注意:不管是對象還不是對象,都有一個轉換為原始值的過程,也就是ToPrimitive轉換,只不過原始類型轉換后不發生變化,對象類型才會發生具體轉換。

string類型轉換開發過程中可能出錯的點:

  1. var obj = { 
  2.   width: '100' 
  3. }; 
  4.  
  5. obj.width + 20 // "10020" 

預期輸出結果120 實際輸出結果10020

什么時候自動轉換為Number類型

  • 有加法運算符,但是無String類型的時候,都會優先轉換為Number類型

例子:

  1. true + 0 // 1 
  2. true + true // 2 
  3. true + false //1 
  • 除了加法運算符,其他運算符都會把運算自動轉成數值。

例子:

  1. '5' - '2' // 3 
  2. '5' * '2' // 10 
  3. true - 1  // 0 
  4. false - 1 // -1 
  5. '1' - 1   // 0 
  6. '5' * []    // 0 
  7. false / '5' // 0 
  8. 'abc' - 1   // NaN 
  9. null + 1 // 1 
  10. undefined + 1 // NaN 
  11.  
  12. //一元運算符(注意點) 
  13. +'abc' // NaN 
  14. -'abc' // NaN 
  15. +true // 1 
  16. -false // 0 

注意:null轉為數值時為0,而undefined轉為數值時為NaN。

判斷等號也放在Number里面特殊說明

== 抽象相等比較與+運算符不同,不再是String優先,而是Number優先。

下面列舉x == y的例子

如果x,y均為number,直接比較

沒什么可解釋的了

  1. 1 == 2 //false 

如果存在對象,ToPrimitive()type為number進行轉換,再進行后面比較

  1. var obj1 = { 
  2.     valueOf:function(){ 
  3.         return '1' 
  4.     } 
  5. 1 == obj1  //true 
  6. //obj1轉為原始值,調用obj1.valueOf() 
  7. //返回原始值'1' 
  8. //'1'toNumber得到 1 然后比較 1 == 1 
  9. [] == ![] //true 
  10. //[]作為對象ToPrimitive得到 ''   
  11. //![]作為boolean轉換得到0  
  12. //'' == 0  
  13. //轉換為 0==0 //true 

存在boolean,按照ToNumber將boolean轉換為1或者0,再進行后面比較

  1. //boolean 先轉成number,按照上面的規則得到1   
  2. //3 == 1 false 
  3. //0 == 0 true 
  4. 3 == true // false 
  5. '0' == false //true 

4.如果x為string,y為number,x轉成number進行比較

  1. //'0' toNumber()得到 0   
  2. //0 == 0 true 
  3. '0' == 0 //true 

什么時候進行布爾轉換

  • 布爾比較時
  • if(obj) , while(obj) 等判斷時或者 三元運算符只能夠包含布爾值

條件部分的每個值都相當于false,使用否定運算符后,就變成了true

  1. if ( !undefined 
  2.   && !null 
  3.   && !0 
  4.   && !NaN 
  5.   && !'' 
  6. ) { 
  7.   console.log('true'); 
  8. } // true 
  9.  
  10. //下面兩種情況也會轉成布爾類型 
  11. expression ? true : false 
  12. !! expression 

js中的數據類型判斷

面試官問:如何判斷數據類型?怎么判斷一個值到底是數組類型還是對象?

三種方式,分別為 typeof、instanceof 和 Object.prototype.toString()

typeof

通過 typeof操作符來判斷一個值屬于哪種基本類型。

  1. typeof 'seymoe'    // 'string' 
  2. typeof true        // 'boolean' 
  3. typeof 10          // 'number' 
  4. typeof Symbol()    // 'symbol' 
  5. typeof null        // 'object' 無法判定是否為 null 
  6. typeof undefined   // 'undefined' 
  7.  
  8. typeof {}           // 'object' 
  9. typeof []           // 'object' 
  10. typeof(() => {})    // 'function' 

上面代碼的輸出結果可以看出,

null 的判定有誤差,得到的結果

如果使用 typeof,null得到的結果是object

操作符對對象類型及其子類型,例如函數(可調用對象)、數組(有序索引對象)等進行判定,則除了函數都會得到 object 的結果。

綜上可以看出typeOf對于判斷類型還有一些不足,在對象的子類型和null情況下。

instanceof

通過 instanceof 操作符也可以對對象類型進行判定,其原理就是測試構造函數的 prototype 是否出現在被檢測對象的原型鏈上。

  1. [] instanceof Array            // true 
  2. ({}) instanceof Object         // true 
  3. (()=>{}) instanceof Function   // true 

復制代碼注意:instanceof 也不是***的。

舉個例子:

  1. let arr = [] 
  2. let obj = {} 
  3. arr instanceof Array    // true 
  4. arr instanceof Object   // true 
  5. obj instanceof Object   // true 

在這個例子中,arr 數組相當于 new Array() 出的一個實例,所以 arr.__proto__ === Array.prototype,又因為 Array 屬于 Object 子類型,即 Array.prototype.__proto__ === Object.prototype,因此 Object 構造函數在 arr 的原型鏈上。所以 instanceof 仍然無法優雅的判斷一個值到底屬于數組還是普通對象。

還有一點需要說明下,有些開發者會說 Object.prototype.__proto__ === null,豈不是說 arr instanceof null 也應該為 true,這個語句其實會報錯提示右側參數應該為對象,這也印證 typeof null 的結果為 object 真的只是javascript中的一個 bug 。

Object.prototype.toString() 可以說是判定 JavaScript 中數據類型的***解決方法了,具體用法請看以下代碼:

  1. Object.prototype.toString.call({})              // '[object Object]' 
  2. Object.prototype.toString.call([])              // '[object Array]' 
  3. Object.prototype.toString.call(() => {})        // '[object Function]' 
  4. Object.prototype.toString.call('seymoe')        // '[object String]' 
  5. Object.prototype.toString.call(1)               // '[object Number]' 
  6. Object.prototype.toString.call(true)            // '[object Boolean]' 
  7. Object.prototype.toString.call(Symbol())        // '[object Symbol]' 
  8. Object.prototype.toString.call(null)            // '[object Null]' 
  9. Object.prototype.toString.call(undefined)       // '[object Undefined]' 
  10.  
  11. Object.prototype.toString.call(new Date())      // '[object Date]' 
  12. Object.prototype.toString.call(Math)            // '[object Math]' 
  13. Object.prototype.toString.call(new Set())       // '[object Set]' 
  14. Object.prototype.toString.call(new WeakSet())   // '[object WeakSet]' 
  15. Object.prototype.toString.call(new Map())       // '[object Map]' 
  16. Object.prototype.toString.call(new WeakMap())   // '[object WeakMap]' 

我們可以發現該方法在傳入任何類型的值都能返回對應準確的對象類型。用法雖簡單明了,但其中有幾個點需要理解清楚:

  • 該方法本質就是依托Object.prototype.toString() 方法得到對象內部屬性 [[Class]]
  • 傳入原始類型卻能夠判定出結果是因為對值進行了包裝
  • null 和 undefined 能夠輸出結果是內部實現有做處理

NaN相關總結

NaN的概念

NaN 是一個全局對象的屬性,NaN 是一個全局對象的屬性,NaN是一種特殊的Number類型。

什么時候返回NaN (開篇第二道題也得到解決)

  • 無窮大除以無窮大
  • 給任意負數做開方運算
  • 算數運算符與不是數字或無法轉換為數字的操作數一起使用
  • 字符串解析成數字

一些例子:

  1. Infinity / Infinity;   // 無窮大除以無窮大 
  2. Math.sqrt(-1);         // 給任意負數做開方運算 
  3. 'a' - 1;               // 算數運算符與不是數字或無法轉換為數字的操作數一起使用 
  4. 'a' * 1; 
  5. 'a' / 1; 
  6. parseInt('a');         // 字符串解析成數字 
  7. parseFloat('a'); 
  8.  
  9. Number('a');   //NaN 
  10. 'abc' - 1   // NaN 
  11. undefined + 1 // NaN 
  12. //一元運算符(注意點) 
  13. +'abc' // NaN 
  14. -'abc' // NaN 

誤區

  • toString和String的區別

toString

toString()可以將數據都轉為字符串,但是null和undefined不可以轉換。

  1. console.log(null.toString()) 
  2. //報錯 TypeError: Cannot read property 'toString' of null 
  3.  
  4. console.log(undefined.toString()) 
  5. //報錯 TypeError: Cannot read property 'toString' of undefined 

toString()括號中可以寫數字,代表進制

二進制:.toString(2);

八進制:.toString(8);

十進制:.toString(10);

十六進制:.toString(16);

  • String

String()可以將null和undefined轉換為字符串,但是沒法轉進制字符串

  1. console.log(String(null)); 
  2.  
  3. // null 
  4.  
  5. console.log(String(undefined)); 
  6.  
  7. // undefined 

 【編輯推薦】

責任編輯:武曉燕 來源: Segmentfault
相關推薦

2021-02-25 07:08:30

JavaScript 前端面試題

2019-03-06 14:26:31

Javascript面試前端

2025-06-17 08:35:00

2022-01-12 09:08:37

索引JavaReference對象

2018-02-01 09:26:12

面試算法題程序員

2022-08-12 09:35:36

JavaScript面試

2024-11-14 09:29:38

2020-05-14 08:13:56

JDK命令Java

2020-08-03 07:04:54

測試面試官應用程序

2015-08-13 10:29:12

面試面試官

2018-05-18 15:46:28

程序員面試技巧

2025-09-03 04:25:00

MySQLFLOATDOUBLE

2019-02-21 10:49:51

Redis持久化恢復

2020-12-01 11:50:49

數據庫Redis面試

2024-08-27 12:36:33

2020-05-12 11:05:54

MySQL索引數據庫

2020-02-25 23:55:07

數據庫工具技術

2020-07-03 14:19:01

Kafka日志存儲

2020-07-01 17:25:28

Redis數據庫內存

2022-06-21 09:53:03

FedoraUbuntuLinux
點贊
收藏

51CTO技術棧公眾號

日韩超碰人人爽人人做人人添| v片在线观看| 日韩电影在线一区二区三区| 综合激情国产一区| 欧美丝袜在线观看| 黑人玩欧美人三根一起进| 91色|porny| 成人福利在线视频| 日本三级中文字幕| 精品国产一区二区三区小蝌蚪 | 亚洲欧美中文日韩v在线观看| 中文字幕在线观看第三页| 91黄色在线| 久久久不卡网国产精品二区| 91久久国产精品91久久性色| 精品国产乱码一区二区| 色天天综合网| 亚洲精品国产精品乱码不99按摩| 日日躁夜夜躁aaaabbbb| 激情黄产视频在线免费观看| 综合中文字幕亚洲| 欧美精彩一区二区三区| 国产黄a三级三级三级| 日日欢夜夜爽一区| 国模精品视频一区二区| 亚洲色图27p| 亚洲资源网站| 精品成人一区二区| 成人日韩在线视频| 韩日精品一区二区| 亚洲大片免费看| 国产女主播av| 免费黄色在线| 国产精品久久久久桃色tv| 欧美国产二区| 天天躁日日躁狠狠躁伊人| 国产美女娇喘av呻吟久久| 国产91色在线|免| 免费日韩一级片| 在线观看视频免费一区二区三区| 久久亚洲欧美日韩精品专区| 精品欧美一区二区久久久| 首页亚洲中字| 亚洲精品国产精品自产a区红杏吧| 中文字幕人妻无码系列第三区| 成人黄色毛片| 欧美日韩日日骚| 五月婷婷狠狠操| 桃子视频成人app| 色美美综合视频| 50路60路老熟妇啪啪| 999av小视频在线| 亚洲国产日韩精品| 日韩一级免费看| 日本在线视频网址| 洋洋成人永久网站入口| 国产成人亚洲综合无码| 亚洲制服国产| 亚洲宅男天堂在线观看无病毒| 黄色一级片网址| gogogogo高清视频在线| 亚洲欧美日韩中文字幕一区二区三区| 亚洲日本精品国产第一区| 国产对白叫床清晰在线播放| 国产喷白浆一区二区三区| 日本高清不卡一区二区三| 国产三级视频在线播放线观看| 久久婷婷一区二区三区| 日本一区二区三区四区在线观看 | 日本三级一区二区三区| 人人超碰91尤物精品国产| 国产精品99免视看9| 国产美女www爽爽爽| 精品一区二区在线视频| 91在线精品视频| 成人精品在线播放| 91麻豆国产香蕉久久精品| 日本免费高清一区二区| 电影av一区| 亚洲四区在线观看| av在线播放天堂| 345成人影院| 欧美日韩美少妇| 日批免费观看视频| 久久91精品| 久久久国产一区| 国产精品成人久久| 日本欧洲一区二区| 97人人做人人人难人人做| 污视频网站免费观看| 国产精品天天看| 亚洲精品久久久久久久蜜桃臀| 色黄视频在线观看| 欧美日本一区二区在线观看| 2018国产精品| 欧美亚洲国产一区| 久久久久久久久久亚洲| 欧美一区免费看| 国产精品18久久久久久久久久久久| 久久久www免费人成黑人精品| 在线观看免费黄色| 亚洲成人自拍一区| 欧美三级午夜理伦三级富婆| 国产ts一区| 日韩在线免费高清视频| 精品在线播放视频| 激情欧美一区二区| 久久久久久久久一区二区| 黄视频在线观看网站| 欧美日韩一区二区免费视频| 不用播放器的免费av| 校花撩起jk露出白色内裤国产精品 | 日韩久久精品网| 久久久人成影片一区二区三区观看 | 日韩一级大片在线观看| 亚洲AV无码成人精品区明星换面| 欧美一区影院| 国产美女搞久久| 色播色播色播色播色播在线 | 日韩欧美激情视频| 精品亚洲成a人| 欧美日韩精品久久久免费观看| av片在线观看网站| 欧美日韩一区二区三区高清| 欧美黑人欧美精品刺激| 午夜精品免费| 国产精选久久久久久| 免费在线黄色影片| 亚洲高清免费观看| 国产大学生av| 一区二区免费不卡在线| 国产精品私拍pans大尺度在线 | 中国丰满熟妇xxxx性| 四虎视频在线精品免费网址| 国产一区二区免费| 永久免费无码av网站在线观看| 岛国精品在线观看| www.18av.com| 色妞ww精品视频7777| 日韩在线观看免费高清完整版| 国产精品久久久久久久久夜色| av在线不卡免费看| 日韩av在线播放不卡| 亚洲一区电影| 九九视频这里只有精品| 国产免费视频一区二区三区| 一区精品在线播放| av中文字幕网址| 久久美女视频| 国产日韩欧美视频| 中文字幕日本在线| 欧美日韩国产123区| 色www亚洲国产阿娇yao| 免费在线看一区| 日韩精品在在线一区二区中文| 欧美黑人粗大| 国产亚洲精品va在线观看| 日韩熟女一区二区| 亚洲国产精品t66y| www.com黄色片| 久久精品一区二区不卡| 成人国产亚洲精品a区天堂华泰| 欧美三级电影一区二区三区| 69堂国产成人免费视频| 欧美日韩人妻精品一区二区三区| 国产精品1024| 国产av天堂无码一区二区三区| 日韩有码一区| 国产精品久久av| 麻豆网站在线看| 精品美女一区二区| 五月天婷婷综合网| 欧美极品少妇xxxxⅹ高跟鞋| 欧美在线aaa| 韩国在线视频一区| 免费av一区二区三区| 电影一区电影二区| 久久av红桃一区二区小说| 亚洲免费不卡视频| 欧美性少妇18aaaa视频| 神马午夜精品91| av不卡免费电影| 无人在线观看的免费高清视频 | 亚洲成人五区| 欧美又大粗又爽又黄大片视频| www在线播放| 日韩三级.com| 日本视频免费观看| 《视频一区视频二区| 精品1卡二卡三卡四卡老狼| 久久久久国产一区二区| 超碰在线免费观看97| 国产乱人伦丫前精品视频| 国产精品电影一区| 亚洲综合图区| 中文字幕视频在线免费欧美日韩综合在线看 | 日韩电影在线观看一区| 日韩不卡视频一区二区| 亚洲永久精品唐人导航网址| 91在线观看免费观看| 亚洲私拍视频| 九九热在线精品视频| 国内三级在线观看| 精品美女一区二区三区| 在线观看一二三区| 黑人巨大精品欧美一区二区| www欧美com| 欧美激情一区二区| 无码人妻aⅴ一区二区三区玉蒲团| 久久婷婷丁香| 男女激情免费视频| 欧美电影三区| 日本免费高清一区二区| 欧美日韩一区二区三区不卡视频| 国产有码在线一区二区视频| 乡村艳史在线观看| 欧美大片在线影院| 秋霞成人影院| 亚洲午夜小视频| 五月婷婷六月丁香| 精品日韩欧美在线| 国产乱人乱偷精品视频a人人澡| 日韩欧美中文字幕在线播放| 久久免费视频99| 亚洲欧美日韩国产成人精品影院| 日韩一级av毛片| 26uuu精品一区二区在线观看| 最新中文字幕日本| 国产麻豆成人传媒免费观看| 亚洲一区日韩精品| 免费久久精品视频| 538在线视频观看| 亚洲免费影院| 欧美亚洲精品一区二区| 影音先锋久久精品| 亚洲中文字幕无码一区二区三区| 亚洲国产一区二区三区在线播放| 宅男噜噜99国产精品观看免费| 不卡视频在线| 性欧美videosex高清少妇| 国产精品一在线观看| 欧洲精品码一区二区三区免费看| 欧美激情极品| 欧美激情导航| 国产成人久久| 亚洲 日韩 国产第一区| 国产一区二区三区电影在线观看 | 男人天堂久久久| 日韩在线国产精品| 国产婷婷视频在线| 欧美成人高清视频| 色婷婷在线播放| 欧美激情乱人伦一区| 福利写真视频网站在线| 久久久之久亚州精品露出| 多野结衣av一区| 51ⅴ精品国产91久久久久久| 色尼玛亚洲综合影院| 国产精品96久久久久久又黄又硬 | 国产精品高清一区二区三区| 亚洲精品aⅴ| 国产伦理一区二区三区| 久久精品色播| 欧美二区在线| 欧美激情国产在线| 欧美 日韩 国产精品| 亚洲国产日本| 久热免费在线观看| 蜜臀av亚洲一区中文字幕| 午夜一级免费视频| 成人性色生活片免费看爆迷你毛片| 制服丝袜av在线| 91蝌蚪porny| 亚洲a∨无码无在线观看| 亚洲男同1069视频| 中文字幕亚洲精品一区| 欧美亚洲动漫制服丝袜| 99热这里只有精品在线| 亚洲成人久久电影| 高清性色生活片在线观看| 色妞久久福利网| 日本高清成人vr专区| 91黄色8090| 日韩欧美激情| 精品久久精品久久| 久久国产精品亚洲人一区二区三区| 欧洲金发美女大战黑人| 国产一级久久| 黄色一级片免费播放| 91丨九色丨蝌蚪富婆spa| 91无套直看片红桃在线观看| 亚洲已满18点击进入久久| 日本中文字幕久久| 日韩欧美在线影院| 黄色片在线免费观看| 欧美成人精品在线播放| 日韩电影网站| 国产精品国产精品| 91综合久久| 成人免费观看视频在线观看| 国产一区二区精品久久99| mm131美女视频| 亚洲自拍偷拍九九九| 最新国产中文字幕| 日韩精品一二三四区| 97超碰资源站在线观看| 国产成人激情小视频| 第四色中文综合网| 中文字幕成人一区| 欧美亚洲一区二区三区| 91亚洲一线产区二线产区| 国产精品久久久久久久第一福利 | av手机免费在线观看| 成人xxxx视频| 国产亚洲一卡2卡3卡4卡新区 | 日韩在线三区| 日韩视频三区| 中文字幕第六页| 国产精品第一页第二页第三页| 国产免费一级视频| 日韩av一区二区在线观看| 日韩免费影院| 91探花福利精品国产自产在线| 国产一区二区三区天码| 无罩大乳的熟妇正在播放| 国产91精品精华液一区二区三区| 殴美一级黄色片| 在线观看日韩精品| 国产三级视频在线播放线观看| 日本一区二区三区四区视频| 久久影院资源站| 日本十八禁视频无遮挡| 成人午夜又粗又硬又大| 久久久久久久久97| 欧美成人aa大片| 香蕉成人app免费看片| 91九色综合久久| 中文在线日韩| 91视频福利网| 亚洲色图欧美在线| 国产欧美日韩综合精品一区二区三区| 最新国产精品亚洲| 久草综合在线| 一区二区三区四区视频在线 | 精品久久久久久国产| 手机看片一区二区三区| 91精品国产91久久久久| 久久亚州av| 国产av无码专区亚洲精品| 26uuu国产在线精品一区二区| 成年免费在线观看| 亚洲精品自拍第一页| 日本在线啊啊| 任我爽在线视频精品一| 日韩电影网1区2区| 国精产品一区一区| 欧美一区二区观看视频| 国产黄色大片在线观看| 国产一区二区三区高清| 男人的天堂亚洲| 亚洲欧美日韩第一页| 91精品国产综合久久精品app| 日韩伦理av| 免费不卡亚洲欧美| 麻豆国产精品官网| 亚洲成人生活片| 亚洲国产精品va| 91福利精品在线观看| 韩国黄色一级大片| 成人视屏免费看| 午夜精品一区二| 欧美成人激情在线| 女同一区二区三区| 我看黄色一级片| 亚洲午夜免费视频| 精品999视频| 亚洲va电影大全| 在线综合亚洲| 国产成人av免费在线观看| 欧美成人性战久久| 欧美羞羞视频| 欧美aaa在线观看| 91在线一区二区三区| 在线观看中文字幕码| 性欧美xxxx视频在线观看| 欧美伦理在线视频| 亚洲国产精品第一页| 日本韩国一区二区| 一色桃子av在线| 相泽南亚洲一区二区在线播放| 高清不卡一区二区| 日本欧美www| 97人人模人人爽人人喊中文字 | 欧美高清中文字幕| 国产性做久久久久久| www.av在线.com| 国产精品高潮呻吟视频| 亚洲国产一区二区三区高清 | 亚洲成av人片一区二区三区| www.亚洲.com|