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

Node.js 中遇到大數(shù)處理精度丟失如何解決?前端也適用!

開發(fā) 前端
在 JavaScript 中浮點數(shù)運算時經(jīng)常出現(xiàn) 0.1+0.2=0.30000000000000004 這樣的問題,除此之外還有一個不容忽視的大數(shù)危機(大數(shù)處理精度丟失)問題。

[[413410]]

在 JavaScript 中浮點數(shù)運算時經(jīng)常出現(xiàn) 0.1+0.2=0.30000000000000004 這樣的問題,除此之外還有一個不容忽視的大數(shù)危機(大數(shù)處理精度丟失)問題。

這個問題之前看大家在群里也聊了不止一次,周末在另一個「Nodejs技術(shù)棧-交流群」又聊到了這個問題,當時簡單的在群里大家一塊討論了下,這種交流學(xué)習(xí)的氛圍是挺好的,下面是大家周末在群里的討論。

之前也分享過這個問題,我在做個梳理分享給大家,前端也適用,因為大家都是同一門語言 JavaScript。

JavaScript 最大安全整數(shù)

在開始本節(jié)之前,希望你能事先了解一些 JavaScript 浮點數(shù)的相關(guān)知識,在上篇文章 JavaScript 浮點數(shù)之迷:0.1 + 0.2 為什么不等于 0.3? 中很好的介紹了浮點數(shù)的存儲原理、為什么會產(chǎn)生精度丟失(建議事先閱讀下)。

IEEE 754 雙精確度浮點數(shù)(Double 64 Bits)中尾數(shù)部分是用來存儲整數(shù)的有效位數(shù),為 52 位,加上省略的一位 1 可以保存的實際數(shù)值為 。

  1. Math.pow(2, 53) // 9007199254740992 
  2.  
  3. Number.MAX_SAFE_INTEGER // 最大安全整數(shù) 9007199254740991  
  4. Number.MIN_SAFE_INTEGER // 最小安全整數(shù) -9007199254740991  

只要不超過 JavaScript 中最大安全整數(shù)和最小安全整數(shù)范圍都是安全的。

大數(shù)處理精度丟失問題復(fù)現(xiàn)

例一

當你在 Chrome 的控制臺或者 Node.js 運行環(huán)境里執(zhí)行以下代碼后會出現(xiàn)以下結(jié)果,What?為什么我定義的 200000436035958034 卻被轉(zhuǎn)義為了 200000436035958050,在了解了 JavaScript 浮點數(shù)存儲原理之后,應(yīng)該明白此時已經(jīng)觸發(fā)了 JavaScript 的最大安全整數(shù)范圍。

  1. const num = 200000436035958034; 
  2. console.log(num); // 200000436035958050 

例二

以下示例通過流讀取傳遞的數(shù)據(jù),保存在一個字符串 data 中,因為傳遞的是一個 application/json 協(xié)議的數(shù)據(jù),我們需要對 data 反序列化為一個 obj 做業(yè)務(wù)處理。

  1. const http = require('http'); 
  2.  
  3. http.createServer((req, res) => { 
  4.     if (req.method === 'POST') { 
  5.         let data = ''
  6.         req.on('data', chunk => { 
  7.             data += chunk; 
  8.         }); 
  9.  
  10.         req.on('end', () => { 
  11.             console.log('未 JSON 反序列化情況:', data); 
  12.              
  13.             try { 
  14.                 // 反序列化為 obj 對象,用來處理業(yè)務(wù) 
  15.                 const obj = JSON.parse(data); 
  16.                 console.log('經(jīng)過 JSON 反序列化之后:', obj); 
  17.  
  18.                 res.setHeader("Content-Type""application/json"); 
  19.                 res.end(data); 
  20.             } catch(e) { 
  21.                 console.error(e); 
  22.  
  23.                 res.statusCode = 400; 
  24.                 res.end("Invalid JSON"); 
  25.             } 
  26.         }); 
  27.     } else { 
  28.         res.end('OK'); 
  29.     } 
  30. }).listen(3000) 

運行上述程序之后在 POSTMAN 調(diào)用,200000436035958034 這個是一個大數(shù)值。

以下為輸出結(jié)果,發(fā)現(xiàn)沒有經(jīng)過 JSON 序列化的一切正常,當程序執(zhí)行 JSON.parse() 之后,又發(fā)生了精度問題,這又是為什么呢?JSON 轉(zhuǎn)換和大數(shù)值精度之間又有什么貓膩呢?

  1. 未 JSON 反序列化情況: { 
  2.         "id": 200000436035958034 
  3. 經(jīng)過 JSON 反序列化之后: { id: 200000436035958050 } 

經(jīng)過 JSON 反序列化之后: { id: 200000436035958050 }

這個問題也實際遇到過,發(fā)生的方式是調(diào)用第三方接口拿到的是一個大數(shù)值的參數(shù),結(jié)果 JSON 之后就出現(xiàn)了類似問題,下面做下分析。

JSON 序列化對大數(shù)值解析有什么貓膩?

先了解下 JSON 的數(shù)據(jù)格式標準,Internet Engineering Task Force 7159,簡稱(IETF 7159),是一種輕量級的、基于文本與語言無關(guān)的數(shù)據(jù)交互格式,源自 ECMAScript 編程語言標準.

https://www.rfc-editor.org/rfc/rfc7159.txt 訪問這個地址查看協(xié)議的相關(guān)內(nèi)容。

我們本節(jié)需要關(guān)注的是 “一個 JSON 的 Value 是什么呢?” 上述協(xié)議中有規(guī)定必須為 object, array, number, or string 四個數(shù)據(jù)類型,也可以是 false, null, true 這三個值。

到此,也就揭開了這個謎底,JSON 在解析時對于其它類型的編碼都會被默認轉(zhuǎn)換掉。對應(yīng)我們這個例子中的大數(shù)值會默認編碼為 number 類型,這也是造成精度丟失的真正原因。

大數(shù)運算的解決方案

1. 常用方法轉(zhuǎn)字符串

在前后端交互中這是通常的一種方案,例如,對訂單號的存儲采用數(shù)值類型 Java 中的 long 類型表示的最大值為 2 的 64 次方,而 JS 中為 Number.MAX_SAFE_INTEGER (Math.pow(2, 53) - 1),顯然超過 JS 中能表示的最大安全值之外就要丟失精度了,最好的解法就是將訂單號由數(shù)值型轉(zhuǎn)為字符串返回給前端處理,這是在工作對接過程中實實在在遇到的一個坑。

2. 新的希望 BigInt

Bigint 是 JavaScript 中一個新的數(shù)據(jù)類型,可以用來操作超出 Number 最大安全范圍的整數(shù)。

創(chuàng)建 BigInt 方法一

一種方法是在數(shù)字后面加上數(shù)字 n

  1. 200000436035958034n; // 200000436035958034n 

創(chuàng)建 BigInt 方法二

另一種方法是使用構(gòu)造函數(shù) BigInt(),還需要注意的是使用 BigInt 時最好還是使用字符串,否則還是會出現(xiàn)精度問題,看官方文檔也提到了這塊 github.com/tc39/proposal-bigint#gotchas--exceptions 稱為疑難雜癥

  1. BigInt('200000436035958034') // 200000436035958034n 
  2.  
  3. // 注意要使用字符串否則還是會被轉(zhuǎn)義 
  4. BigInt(200000436035958034) // 200000436035958048n 這不是一個正確的結(jié)果 

檢測類型

BigInt 是一個新的數(shù)據(jù)類型,因此它與 Number 并不是完全相等的,例如 1n 將不會全等于 1。

  1. typeof 200000436035958034n // bigint 
  2.  
  3. 1n === 1 // false 

運算

BitInt 支持常見的運算符,但是永遠不要與 Number 混合使用,請始終保持一致。

  1. // 正確 
  2. 200000436035958034n + 1n // 200000436035958035n 
  3.  
  4. // 錯誤 
  5. 200000436035958034n + 1 
  6.                                 ^ 
  7.  
  8. TypeError: Cannot mix BigInt and other types, use explicit conversions 

BigInt 轉(zhuǎn)為字符串

  1. String(200000436035958034n) // 200000436035958034 
  2.  
  3. // 或者以下方式 
  4. (200000436035958034n).toString() // 200000436035958034 

與 JSON 的沖突

使用 JSON.parse('{"id": 200000436035958034}') 來解析會造成精度丟失問題,既然現(xiàn)在有了一個 BigInt 出現(xiàn),是否使用以下方式就可以正常解析呢?

  1. JSON.parse('{"id": 200000436035958034n}'); 

運行以上程序之后,會得到一個 SyntaxError: Unexpected token n in JSON at position 25 錯誤,最麻煩的就在這里,因為 JSON 是一個更為廣泛的數(shù)據(jù)協(xié)議類型,影響面非常廣泛,不是輕易能夠變動的。

在 TC39 proposal-bigint 倉庫中也有人提過這個問題 github.comtc39/proposal-bigint/issues/24 截至目前,該提案并未被添加到 JSON 中,因為這將破壞 JSON 的格式,很可能導(dǎo)致無法解析。

BigInt 的支持

BigInt 提案目前已進入 Stage 4,已經(jīng)在 Chrome,Node,F(xiàn)irefox,Babel 中發(fā)布,在 Node.js 中支持的版本為 12+。

BigInt 總結(jié)

我們使用 BigInt 做一些運算是沒有問題的,但是和第三方接口交互,如果對 JSON 字符串做序列化遇到一些大數(shù)問題還是會出現(xiàn)精度丟失,顯然這是由于與 JSON 的沖突導(dǎo)致的,下面給出第三種方案。

3. 第三方庫

通過一些第三方庫也可以解決,但是你可能會想為什么要這么曲折呢?轉(zhuǎn)成字符串大家不都開開心心的嗎,但是呢,有的時候你需要對接第三方接口,取到的數(shù)據(jù)就包含這種大數(shù)的情況,且遇到那種拒不改的,業(yè)務(wù)總歸要完成吧!這里介紹第三種實現(xiàn)方案。

還拿我們上面 大數(shù)處理精度丟失問題復(fù)現(xiàn) 的第二個例子進行講解,通過 json-bigint 這個庫來解決。

知道了 JSON 規(guī)范與 JavaScript 之間的沖突問題之后,就不要直接使用 JSON.parse() 了,在接收數(shù)據(jù)流之后,先通過字符串方式進行解析,利用 json-bigint 這個庫,會自動的將超過 2 的 53 次方類型的數(shù)值轉(zhuǎn)為一個 BigInt 類型,再設(shè)置一個參數(shù) storeAsString: true 會將 BigInt 自動轉(zhuǎn)為字符串。

  1. const http = require('http'); 
  2. const JSONbig = require('json-bigint')({ 'storeAsString'true}); 
  3.  
  4. http.createServer((req, res) => { 
  5.   if (req.method === 'POST') { 
  6.     let data = ''
  7.     req.on('data', chunk => { 
  8.       data += chunk; 
  9.     }); 
  10.  
  11.     req.on('end', () => { 
  12.       try { 
  13.         // 使用第三方庫進行 JSON 序列化 
  14.         const obj = JSONbig.parse(data) 
  15.         console.log('經(jīng)過 JSON 反序列化之后:', obj); 
  16.  
  17.         res.setHeader("Content-Type""application/json"); 
  18.         res.end(data); 
  19.       } catch(e) { 
  20.         console.error(e); 
  21.         res.statusCode = 400; 
  22.         res.end("Invalid JSON"); 
  23.       } 
  24.     }); 
  25.   } else { 
  26.     res.end('OK'); 
  27.   } 
  28. }).listen(3000) 

再次驗證會看到以下結(jié)果,這次是正確的,問題也已經(jīng)完美解決了!

  1. JSON 反序列化之后 id 值: { id: '200000436035958034' } 

json-bigint 結(jié)合 Request client

介紹下 axios、node-fetch、undici、undici-fetch 這些請求客戶端如何結(jié)合 json-bigint 處理大數(shù)。

模擬服務(wù)端

使用 BigInt 創(chuàng)建一個大數(shù)模擬服務(wù)端返回數(shù)據(jù),此時,若請求的客戶端不處理是會造成精度丟失的。

  1. const http = require('http'); 
  2. const JSONbig = require('json-bigint')({ 'storeAsString'true}); 
  3.  
  4. http.createServer((req, res) => { 
  5.   res.end(JSONbig.stringify({ 
  6.     num: BigInt('200000436035958034'
  7.   })) 
  8. }).listen(3000) 

axios

創(chuàng)建一個 axios 請求實例 request,其中的 transformResponse 屬性我們對原始的響應(yīng)數(shù)據(jù)做一些自定義處理。

  1. const axios = require('axios').default
  2. const JSONbig = require('json-bigint')({ 'storeAsString'true}); 
  3.  
  4. const request = axios.create({ 
  5.   baseURL: 'http://localhost:3000'
  6.   transformResponse: [function (data) { 
  7.     return JSONbig.parse(data) 
  8.   }], 
  9. }); 
  10.  
  11. request({ 
  12.   url: '/api/test' 
  13. }).then(response => { 
  14.   // 200000436035958034 
  15.   console.log(response.data.num); 
  16. }); 

node-fetch

node-fetch 在 Node.js 里用的也不少,一種方法是對返回的 text 數(shù)據(jù)做處理,其它更便捷的方法沒有深入研究。

  1. const fetch = require('node-fetch'); 
  2. const JSONbig = require('json-bigint')({ 'storeAsString'true}); 
  3. fetch('http://localhost:3000/api/data'
  4.   .then(async res => JSONbig.parse(await res.text())) 
  5.   .then(data => console.log(data.num)); 

undici

request 這個已標記為廢棄的客戶端就不介紹了,再推薦一個值得關(guān)注的 Node.js 請求客戶端 undici,前一段也寫過一篇文章介紹 request 已廢棄 - 推薦一個超快的 Node.js HTTP Client undici。

  1. const undici = require('undici'); 
  2. const JSONbig = require('json-bigint')({ 'storeAsString'true}); 
  3. const client = new undici.Client('http://localhost:3000'); 
  4. (async () => { 
  5.   const { body } = await client.request({ 
  6.     path: '/api'
  7.     method: 'GET'
  8.   }); 
  9.    
  10.   body.setEncoding('utf8'); 
  11.   let str = ''
  12.   for await (const chunk of body) { 
  13.     str += chunk; 
  14.   } 
  15.  
  16.   console.log(JSONbig.parse(str)); // 200000436035958034 
  17.   console.log(JSON.parse(str)); // 200000436035958050 精度丟失 
  18. })(); 

undici-fetch

undici-fetch 是一個構(gòu)建在 undici 之上的 WHATWG fetch 實現(xiàn),使用和 node-fetch 差不多。

  1. const fetch = require('undici-fetch'); 
  2. const JSONbig = require('json-bigint')({ 'storeAsString'true}); 
  3. (async () => { 
  4.   const res = await fetch('http://localhost:3000'); 
  5.   const json = JSONbig.parse(await res.text()); 
  6.   console.log(json.num); // 200000436035958034 
  7. })(); 

總結(jié)

 

本文提出了一些產(chǎn)生大數(shù)精度丟失的原因,同時又給出了幾種解決方案,如遇到類似問題,都可參考。還是建議大家在系統(tǒng)設(shè)計時去遵循雙精度浮點數(shù)的規(guī)范來做,在查找問題的過程中,有看到有些使用正則來匹配,個人角度還是不推薦的,一是正則本身就是一個耗時的操作,二操作起來還要查找一些匹配規(guī)律,一不小心可能會把返回結(jié)果中的所有數(shù)值都轉(zhuǎn)為字符串,也是不可行的。

本文轉(zhuǎn)載自微信公眾號「Nodejs技術(shù)棧」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系Nodejs技術(shù)棧公眾號。

 

責(zé)任編輯:武曉燕 來源: Nodejs技術(shù)棧
相關(guān)推薦

2022-07-14 14:27:34

Javascript數(shù)字精度二進制

2020-10-26 08:34:13

Node.jsCORS前端

2011-09-09 14:23:13

Node.js

2023-10-04 07:35:03

2021-12-25 22:29:57

Node.js 微任務(wù)處理事件循環(huán)

2021-06-02 00:29:08

Node.jsAcceptEmfile

2012-09-29 11:13:15

Node.JS前端開發(fā)Node.js打包

2020-01-03 16:04:10

Node.js內(nèi)存泄漏

2013-11-01 09:34:56

Node.js技術(shù)

2015-03-10 10:59:18

Node.js開發(fā)指南基礎(chǔ)介紹

2021-07-15 10:15:52

Node.jsJSON前端

2021-05-18 09:01:39

Node.jsJSON文件

2017-03-20 13:43:51

Node.js內(nèi)存泄漏

2017-03-19 16:40:28

漏洞Node.js內(nèi)存泄漏

2019-07-23 10:20:23

前端Node.js中間層

2021-08-04 07:47:18

Kafka消息框架

2011-11-01 10:30:36

Node.js

2011-09-08 13:46:14

node.js

2011-09-02 14:47:48

Node

2020-07-31 13:35:34

Node.js應(yīng)用分析前端
點贊
收藏

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

欧美大片在线观看一区二区| 91影院在线观看| 久久中文久久字幕| 在线中文字日产幕| 女人高潮被爽到呻吟在线观看| 久久精品一区四区| 亚洲在线第一页| 在线观看免费国产视频| 欧美中文字幕一区二区| 欧美一级午夜免费电影| 九色在线视频观看| 欧美三级黄网| 国产福利视频一区二区三区| 日本国产一区二区三区| 国产日产精品一区二区三区的介绍| 日韩欧美激情电影| 在线视频观看一区| 国产精品69久久久| 日韩精品成人av| 97se亚洲国产综合自在线 | 欧美成人在线免费观看| 五月婷婷激情视频| 欧美影视一区| 国产一区av在线| 18深夜在线观看免费视频| 91av亚洲| 亚洲v日本v欧美v久久精品| 亚洲欧美成人一区| 三级在线视频| 粉嫩一区二区三区性色av| 国产精品视频网址| 亚洲成人第一网站| 精品动漫3d一区二区三区免费版| 日日狠狠久久偷偷四色综合免费| 亚洲天堂久久新| 国模大尺度视频一区二区| 一本一道综合狠狠老| 国内少妇毛片视频| 97超碰在线公开在线看免费| 欧美激情在线看| 精品国产一区二区三区日日嗨| av中文字幕播放| 久久66热re国产| 国产精品精品视频| 亚洲 日本 欧美 中文幕| 99这里有精品| 97热精品视频官网| 久久免费视频99| 欧美日韩三级| 欧美国产日韩一区二区三区| 国内偷拍精品视频| 欧美在线不卡| 欧美第一淫aaasss性| 青青草原在线免费观看视频| 一级毛片免费高清中文字幕久久网| 中文字幕亚洲一区二区三区| 强制高潮抽搐sm调教高h| 日本成人小视频| 日韩中文字幕第一页| 日韩黄色中文字幕| 欧美国产一区二区三区激情无套| 中文字幕国产精品久久| 国产第一页精品| 天天超碰亚洲| 欧美日韩爱爱视频| 99免费在线观看| 中日韩男男gay无套| 欧美最猛性xxxxx免费| 亚洲天堂视频网站| 久久综合亚州| 国产主播欧美精品| 精品人妻久久久久一区二区三区 | 免费黄网站欧美| 国产剧情久久久久久| 91丨porny丨在线中文| 国产在线播放一区二区三区| 都市激情久久久久久久久久久| 三级网站在线看| 久久你懂得1024| 一区二区高清视频| 羞羞的网站在线观看| 亚洲aaa精品| 免费激情视频在线观看| 日韩成人综合网| 欧美成人女星排行榜| 国产 中文 字幕 日韩 在线| 精品国产一区探花在线观看| 精品国产一区二区在线| 久久激情免费视频| 国产精品夜夜夜| 国产日本欧美一区二区三区| 亚洲av无码一区二区三区dv| 2021国产精品久久精品| 亚洲视频欧美在线| 色呦呦呦在线观看| 在线亚洲一区二区| 超碰中文字幕在线观看| 私拍精品福利视频在线一区| 日韩一区二区精品视频| 日韩视频免费观看高清| 久久精品免费观看| 国产乱码精品一区二区三区中文 | 亚洲午夜一区二区| 久久精品免费网站| 亚洲一区二区电影| 亚洲天堂开心观看| 免费一级片在线观看| 日韩国产高清影视| 国产精品久久久久久久天堂第1集| 国产九色在线| 亚洲成人av一区二区| 国产无色aaa| 国产尤物久久久| 国模精品视频一区二区三区| 91亚洲精品国偷拍自产在线观看| 99热国产精品| 成年丰满熟妇午夜免费视频| 99九九久久| 国产丝袜一区视频在线观看| 欧美成人精品欧美一级私黄| 免费在线观看视频一区| 麻豆蜜桃91| mm视频在线视频| 91麻豆精品国产自产在线观看一区 | 西瓜成人精品人成网站| 欧美精品日韩三级| 亚洲中文字幕在线一区| 久久精品一区四区| 国产成人黄色片| 国产精品午夜av| 久久91超碰青草是什么| 夜夜躁很很躁日日躁麻豆| 国产亚洲欧洲一区高清在线观看| 国产婷婷一区二区三区| 精品国产鲁一鲁****| 视频直播国产精品| 国产亚洲欧美日韩高清| 久久综合色之久久综合| 999一区二区三区| 亚洲三级av| 久久精品91久久久久久再现| 亚洲精品国产精品国自产网站按摩| 99国产一区二区三精品乱码| 精品一区二区三区无码视频| 日本一区二区三区视频在线看| 日韩中文字幕免费视频| 国产精品国产一区二区三区四区| 国产精品视频在线看| 亚洲色精品三区二区一区| 夜色77av精品影院| 青青精品视频播放| 男同在线观看| 在线免费精品视频| 极品人妻videosss人妻| 日韩高清一级片| 婷婷久久五月天| 日韩一级特黄| 久久综合国产精品台湾中文娱乐网| 一级片aaaa| 中文字幕欧美日本乱码一线二线| 天天爽天天爽夜夜爽| 欧美日韩在线二区| 国产美女久久久| 天堂资源在线中文| 91精品国产品国语在线不卡| 欧美卡一卡二卡三| 成人精品免费网站| 欧美牲交a欧美牲交| 亚洲精品一级二级三级| 国产精品久久999| 日本电影在线观看网站| 欧美一区二区视频观看视频| 黄色一级视频免费观看| 99久久99久久免费精品蜜臀| 久久精品免费一区二区| 成人综合一区| 亚洲在线www| 两个人看的在线视频www| 亚洲女人天堂成人av在线| 久草热在线观看| 亚洲精品成人天堂一二三| 一边摸一边做爽的视频17国产| 国产日韩一区二区三区在线播放 | aa国产精品| 欧美一区三区二区在线观看| 久久免费资源| 欧美激情国内偷拍| 九色在线视频| 日韩午夜中文字幕| 国产精品久久久久久久妇| 国产午夜精品一区二区三区嫩草 | 人妻中文字幕一区二区三区| 亚洲精品一二三区| 欧美性xxxx图片| 国产中文字幕一区| 日本网站免费在线观看| 久久高清免费| 久久精品五月婷婷| 国产麻豆一区二区三区| 国产69久久精品成人| 日韩三级影院| 亚洲男女性事视频| 国产高清免费av| 在线观看三级视频欧美| 久久久久亚洲AV| 欧美韩国日本不卡| 无码国产69精品久久久久网站| 日本亚洲免费观看| 日韩中字在线观看| 欧美顶级大胆免费视频| 欧美伦理一区二区| 日韩精品视频一区二区三区| 国产精品999| 超碰在线最新网址| 久久精品99久久香蕉国产色戒| 日韩中文字幕影院| 欧美一级xxx| 中文字幕在线播放不卡| 欧美三级xxx| 欧美黄色一级网站| 国产精品久久网站| 巨胸大乳www视频免费观看| 国产东北露脸精品视频| 亚洲成人天堂网| 久久久久综合| 国产综合av在线| 伊人成人网在线看| 亚洲色图都市激情| 91视频综合| 亚洲精品国产精品国自产| 自拍视频一区| 麻豆精品蜜桃一区二区三区| 国产suv精品一区二区四区视频| 91九色单男在线观看| 欧美亚洲黄色| 国产精品黄色av| 欧美日韩美女| 青青草一区二区| 日韩精品美女| 2023亚洲男人天堂| 乱馆动漫1~6集在线观看| 午夜精品99久久免费| 影音先锋在线视频| 操91在线视频| av片在线观看| 久久69精品久久久久久国产越南| 草莓福利社区在线| 大胆欧美人体视频| 国产日产一区二区三区| 久久手机精品视频| 八戒八戒神马在线电影| 欧美成人sm免费视频| 高h视频在线观看| 久久中文字幕在线| 怡红院在线播放| 欧美裸身视频免费观看| 在线免费av导航| 久久久久久尹人网香蕉| 九色porny视频在线观看| 97在线视频免费播放| 色戒汤唯在线| 国产精品成av人在线视午夜片| 经典三级一区二区| 成人疯狂猛交xxx| 精品视频成人| 国产精品一区二区三区在线观| 国产精品18hdxxxⅹ在线| 精品国产一区二区三| 国产成人一区二区三区影院| 亚洲欧美日韩精品在线| 希岛爱理一区二区三区| 300部国产真实乱| 一区二区三区国产盗摄| 天天影视综合色| 国产一区欧美日韩| 国产xxxx视频| 欧美激情自拍偷拍| 成人免费毛片东京热| 午夜精品视频一区| 伊人久久久久久久久久久久| 欧美狂野另类xxxxoooo| 成人激情四射网| 精品在线观看国产| 幼a在线观看| 97精品一区二区视频在线观看| 老司机成人影院| 91久久久久久久久| 免费成人蒂法| 一区二区免费在线视频| 亚洲视频在线观看日本a| 亚洲国产国产亚洲一二三| 国产精品天天av精麻传媒| 国产精品一区在线| 极品人妻一区二区三区| 国产精品久久久久影院亚瑟| 国产精品99re| 欧美三级电影网| 涩涩视频免费看| 日韩最新中文字幕电影免费看| 国产一二三在线| 91久久中文字幕| 免费看日本一区二区| 中文字幕在线中文| 久久最新视频| 中国极品少妇xxxx| 国产精品白丝在线| 青青草免费观看视频| 欧美一级xxx| 1区2区3区在线观看| 欧美亚洲国产视频| 免费精品一区二区三区在线观看| 欧美福利一区二区三区| 韩国在线视频一区| 天天干天天av| 国产日韩欧美高清在线| 欧美亚洲天堂网| 欧美一区二区成人| 日本激情视频在线观看| 国产福利视频一区二区| 巨人精品**| 在线播放国产一区中文字幕剧情欧美 | 成人手机在线播放| 免费久久99精品国产| 九色porny自拍视频| 亚洲国产乱码最新视频 | 亚洲人精品午夜在线观看| 欧美aaaaaaa| 91香蕉嫩草影院入口| 成人在线免费小视频| 欧美一级黄色影院| 久久久五月婷婷| 色播视频在线播放| 欧美精品一区二区三区一线天视频 | 亚洲一区二区三区四区五区xx| 不卡av在线网| 久久伊人成人网| 欧美成人aa大片| 中文字幕有码在线观看| 成人写真福利网| 天天揉久久久久亚洲精品| 久热精品在线观看视频| 中文字幕av一区二区三区| 乱子伦一区二区三区| 亚洲偷欧美偷国内偷| 都市激情亚洲综合| 欧美理论一区二区| 日韩av不卡在线观看| 一区二区黄色片| 91国模大尺度私拍在线视频| 国产小视频在线| 日韩av快播网址| 精品国产一区二区三区香蕉沈先生| 十八禁视频网站在线观看| 久久久久久久综合| 中文字幕精品无| 中文字幕在线成人| 亚洲高清影院| 久久这里只有精品18| 成人高清视频免费观看| 99热在线观看免费精品| 日韩av在线网页| 欧美成人免费电影| 视频一区视频二区视频三区高| 奇米精品一区二区三区四区| 在线观看亚洲大片短视频| 欧美日韩精品欧美日韩精品一综合 | 97精品超碰一区二区三区| 五月婷婷激情视频| 色999日韩欧美国产| 粉嫩av国产一区二区三区| 麻豆一区二区三区在线观看| 成人午夜电影久久影院| 日本午夜视频在线观看| 亚洲午夜国产成人av电影男同| 国产精品诱惑| 久久综合久久久久| 久久一日本道色综合| 日韩xxx视频| 欧美激情网友自拍| 亚洲综合福利| 亚洲高清在线不卡| 亚洲va国产天堂va久久en| 国产美女性感在线观看懂色av| 国产在线观看精品| 亚洲视屏一区| 国产jjizz一区二区三区视频| 8x8x8国产精品| www.youjizz.com在线| 亚洲精品在线视频观看| 国产sm精品调教视频网站| 日本免费在线观看视频| 久久躁狠狠躁夜夜爽| 日韩精品丝袜美腿| 久久久久久久久久久久久久久国产 | 日韩毛片在线播放| 综合136福利视频在线| 动漫视频在线一区| 国产三级三级看三级| 香蕉影视欧美成人| 毛片网站在线免费观看|