日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

“睡服”面试官系列第十六篇之Symbol(建议收藏学习)

發(fā)布時間:2023/12/10 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 “睡服”面试官系列第十六篇之Symbol(建议收藏学习) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目錄

1. 概述

2. 作為屬性名的 Symbol

3. 實例:消除魔術(shù)字符串

4. 屬性名的遍歷

5. Symbol.for(),Symbol.keyFor()

6. 實例:模塊的 Singleton 模式

7. 內(nèi)置的 Symbol 值

7.1Symbol.hasInstance

7.2Symbol.isConcatSpreadable

7.3Symbol.species

7.4Symbol.match

7.5Symbol.replace

7.6Symbol.search

7.7Symbol.split

7.8Symbol.iterator

7.9Symbol.toPrimitive

7.10Symbol.toStringTag

7.11Symbol.unscopables


1. 概述

ES5 的對象屬性名都是字符串,這容易造成屬性名的沖突。比如,你使用了一個他人提供的對象,但又想為這個對象添加新的方法(mixin 模式),新方
法的名字就有可能與現(xiàn)有方法產(chǎn)生沖突。如果有一種機制,保證每個屬性的名字都是獨一無二的就好了,這樣就從根本上防止屬性名的沖突。這就是 ES6
引入 Symbol 的原因。
ES6 引入了一種新的原始數(shù)據(jù)類型 Symbol ,表示獨一無二的值。它是 JavaScript 語言的第七種數(shù)據(jù)類型,前六種是: undefined 、 null 、布爾值
(Boolean)、字符串(String)、數(shù)值(Number)、對象(Object)

Symbol 值通過 Symbol 函數(shù)生成。這就是說,對象的屬性名現(xiàn)在可以有兩種類型,一種是原來就有的字符串,另一種就是新增的 Symbol 類型。凡是屬
性名屬于 Symbol 類型,就都是獨一無二的,可以保證不會與其他屬性名產(chǎn)生沖突。

let s = Symbol(); typeof s // "symbol"

上面代碼中,變量 s 就是一個獨一無二的值。 typeof 運算符的結(jié)果,表明變量 s 是 Symbol 數(shù)據(jù)類型,而不是字符串之類的其他類型。
注意, Symbol 函數(shù)前不能使用 new 命令,否則會報錯。這是因為生成的 Symbol 是一個原始類型的值,不是對象。也就是說,由于 Symbol 值不是對
象,所以不能添加屬性。基本上,它是一種類似于字符串的數(shù)據(jù)類型。
Symbol 函數(shù)可以接受一個字符串作為參數(shù),表示對 Symbol 實例的描述,主要是為了在控制臺顯示,或者轉(zhuǎn)為字符串時,比較容易區(qū)分。

let s1 = Symbol('foo'); let s2 = Symbol('bar'); s1 // Symbol(foo) s2 // Symbol(bar) s1.toString() // "Symbol(foo)" s2.toString() // "Symbol(bar)"

上面代碼中, s1 和 s2 是兩個 Symbol 值。如果不加參數(shù),它們在控制臺的輸出都是 Symbol() ,不利于區(qū)分。有了參數(shù)以后,就等于為它們加上了描
述,輸出的時候就能夠分清,到底是哪一個值。
如果 Symbol 的參數(shù)是一個對象,就會調(diào)用該對象的 toString 方法,將其轉(zhuǎn)為字符串,然后才生成一個 Symbol 值

const obj = { toString() { return 'abc'; } }; const sym = Symbol(obj); sym // Symbol(abc)

注意, Symbol 函數(shù)的參數(shù)只是表示對當前 Symbol 值的描述,因此相同參數(shù)的 Symbol 函數(shù)的返回值是不相等的。

// 沒有參數(shù)的情況 let s1 = Symbol(); let s2 = Symbol(); s1 === s2 // false // 有參數(shù)的情況 let s1 = Symbol('foo'); let s2 = Symbol('foo'); s1 === s2 // false

上面代碼中, s1 和 s2 都是 Symbol 函數(shù)的返回值,而且參數(shù)相同,但是它們是不相等的。
Symbol 值不能與其他類型的值進行運算,會報錯。

let sym = Symbol('My symbol'); "your symbol is " + sym // TypeError: can't convert symbol to string `your symbol is ${sym}` // TypeError: can't convert symbol to string

但是,Symbol 值可以顯式轉(zhuǎn)為字符串

let sym = Symbol('My symbol'); String(sym) // 'Symbol(My symbol)' sym.toString() // 'Symbol(My symbol)'

另外,Symbol 值也可以轉(zhuǎn)為布爾值,但是不能轉(zhuǎn)為數(shù)值

let sym = Symbol(); Boolean(sym) // true !sym // false if (sym) { // ... } Number(sym) // TypeError sym + 2 // TypeError

2. 作為屬性名的 Symbol

由于每一個 Symbol 值都是不相等的,這意味著 Symbol 值可以作為標識符,用于對象的屬性名,就能保證不會出現(xiàn)同名的屬性。這對于一個對象由多個
模塊構(gòu)成的情況非常有用,能防止某一個鍵被不小心改寫或覆蓋。

let mySymbol = Symbol(); // 第一種寫法 let a = {}; a[mySymbol] = 'Hello!'; // 第二種寫法 let a = { [mySymbol]: 'Hello!' }; // 第三種寫法 let a = {}; Object.defineProperty(a, mySymbol, { value: 'Hello!' }); // 以上寫法都得到同樣結(jié)果 a[mySymbol] // "Hello!"

上面代碼通過方括號結(jié)構(gòu)和 Object.defineProperty ,將對象的屬性名指定為一個 Symbol 值。
注意,Symbol 值作為對象屬性名時,不能用點運算符。

const mySymbol = Symbol(); const a = {}; a.mySymbol = 'Hello!'; a[mySymbol] // undefined a['mySymbol'] // "Hello!"

上面代碼中,因為點運算符后面總是字符串,所以不會讀取 mySymbol 作為標識名所指代的那個值,導(dǎo)致 a 的屬性名實際上是一個字符串,而不是一個
Symbol 值。
同理,在對象的內(nèi)部,使用 Symbol 值定義屬性時,Symbol 值必須放在方括號之中。

let s = Symbol(); let obj = { [s]: function (arg) { ... } }; obj[s](123);

上面代碼中,如果 s 不放在方括號中,該屬性的鍵名就是字符串 s ,而不是 s 所代表的那個 Symbol 值。
采用增強的對象寫法,上面代碼的 obj 對象可以寫得更簡潔一些

let obj = { [s](arg) { ... } };

Symbol 類型還可以用于定義一組常量,保證這組常量的值都是不相等的。

log.levels = { DEBUG: Symbol('debug'), INFO: Symbol('info'), WARN: Symbol('warn') }; log(log.levels.DEBUG, 'debug message'); log(log.levels.INFO, 'info message');

下面是另外一個例子。

const COLOR_RED = Symbol(); const COLOR_GREEN = Symbol(); function getComplement(color) { switch (color) { case COLOR_RED: return COLOR_GREEN; case COLOR_GREEN: return COLOR_RED; default: throw new Error('Undefined color'); } }

常量使用 Symbol 值最大的好處,就是其他任何值都不可能有相同的值了,因此可以保證上面的 switch 語句會按設(shè)計的方式工作。
還有一點需要注意,Symbol 值作為屬性名時,該屬性還是公開屬性,不是私有屬性

3. 實例:消除魔術(shù)字符串

魔術(shù)字符串指的是,在代碼之中多次出現(xiàn)、與代碼形成強耦合的某一個具體的字符串或者數(shù)值。風(fēng)格良好的代碼,應(yīng)該盡量消除魔術(shù)字符串,改由含義清
晰的變量代替

function getArea(shape, options) { let area = 0; switch (shape) { case 'Triangle': // 魔術(shù)字符串 area = .5 * options.width * options.height; break; /* ... more code ... */ } return area; } getArea('Triangle', { width: 100, height: 100 }); // 魔術(shù)字符串

上面代碼中,字符串 Triangle 就是一個魔術(shù)字符串。它多次出現(xiàn),與代碼形成“強耦合”,不利于將來的修改和維護。
常用的消除魔術(shù)字符串的方法,就是把它寫成一個變量

const shapeType = { triangle: 'Triangle' }; function getArea(shape, options) { let area = 0; switch (shape) { case shapeType.triangle: area = .5 * options.width * options.height; break; } return area; } getArea(shapeType.triangle, { width: 100, height: 100 });

上面代碼中,我們把 Triangle 寫成 shapeType 對象的 triangle 屬性,這樣就消除了強耦合。
如果仔細分析,可以發(fā)現(xiàn) shapeType.triangle 等于哪個值并不重要,只要確保不會跟其他 shapeType 屬性的值沖突即可。因此,這里就很適合改用
Symbol 值。

const shapeType = { triangle: Symbol() };

上面代碼中,除了將 shapeType.triangle 的值設(shè)為一個 Symbol,其他地方都不用修改。

4. 屬性名的遍歷

Symbol 作為屬性名,該屬性不會出現(xiàn)在 for...in 、 for...of 循環(huán)中,也不會被 Object.keys() 、 Object.getOwnPropertyNames() 、
JSON.stringify() 返回。但是,它也不是私有屬性,有一個 Object.getOwnPropertySymbols 方法,可以獲取指定對象的所有 Symbol 屬性名

Object.getOwnPropertySymbols 方法返回一個數(shù)組,成員是當前對象的所有用作屬性名的 Symbol 值

const obj = {}; let a = Symbol('a'); let b = Symbol('b'); obj[a] = 'Hello'; obj[b] = 'World'; const objectSymbols = Object.getOwnPropertySymbols(obj); objectSymbols // [Symbol(a), Symbol(b)]

下面是另一個例子, Object.getOwnPropertySymbols 方法與 for...in 循環(huán)、 Object.getOwnPropertyNames 方法進行對比的例子

const obj = {}; let foo = Symbol("foo"); Object.defineProperty(obj, foo, { value: "foobar", }); for (let i in obj) { console.log(i); // 無輸出 } Object.getOwnPropertyNames(obj) // [] Object.getOwnPropertySymbols(obj) // [Symbol(foo)]

?上面代碼中,使用 Object.getOwnPropertyNames 方法得不到 Symbol 屬性名,需要使用 Object.getOwnPropertySymbols 方法。
另一個新的 API, Reflect.ownKeys 方法可以返回所有類型的鍵名,包括常規(guī)鍵名和 Symbol 鍵名。

let obj = { [Symbol('my_key')]: 1, enum: 2, nonEnum: 3 }; Reflect.ownKeys(obj) // ["enum", "nonEnum", Symbol(my_key)]

由于以 Symbol 值作為名稱的屬性,不會被常規(guī)方法遍歷得到。我們可以利用這個特性,為對象定義一些非私有的、但又希望只用于內(nèi)部的方法。

let size = Symbol('size'); class Collection { constructor() { this[size] = 0; } add(item) { this[this[size]] = item; this[size]++; } static sizeOf(instance) { return instance[size]; } } let x = new Collection(); Collection.sizeOf(x) // 0 x.add('foo'); Collection.sizeOf(x) // 1 Object.keys(x) // ['0'] Object.getOwnPropertyNames(x) // ['0'] Object.getOwnPropertySymbols(x) // [Symbol(size)]

上面代碼中,對象 x 的 size 屬性是一個 Symbol 值,所以 Object.keys(x) 、 Object.getOwnPropertyNames(x) 都無法獲取它。這就造成了一種非私有
的內(nèi)部方法的效果。

5. Symbol.for(),Symbol.keyFor()

有時,我們希望重新使用同一個 Symbol 值, Symbol.for 方法可以做到這一點。它接受一個字符串作為參數(shù),然后搜索有沒有以該參數(shù)作為名稱的
Symbol 值。如果有,就返回這個 Symbol 值,否則就新建并返回一個以該字符串為名稱的 Symbol 值。

let s1 = Symbol.for('foo'); let s2 = Symbol.for('foo'); s1 === s2 // true

上面代碼中, s1 和 s2 都是 Symbol 值,但是它們都是同樣參數(shù)的 Symbol.for 方法生成的,所以實際上是同一個值。
Symbol.for() 與 Symbol() 這兩種寫法,都會生成新的 Symbol。它們的區(qū)別是,前者會被登記在全局環(huán)境中供搜索,后者不會。 Symbol.for() 不會每
次調(diào)用就返回一個新的 Symbol 類型的值,而是會先檢查給定的 key 是否已經(jīng)存在,如果不存在才會新建一個值。比如,如果你調(diào)用
Symbol.for("cat") 30 次,每次都會返回同一個 Symbol 值,但是調(diào)用 Symbol("cat") 30 次,會返回 30 個不同的 Symbol 值。

Symbol.for("bar") === Symbol.for("bar") // true Symbol("bar") === Symbol("bar") // false

上面代碼中,由于 Symbol() 寫法沒有登記機制,所以每次調(diào)用都會返回一個不同的值。
Symbol.keyFor 方法返回一個已登記的 Symbol 類型值的 key 。

let s1 = Symbol.for("foo"); Symbol.keyFor(s1) // "foo" let s2 = Symbol("foo"); Symbol.keyFor(s2) // undefined

上面代碼中,變量 s2 屬于未登記的 Symbol 值,所以返回 undefined 。
需要注意的是, Symbol.for 為 Symbol 值登記的名字,是全局環(huán)境的,可以在不同的 iframe 或 service worker 中取到同一個值

iframe = document.createElement('iframe'); iframe.src = String(window.location); document.body.appendChild(iframe); iframe.contentWindow.Symbol.for('foo') === Symbol.for('foo') // true

?上面代碼中,iframe 窗口生成的 Symbol 值,可以在主頁面得到

6. 實例:模塊的 Singleton 模式

Singleton 模式指的是調(diào)用一個類,任何時候返回的都是同一個實例。
對于 Node 來說,模塊文件可以看成是一個類。怎么保證每次執(zhí)行這個模塊文件,返回的都是同一個實例呢?
很容易想到,可以把實例放到頂層對象 global

// mod.js function A() { this.foo = 'hello'; } if (!global._foo) { global._foo = new A(); } module.exports = global._foo;

然后,加載上面的 mod.js

const a = require('./mod.js'); console.log(a.foo);

上面代碼中,變量 a 任何時候加載的都是 A 的同一個實例。

但是,這里有一個問題,全局變量 global._foo 是可寫的,任何文件都可以修改。

const a = require('./mod.js'); global._foo = 123;

上面的代碼,會使得別的腳本加載 mod.js 都失真。
為了防止這種情況出現(xiàn),我們就可以使用 Symbol

// mod.js const FOO_KEY = Symbol.for('foo'); function A() { this.foo = 'hello'; } if (!global[FOO_KEY]) { global[FOO_KEY] = new A(); } module.exports = global[FOO_KEY];

上面代碼中,可以保證 global[FOO_KEY] 不會被無意間覆蓋,但還是可以被改寫

const a = require('./mod.js'); global[Symbol.for('foo')] = 123;

如果鍵名使用 Symbol 方法生成,那么外部將無法引用這個值,當然也就無法改寫

// mod.js const FOO_KEY = Symbol('foo'); // 后面代碼相同 ……

上面代碼將導(dǎo)致其他腳本都無法引用 FOO_KEY 。但這樣也有一個問題,就是如果多次執(zhí)行這個腳本,每次得到的 FOO_KEY 都是不一樣的。雖然 Node 會將
腳本的執(zhí)行結(jié)果緩存,一般情況下,不會多次執(zhí)行同一個腳本,但是用戶可以手動清除緩存,所以也不是完全可靠。

7. 內(nèi)置的 Symbol 值

除了定義自己使用的 Symbol 值以外,ES6 還提供了 11 個內(nèi)置的 Symbol 值,指向語言內(nèi)部使用的方法

7.1Symbol.hasInstance

對象的 Symbol.hasInstance 屬性,指向一個內(nèi)部方法。當其他對象使用 instanceof 運算符,判斷是否為該對象的實例時,會調(diào)用這個方法。比如, foo
instanceof Foo 在語言內(nèi)部,實際調(diào)用的是 Foo[Symbol.hasInstance](foo) 。

class MyClass { [Symbol.hasInstance](foo) { return foo instanceof Array; } } [1, 2, 3] instanceof new MyClass() // true

上面代碼中, MyClass 是一個類, new MyClass() 會返回一個實例。該實例的 Symbol.hasInstance 方法,會在進行 instanceof 運算時自動調(diào)用,判斷左
側(cè)的運算子是否為 Array 的實例。
下面是另一個例子

class Even { static [Symbol.hasInstance](obj) { return Number(obj) % 2 === 0; } } // 等同于 const Even = { [Symbol.hasInstance](obj) { return Number(obj) % 2 === 0; 1 instanceof Even // false 2 instanceof Even // true 12345 instanceof Even // false

7.2Symbol.isConcatSpreadable

對象的 Symbol.isConcatSpreadable 屬性等于一個布爾值,表示該對象用于 Array.prototype.concat() 時,是否可以展開。

let arr1 = ['c', 'd']; ['a', 'b'].concat(arr1, 'e') // ['a', 'b', 'c', 'd', 'e'] arr1[Symbol.isConcatSpreadable] // undefined let arr2 = ['c', 'd']; arr2[Symbol.isConcatSpreadable] = false; ['a', 'b'].concat(arr2, 'e') // ['a', 'b', ['c','d'], 'e']

上面代碼說明,數(shù)組的默認行為是可以展開, Symbol.isConcatSpreadable 默認等于 undefined 。該屬性等于 true 時,也有展開的效果。
類似數(shù)組的對象正好相反,默認不展開。它的 Symbol.isConcatSpreadable 屬性設(shè)為 true ,才可以展開

let obj = {length: 2, 0: 'c', 1: 'd'}; ['a', 'b'].concat(obj, 'e') // ['a', 'b', obj, 'e'] obj[Symbol.isConcatSpreadable] = true; ['a', 'b'].concat(obj, 'e') // ['a', 'b', 'c', 'd', 'e']

Symbol.isConcatSpreadable 屬性也可以定義在類里面

class A1 extends Array { constructor(args) { super(args); this[Symbol.isConcatSpreadable] = true; } } class A2 extends Array { constructor(args) { super(args); } get [Symbol.isConcatSpreadable] () { return false; } } let a1 = new A1(); a1[0] = 3; a1[1] = 4; let a2 = new A2(); a2[0] = 5; a2[1] = 6; [1, 2].concat(a1).concat(a2) // [1, 2, 3, 4, [5, 6]]

上面代碼中,類 A1 是可展開的,類 A2 是不可展開的,所以使用 concat 時有不一樣的結(jié)果。
注意, Symbol.isConcatSpreadable 的位置差異, A1 是定義在實例上, A2 是定義在類本身,效果相同。

7.3Symbol.species

對象的 Symbol.species 屬性,指向當前對象的構(gòu)造函數(shù)。創(chuàng)造實例時,默認會調(diào)用這個方法,即使用這個屬性返回的函數(shù)當作構(gòu)造函數(shù),來創(chuàng)造新的實例
對象。

class MyArray extends Array { // 覆蓋父類 Array 的構(gòu)造函數(shù) static get [Symbol.species]() { return Array; } }

上面代碼中,子類 MyArray 繼承了父類 Array 。創(chuàng)建 MyArray 的實例對象時,本來會調(diào)用它自己的構(gòu)造函數(shù)(本例中被省略了),但是由于定義了
Symbol.species 屬性,所以會使用這個屬性返回的的函數(shù),創(chuàng)建 MyArray 的實例。
這個例子也說明,定義 Symbol.species 屬性要采用 get 讀取器。默認的 Symbol.species 屬性等同于下面的寫法。

static get [Symbol.species]() { return this; }

下面是一個例子。

class MyArray extends Array { static get [Symbol.species]() { return Array; } } let a = new MyArray(1,2,3); let mapped = a.map(x => x * x); mapped instanceof MyArray // false mapped instanceof Array // true

上面代碼中,由于構(gòu)造函數(shù)被替換成了 Array 。所以, mapped 對象不是 MyArray 的實例,而是 Array 的實例。

7.4Symbol.match

對象的 Symbol.match 屬性,指向一個函數(shù)。當執(zhí)行 str.match(myObject) 時,如果該屬性存在,會調(diào)用它,返回該方法的返回值

String.prototype.match(regexp) // 等同于 regexp[Symbol.match](this) class MyMatcher { [Symbol.match](string) { return 'hello world'.indexOf(string); } } 'e'.match(new MyMatcher()) // 1

7.5Symbol.replace

對象的 Symbol.replace 屬性,指向一個方法,當該對象被 String.prototype.replace 方法調(diào)用時,會返回該方法的返回值

String.prototype.replace(searchValue, replaceValue) // 等同于 searchValue[Symbol.replace](this, replaceValue)

下面是一個例子。

const x = {}; x[Symbol.replace] = (...s) => console.log(s); 'Hello'.replace(x, 'World') // ["Hello", "World"]

?Symbol.replace 方法會收到兩個參數(shù),第一個參數(shù)是 replace 方法正在作用的對象,上面例子是 Hello ,第二個參數(shù)是替換后的值,上面例子是 World

7.6Symbol.search

對象的 Symbol.search 屬性,指向一個方法,當該對象被 String.prototype.search 方法調(diào)用時,會返回該方法的返回值。

String.prototype.search(regexp) // 等同于 regexp[Symbol.search](this) class MySearch { constructor(value) { this.value = value; } [Symbol.search](string) { return string.indexOf(this.value); } } 'foobar'.search(new MySearch('foo')) // 0

7.7Symbol.split

對象的 Symbol.split 屬性,指向一個方法,當該對象被 String.prototype.split 方法調(diào)用時,會返回該方法的返回值

String.prototype.split(separator, limit) // 等同于 separator[Symbol.split](this, limit)

下面是一個例子。

class MySplitter { constructor(value) { this.value = value; } [Symbol.split](string) { let index = string.indexOf(this.value); if (index === -1) { return string; } return [ string.substr(0, index), string.substr(index + this.value.length) ]; } } 'foobar'.split(new MySplitter('foo')) // ['', 'bar'] 'foobar'.split(new MySplitter('bar')) // ['foo', ''] 'foobar'.split(new MySplitter('baz')) // 'foobar'

上面方法使用 Symbol.split 方法,重新定義了字符串對象的 split 方法的行為,

7.8Symbol.iterator

Symbol.iterator

const myIterable = {}; myIterable[Symbol.iterator] = function* () { yield 1; yield 2; yield 3; }; [...myIterable] // [1, 2, 3]

對象進行 for...of 循環(huán)時,會調(diào)用 Symbol.iterator 方法,返回該對象的默認遍歷器

class Collection { *[Symbol.iterator]() { let i = 0; while(this[i] !== undefined) { yield this[i]; ++i; } } } let myCollection = new Collection(); myCollection[0] = 1; myCollection[1] = 2; for(let value of myCollection) { console.log(value); } // 1 // 2

7.9Symbol.toPrimitive

對象的 Symbol.toPrimitive 屬性,指向一個方法。該對象被轉(zhuǎn)為原始類型的值時,會調(diào)用這個方法,返回該對象對應(yīng)的原始類型值。
Symbol.toPrimitive 被調(diào)用時,會接受一個字符串參數(shù),表示當前運算的模式,一共有三種模式。
Number:該場合需要轉(zhuǎn)成數(shù)值
String:該場合需要轉(zhuǎn)成字符串
Default:該場合可以轉(zhuǎn)成數(shù)值,也可以轉(zhuǎn)成字符串

let obj = { [Symbol.toPrimitive](hint) { switch (hint) { case 'number': return 123; case 'string': return 'str'; case 'default': return 'default'; default: throw new Error(); } } }; 2 * obj // 246 3 + obj // '3default' obj == 'default' // true String(obj) // 'str'

7.10Symbol.toStringTag

對象的 Symbol.toStringTag 屬性,指向一個方法。在該對象上面調(diào)用 Object.prototype.toString 方法時,如果這個屬性存在,它的返回值會出現(xiàn)在
toString 方法返回的字符串之中,表示對象的類型。也就是說,這個屬性可以用來定制 [object Object] 或 [object Array] 中 object 后面的那個字符
串。

// 例一 ({[Symbol.toStringTag]: 'Foo'}.toString()) // "[object Foo]" // 例二 class Collection { get [Symbol.toStringTag]() { return 'xxx'; } } let x = new Collection(); Object.prototype.toString.call(x) // "[object xxx]"

ES6 新增內(nèi)置對象的 Symbol.toStringTag 屬性值如下。
JSON[Symbol.toStringTag] :'JSON'
Math[Symbol.toStringTag] :'Math'
Module 對象 M[Symbol.toStringTag] :'Module'
ArrayBuffer.prototype[Symbol.toStringTag] :'ArrayBuffer'
DataView.prototype[Symbol.toStringTag] :'DataView'
Map.prototype[Symbol.toStringTag] :'Map'
Promise.prototype[Symbol.toStringTag] :'Promise'
Set.prototype[Symbol.toStringTag] :'Set'
%TypedArray%.prototype[Symbol.toStringTag] :'Uint8Array'等
WeakMap.prototype[Symbol.toStringTag] :'WeakMap'
WeakSet.prototype[Symbol.toStringTag] :'WeakSet'
%MapIteratorPrototype%[Symbol.toStringTag] :'Map Iterator'
%SetIteratorPrototype%[Symbol.toStringTag] :'Set Iterator'
%StringIteratorPrototype%[Symbol.toStringTag] :'String Iterator'
Symbol.prototype[Symbol.toStringTag] :'Symbol'
Generator.prototype[Symbol.toStringTag] :'Generator'
GeneratorFunction.prototype[Symbol.toStringTag] :'GeneratorFunction'

7.11Symbol.unscopables

對象的 Symbol.unscopables 屬性,指向一個對象。該對象指定了使用 with 關(guān)鍵字時,哪些屬性會被 with 環(huán)境排除。

Array.prototype[Symbol.unscopables] // { // copyWithin: true, // entries: true, // fill: true, // find: true, // findIndex: true, // includes: true, // keys: true // } Object.keys(Array.prototype[Symbol.unscopables]) // ['copyWithin', 'entries', 'fill', 'find', 'findIndex', 'includes', 'keys']

上面代碼說明,數(shù)組有 7 個屬性,會被 with 命令排除。

// 沒有 unscopables 時 class MyClass { foo() { return 1; } } var foo = function () { return 2; }; with (MyClass.prototype) { foo(); // 1 } // 有 unscopables 時 class MyClass { foo() { return 1; } get [Symbol.unscopables]() { return { foo: true }; } } var foo = function () { return 2; }; with (MyClass.prototype) { foo(); // 2 }

上面代碼通過指定 Symbol.unscopables 屬性,使得 with 語法塊不會在當前作用域?qū)ふ?foo 屬性,即 foo 將指向外層作用域的變量

總結(jié)

本博客源于本人閱讀相關(guān)書籍和視頻總結(jié),創(chuàng)作不易,謝謝點贊支持。學(xué)到就是賺到。我是歌謠,勵志成為一名優(yōu)秀的技術(shù)革新人員。

歡迎私信交流,一起學(xué)習(xí),一起成長。

推薦鏈接 其他文件目錄參照

“睡服“面試官系列之各系列目錄匯總(建議學(xué)習(xí)收藏)

總結(jié)

以上是生活随笔為你收集整理的“睡服”面试官系列第十六篇之Symbol(建议收藏学习)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

女人高潮特级毛片 | 国产精品久久久久永久免费观看 | 最近中文字幕高清字幕在线视频 | 国产黄av| 国产色a在线观看 | 日韩理论电影网 | 人成在线免费视频 | av日韩精品 | 久久a热6 | 欧美成人性网 | 亚洲高清不卡av | 日韩a级黄色 | 国产999精品久久久久久绿帽 | 99久久999久久久精玫瑰 | 欧美国产日韩在线观看 | 免费观看mv大片高清 | 日韩高清一区二区 | 男女拍拍免费视频 | 视频一区二区精品 | 一级黄毛片 | 色多多在线观看 | 天天天综合网 | 中文字幕精品一区二区精品 | 高清一区二区三区 | 国产高清日韩欧美 | 久久久久色 | 色婷婷视频在线观看 | 精品国产乱码久久久久久1区二区 | 玖玖在线观看视频 | 日韩在线在线 | 人人干人人干人人干 | 国产日产精品一区二区三区四区的观看方式 | 日韩视频中文字幕 | 美女视频一区 | 久草网视频在线观看 | 国产精品毛片久久 | 2023国产精品自产拍在线观看 | 精品人妖videos欧美人妖 | 六月天色婷婷 | 91九色在线观看视频 | 91日韩免费| 日韩两性视频 | 麻豆一二 | 精品在线视频观看 | 天天综合亚洲 | 久久精品成人 | 亚洲成人高清在线 | 亚洲精品美女在线 | 午夜 在线 | 麻豆国产视频 | 99这里只有久久精品视频 | 久久久午夜电影 | 玖玖视频 | 成人丝袜 | 国产一区二区久久久 | 久久精品久久综合 | 亚洲午夜av久久乱码 | 国产精品美女久久久久久久久 | 狠狠色丁香婷婷综合基地 | 黄色一级大片在线免费看产 | 久久久久久久久久久福利 | 精品一区二区综合 | 中文字幕av在线不卡 | 亚洲欧洲精品一区二区精品久久久 | 九九热视频在线免费观看 | 精品国产乱码久久久久久1区2匹 | 在线中文字幕观看 | 香蕉视频在线视频 | 国产麻豆剧果冻传媒视频播放量 | 能在线看的av | 国产护士av | 91成人看片| 久久99操| av成人动漫 | 最新av网址在线 | 国产精品精 | 国产 在线 高清 精品 | 日韩在线三区 | 又黄又爽免费视频 | 毛片随便看| 日韩av午夜在线观看 | 欧美日韩视频观看 | 97超碰人 | 毛片美女网站 | 亚洲激情av | 韩国av三级 | 日韩精品一区二区三区在线视频 | 亚洲va综合va国产va中文 | 在线观看日韩中文字幕 | 狠狠狠狠狠狠狠狠 | 免费看短 | 国产成人一区二区三区在线观看 | 人人草在线视频 | 欧美国产日韩一区二区 | 国产精品久久人 | 国产精品无av码在线观看 | 国产99久久久欧美黑人 | 久久久亚洲影院 | 欧美一区二视频在线免费观看 | 日韩欧美一区二区三区在线 | 国产婷婷vvvv激情久 | 91精品在线免费视频 | 天天做日日爱夜夜爽 | 国产经典av| 最新av免费在线 | 午夜精品电影 | 麻豆94tv免费版 | 黄色aaa毛片 | 国产成人精品日本亚洲999 | 日韩精品视频在线观看网址 | 96国产在线 | 欧美日韩国产一区二区三区在线观看 | 亚洲日本中文字幕在线观看 | 中文成人字幕 | 欧美色图p| 亚洲在线精品 | 天天操天天干天天摸 | 91色影院 | 国产女人18毛片水真多18精品 | 在线观看91网站 | 欧美日韩一区二区三区不卡 | 网址你懂的在线观看 | 国产不卡精品视频 | 欧洲激情综合 | 国产九色视频在线观看 | 国产成人一二片 | 欧美福利在线播放 | 中文字幕二区三区 | 91看片在线观看 | 国产网红在线观看 | 五月婷婷,六月丁香 | 国产色秀视频 | 在线观看国产永久免费视频 | 国产精品久久久久久麻豆一区 | 欧美亚洲专区 | 精品视频在线免费观看 | 久草在线看片 | 国产精品黄色影片导航在线观看 | 九九热免费在线观看 | 九九亚洲视频 | 国产在线观看你懂得 | 欧洲性视频 | 国内精品视频在线播放 | 国产一级不卡视频 | 中文字幕av播放 | 日韩久久精品一区二区三区下载 | 爱色av.com | 国产精品视频免费观看 | 国产中文字幕三区 | 欧美一区日韩精品 | 久久久久久久免费观看 | 97在线资源 | 久久综合色综合88 | 国产日韩在线播放 | 国产日产在线观看 | 日韩视频在线不卡 | 蜜臀av性久久久久蜜臀aⅴ四虎 | 欧美analxxxx| 人人爽网站 | 91在线国产观看 | 亚洲精品综合久久 | 日本黄色免费大片 | 黄色av电影一级片 | 久久综合五月天婷婷伊人 | 麻豆91精品 | 欧美91视频 | 成人久久毛片 | 91人人插 | 色a资源在线| 久要激情网 | 久久99国产精品免费 | 又爽又黄又无遮挡网站动态图 | 日韩免费三区 | 在线成人高清电影 | 中文字幕日本电影 | 久久人人精 | av九九| 狠狠操操| 九色91在线 | 婷婷九月激情 | 国产香蕉视频在线观看 | 精品视频免费 | 婷婷亚洲综合五月天小说 | 日本最新高清不卡中文字幕 | 蜜臀一区二区三区精品免费视频 | 最近2019年日本中文免费字幕 | 午夜电影中文字幕 | 国产五月色婷婷六月丁香视频 | 日本中文字幕在线播放 | 成人国产精品免费观看 | 五月婷婷在线视频观看 | 亚洲精品美女视频 | 日韩在线看片 | 成片免费观看视频999 | 国产又粗又长又硬免费视频 | 亚洲va在线va天堂 | 黄色成人av在线 | av福利网址导航 | www天天干com| 国产精品久久久久久999 | 国产视频一区二区在线观看 | 永久免费的啪啪网站免费观看浪潮 | 999视频在线播放 | 日韩h在线观看 | 97超碰在 | 国产成人免费在线 | 亚洲影院色 | 精品 一区 在线 | 日韩午夜电影网 | 一区二区三区免费在线播放 | 天天干天天操天天 | 精品一区二区在线观看 | 国产成人三级在线播放 | 99色精品视频 | av福利超碰网站 | 黄色电影网站在线观看 | 日韩高清在线一区二区 | 444av| 丁香婷婷久久久综合精品国产 | 国产成人精品一区二区三区福利 | 免费在线播放黄色 | 天天射色综合 | 99久久精品国产毛片 | 国产精品午夜免费福利视频 | 伊人色**天天综合婷婷 | 日韩免费一区 | 国产精品免费久久久久 | 天天操 夜夜操 | 亚洲欧美日韩国产一区二区 | 亚洲精品女 | 欧美日韩中文字幕综合视频 | 2021国产视频 | 色婷婷狠狠| 日韩高清精品免费观看 | 国产97免费 | 日韩精品免费在线播放 | 欧美日韩首页 | 欧美一级片在线 | 精品视频成人 | 91手机电视 | 久久免费视频这里只有精品 | 欧美黄污视频 | 国内丰满少妇猛烈精品播 | 国产男女爽爽爽免费视频 | 国产在线2020 | 人人干在线 | 国产精品欧美久久久久天天影视 | 久久久国产网站 | 国产精品福利久久久 | 国产高清在线免费观看 | 国产欧美综合在线观看 | 丁香九月激情 | 亚洲视频,欧洲视频 | 久久久久久黄 | 一级久久精品 | 中文字幕久久精品亚洲乱码 | 亚洲国产精品成人精品 | 九九热只有这里有精品 | 国产成人一区二区三区免费看 | 免费手机黄色网址 | 男女激情免费网站 | 久章草在线观看 | 91精品国产99久久久久久红楼 | 欧美日韩中文在线观看 | 色干综合 | 久久看看| 国产一区欧美一区 | 午夜精品久久久久久久久久久久久久 | 麻豆传媒视频在线播放 | 国产精品99久久久精品免费观看 | 欧美91片 | 国产精品18久久久久久vr | 少妇bbbb搡bbbb桶 | 日本成址在线观看 | 国产日韩视频在线 | 国产精品久久久久久久久搜平片 | 国内精品久久久久影院一蜜桃 | 免费精品视频在线观看 | 一级欧美黄 | 18久久久久久 | 草樱av | 国产成人精品久久二区二区 | 狠狠干婷婷色 | 日韩免费中文 | 在线一二三四区 | 亚洲一区二区三区毛片 | 人人盈棋牌 | 国产69久久久欧美一级 | 一区二区三区 亚洲 | 国产成人在线网站 | 高清色免费| 九九久久久久久久久激情 | 国产无区一区二区三麻豆 | 在线观看免费视频你懂的 | 欧美性色19p | 91在线观看视频 | 久久第四色 | 国产精品你懂的在线观看 | 久久精品99国产 | 亚洲激情| 九色91在线 | 国产日产高清dvd碟片 | 美女视频久久久 | 人人爱天天操 | 久久国产精品一区二区三区 | 又黄又爽又刺激视频 | 在线观看 国产 | 国产生活一级片 | 欧美日韩国产网站 | 免费网站黄色 | 99精品久久只有精品 | 国产美女久久久 | 亚洲精品88欧美一区二区 | 久久精品99国产 | 久久久一本精品99久久精品66 | 最近2019年日本中文免费字幕 | 欧美日韩国产综合一区二区 | 日韩在线第一区 | 欧美大片在线观看一区 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 国产精品女主播一区二区三区 | 亚洲精品视频在线免费 | 日韩一级成人av | 中文字幕在线高清 | 亚洲一区网 | 四虎国产精品免费 | 精品国产免费观看 | 伊人超碰在线 | 99精品视频在线观看免费 | 久久久久欠精品国产毛片国产毛生 | 最新真实国产在线视频 | 天天干天天拍天天操天天拍 | 五月婷婷开心中文字幕 | 97人人模人人爽人人喊网 | 97电影院在线观看 | 国产精品系列在线 | 99色在线播放 | 黄色录像av | 欧美午夜精品久久久久久浪潮 | 久久久久久久久久久国产精品 | 久久精品免费 | 西西www444| 性色视频在线 | 91av99| 色噜噜在线观看 | 色在线免费观看 | 9在线观看免费高清完整版 玖玖爱免费视频 | 日韩手机视频 | 日韩大片免费在线观看 | 91丨九色丨91啦蝌蚪老版 | 日韩理论在线播放 | 日韩伦理片一区二区三区 | 国产麻豆电影在线观看 | 麻豆传媒精品 | 国产精品久久久一区二区三区网站 | 色资源中文字幕 | 热久久电影 | 色资源网免费观看视频 | 国产精品 中文在线 | 欧美看片 | 在线 影视 一区 | 中文字幕人成人 | 久久开心激情 | 91成人看片| 碰超人人| 五月婷婷操 | 奇米影视8888在线观看大全免费 | 狠狠色噜噜狠狠 | 看片一区二区三区 | 97成人在线 | 国产精品成人国产乱一区 | 色婷婷综合视频在线观看 | 久久久久免费电影 | 成人亚洲精品久久久久 | 亚洲黄色激情小说 | 国产一区二区在线免费播放 | 欧美aaa大片 | 国产九色在线播放九色 | 免费看的黄色 | 久久久久国产精品免费免费搜索 | 色偷偷888欧美精品久久久 | 狠狠色狠狠色合久久伊人 | 国产精品国产三级国产aⅴ9色 | 又长又大又黑又粗欧美 | 91精品系列 | 一区二区三区免费在线观看视频 | 久精品视频免费观看2 | 婷婷色在线视频 | 日韩羞羞 | 久久久久久福利 | 国产va在线 | 久久国产精品99久久久久久老狼 | 九九九热| 91爱爱电影| 国产人成在线观看 | 色视频在线免费观看 | 狠狠色噜噜狠狠狠狠2021天天 | 全黄网站 | 亚洲无在线 | 丁香综合激情 | 久久9精品 | 午夜私人影院 | 中文字幕 国产视频 | 97超碰在线免费 | 亚洲资源一区 | 国产精品va在线 | 中文字幕国产精品一区二区 | 永久精品视频 | 又爽又黄在线观看 | 久久国产精品99久久人人澡 | 午夜av剧场| 欧美激情第一区 | 91精品无人成人www | 亚洲欧美国产精品久久久久 | 国产高清免费观看 | 九九视频这里只有精品 | 国产精品女 | 欧美一二三视频 | 激情xxxx | 成人在线播放免费观看 | 国产在线观看av | 天天曰夜夜爽 | 久草久草视频 | 亚洲情感电影大片 | 亚洲资源在线网 | 中文字幕 第二区 | 一区中文字幕电影 | 国产精品综合久久 | 精精国产xxxx视频在线播放 | 日韩高清在线一区 | 91麻豆精品国产自产在线 | 91精品在线观看视频 | 免费污片 | 国产特级毛片aaaaaa高清 | 搡bbbb搡bbb视频 | 久久九九精品 | 在线免费观看视频 | 久久精品国产亚洲a | 91精品国产乱码在线观看 | 久久精品中文字幕一区二区三区 | 中文字幕久久久精品 | 麻豆成人在线观看 | 久久久免费观看完整版 | 九九国产精品视频 | 免费网站黄色 | 亚洲国产天堂av | 久久国产亚洲视频 | 视频一区在线播放 | 国产一区二区在线视频观看 | 久久午夜精品视频 | 少妇bbw搡bbbb搡bbbb | 99综合电影在线视频 | 玖玖在线免费视频 | 精品影院一区二区久久久 | 国产精品久久久久免费 | 婷婷日日 | 成人国产精品久久久久久亚洲 | 久久国产精品一区二区 | 日韩精品一区二区三区在线播放 | 成人免费看片98欧美 | 91视频免费看 | 中文字幕在线专区 | 人人澡av| 丁香六月婷 | 99精品在线免费在线观看 | 一级黄色毛片 | 国产综合精品一区二区三区 | 免费黄在线看 | 51久久夜色精品国产麻豆 | 国产a精品 | 免费亚洲黄色 | 中文字幕在线看视频 | 最新色站| 91视频3p | 在线看欧美 | 国产精品一区二区在线免费观看 | 99精品在线直播 | 在线中文字幕电影 | 日韩日韩日韩日韩 | 欧美成人精品欧美一级乱黄 | 国产精品人人做人人爽人人添 | 久精品在线| 亚洲欧美日韩不卡 | 精品一区二区av | 免费观看成人网 | 日韩激情第一页 | 国产一线二线三线性视频 | 超碰在线1 | 国产三级精品三级在线观看 | 免费观看的av网站 | 黄色av电影 | 蜜桃av观看| 91精品视频免费在线观看 | 手机av在线网站 | 中文在线免费视频 | 成人午夜电影在线播放 | 久久久精品国产免费观看一区二区 | 在线观看播放av | 欧美analxxxx | 欧美另类视频 | 天天天综合 | 久久新视频 | 九九热精品视频在线播放 | 最近中文字幕免费大全 | 美女视频永久黄网站免费观看国产 | 色多多在线观看 | 日韩成人一级大片 | 国产亚洲综合在线 | 亚洲精品av中文字幕在线在线 | 97久久精品午夜一区二区 | 国产黄大片在线观看 | 成人av片在线观看 | 国产成人精品在线 | 激情网站五月天 | 久久久久国产精品一区二区 | 亚洲va欧美va人人爽春色影视 | 国产成人av电影在线观看 | 男女激情免费网站 | 久久大香线蕉app | 成人黄色免费在线观看 | 国产91精品高清一区二区三区 | 欧美日韩免费看 | 涩涩色亚洲一区 | 日韩精品中文字幕在线观看 | 成人国产综合 | 黄色在线成人 | 国产日韩欧美在线观看 | 国产免费区 | 99精品福利视频 | 亚洲精品久久久久中文字幕m男 | 97视频入口免费观看 | 九九精品视频在线观看 | 99草在线视频 | 成人黄色电影在线观看 | 97精品视频在线播放 | 亚洲成av人影片在线观看 | 国产精品1区2区在线观看 | 在线观看成人福利 | 日韩综合色 | 91九色国产 | 欧美激情另类 | 色综合天天干 | 国产男女免费完整视频 | 91亚洲精品在线观看 | 黄色小说网站在线 | 国产伦理久久精品久久久久_ | 九九热只有这里有精品 | 久久综合视频网 | 96国产精品视频 | 97在线播放视频 | 欧美午夜寂寞影院 | 人人舔人人射 | 综合网天天射 | 国产中文字幕一区二区 | 精品一区二区三区在线播放 | 国产欧美在线一区二区三区 | 成人av在线一区二区 | 成人资源在线 | 丁香六月综合网 | 911免费视频| 国产精品麻豆一区二区三区 | 亚洲va欧美| 国产香蕉97碰碰久久人人 | 在线影院av | 国产精品欧美精品 | 区一区二区三在线观看 | 日韩视| 欧美日韩3p | 成人资源在线观看 | 国产精品第 | 免费成人在线观看视频 | zzijzzij亚洲日本少妇熟睡 | 男女视频国产 | 超碰在线97免费 | av资源免费看 | 成人av资源在线 | 夜夜澡人模人人添人人看 | 99精品国产福利在线观看免费 | 91精品久久久久 | 天天夜夜亚洲 | 亚洲综合色激情五月 | 丁香午夜婷婷 | 五月天天色 | 久草精品视频 | 91黄色影视 | 玖玖在线免费视频 | 久久国内精品 | av东方在线 | 天天操夜夜操国产精品 | 欧美一级艳片视频免费观看 | 久草网免费 | 久久精品高清视频 | 亚洲精品9 | 亚洲高清视频在线观看免费 | 午夜999| 在线视频日韩欧美 | 激情久久久 | 日韩欧美久久 | 欧美成人猛片 | 黄色在线免费观看网址 | 日韩二区三区在线观看 | 久久久久久久国产精品 | 99一级片 | 色午夜影院 | 国产精品久久久久三级 | 色综合久久久久综合99 | 国产亚洲精品综合一区91 | 97超碰精品 | 成人av一区二区在线观看 | 夜夜夜| 五月婷网站| 久久不射影院 | 中文字幕丝袜一区二区 | 久久午夜影视 | 免费十分钟 | 成人一区二区三区在线 | 欧美一级特黄aaaaaa大片在线观看 | 中文字幕视频播放 | 五月天中文字幕mv在线 | 久久精品中文字幕一区二区三区 | 五月天天av | 97国产大学生情侣酒店的特点 | 国产精品欧美一区二区 | 天天夜夜亚洲 | 国产黄色一级大片 | 激情欧美丁香 | 久久国产经典 | 精品国产精品一区二区夜夜嗨 | 成年人在线免费视频观看 | 九九视频这里只有精品 | 久久久久女教师免费一区 | 激情丁香婷婷 | 国产麻豆视频网站 | 91精品久久久久久综合乱菊 | 制服丝袜天堂 | 粉嫩高清一区二区三区 | 亚洲一区二区观看 | 国产精品一区二区三区免费看 | 九九九热 | 国产精品免费大片视频 | 97在线精品国自产拍中文 | 国产精品久免费的黄网站 | 三级黄色免费片 | 黄色小说视频在线 | av免费电影网站 | 国产精品私人影院 | 亚洲日日日 | 国产片网站| 国模视频一区二区三区 | 国产精品九九九九九 | 国产精品免费麻豆入口 | 97超碰成人在线 | 欧美日韩国产一二三区 | 国产手机av在线 | 亚洲色图27p| 激情丁香久久 | 91在线视频免费91 | 亚洲午夜在线视频 | 色综合 久久精品 | 99久久精品国产一区二区成人 | 亚洲精品一区二区网址 | 黄色成人av在线 | 国产视频97 | 在线精品视频免费观看 | 96香蕉视频 | 久久国产精品久久精品国产演员表 | 91精品久久久久久久久久入口 | 中文字幕av在线不卡 | www.色五月| 免费看国产精品 | 国产精品久久久久一区二区三区 | 欧美最新大片在线看 | 亚洲资源网| 日韩视频免费观看高清完整版在线 | 日韩av一区二区三区在线观看 | 日韩午夜高清 | 久草在线视频精品 | 黄色最新网址 | 国产精品久久久久久麻豆一区 | 国产91精品看黄网站在线观看动漫 | 丝袜美腿一区 | 99精品热视频 | 午夜精品久久久久久久99无限制 | 久草热久草视频 | 高清av免费观看 | 久久夜色精品国产欧美一区麻豆 | 国产美女搞久久 | 久久人人爽人人爽人人片av免费 | 激情伊人五月天 | 色插综合| 日本巨乳在线 | 五月婷婷av| 午夜国产影院 | 夜夜骑天天操 | 五月天六月婷婷 | 久九视频 | 中文字幕在线看人 | 成年人国产在线观看 | 激情视频在线高清看 | 亚洲人成精品久久久久 | 久久天天综合网 | 成人av免费网站 | 久久久www成人免费精品张筱雨 | 中文在线免费看视频 | 免费合欢视频成人app | 深夜福利视频在线观看 | 国产午夜精品一区二区三区在线观看 | 偷拍精品一区二区三区 | 亚洲精品理论 | 玖玖视频| 久久婷婷一区 | 国产系列在线观看 | 91超国产 | 黄色影院在线免费观看 | 手机av在线网站 | 成片视频在线观看 | 亚洲老妇xxxxxx | 亚洲精品视频国产 | 久草在线91 | 亚洲永久av | 日韩系列在线观看 | 成人免费av电影 | 91.精品高清在线观看 | 国产色网站 | 在线观看黄色小视频 | 在线观看911视频 | 国产精品午夜在线 | 欧美精品久久久久久久久久丰满 | 99999精品| 亚洲色综合| 日韩av快播电影网 | 最近中文字幕mv免费高清在线 | 91污在线观看 | 国产男女免费完整视频 | 亚洲精品mv在线观看 | 久久九九网站 | 国产日韩精品一区二区三区 | 日韩大片在线免费观看 | 99视频精品免费观看, | 水蜜桃亚洲一二三四在线 | 精品超碰 | 天天艹天天爽 | 去看片| 中文av字幕在线观看 | 久久综合狠狠综合久久激情 | 亚洲不卡av一区二区三区 | 最新av观看 | 国产精品观看 | 伊人狠狠干 | 色噜噜日韩精品一区二区三区视频 | 激情视频国产 | 在线观看黄av | 99精品偷拍视频一区二区三区 | 亚洲九九九 | av网站免费在线 | 国产拍揄自揄精品视频麻豆 | 免费在线观看视频a | 国产拍在线 | 久久麻豆精品 | 91女神的呻吟细腰翘臀美女 | 久久午夜色播影院免费高清 | 狠狠狠狠狠操 | 国产小视频在线免费观看 | 日韩精品视频免费专区在线播放 | 激情av一区二区 | 国产手机精品视频 | 亚洲日本一区二区在线 | 久久国产精品99久久人人澡 | 欧美巨大 | 天天爽天天碰狠狠添 | 久久久91精品国产一区二区精品 | 天天射天天爽 | 少妇18xxxx性xxxx片 | 欧美午夜久久 | 成人黄视频 | 亚洲码国产日韩欧美高潮在线播放 | 国产精品99久久免费观看 | 91av视频在线观看 | 香蕉日日 | 99r国产精品| 91香蕉视频在线下载 | 在线观看中文字幕dvd播放 | 色婷婷视频在线 | 97天堂 | 人人揉人人揉人人揉人人揉97 | 日韩免费在线视频观看 | 在线观看视频你懂的 | 免费在线观看污 | 免费在线观看的av网站 | 国产精品一区二区免费在线观看 | 久久9999久久免费精品国产 | 欧美性春潮 | www激情com| 日本aaa在线观看 | 日韩在线理论 | 成人99免费视频 | 7777xxxx | av一区二区三区在线 | 91网页版免费观看 | 国产美女精品久久久 | 国产精品视频免费在线观看 | 色综合久久88色综合天天人守婷 | 精品国产乱码一区二区三区在线 | 成人午夜影视 | 日日夜夜网站 | 成年人黄色av | av免费在线观 | 日本高清免费中文字幕 | 亚洲成人免费在线观看 | 超碰免费97 | 91看毛片 | 97精品国产手机 | 日韩免费观看av | 亚洲精品视频中文字幕 | 日韩国产欧美在线视频 | 天天操天天操天天爽 | 欧美精品一区二区在线播放 | 中国一级片视频 | 成人国产精品入口 | 久久精美视频 | 国产中文字幕大全 | 日本丶国产丶欧美色综合 | 91在线产啪 | 麻豆视频在线观看 | 91在线国内视频 | 草草草影院| 91精品国产高清自在线观看 | 色天天综合久久久久综合片 | 视频直播国产精品 | 精品一区二区免费在线观看 | 欧美成人xxx | 欧美日韩国产一区二区在线观看 | 日本黄色a级大片 | 亚洲国产中文字幕 | 亚洲成a人片77777潘金莲 | 99高清视频有精品视频 | 日韩视频一区二区三区 | 久久精品人人做人人综合老师 | 超碰国产人人 | 最近2019年日本中文免费字幕 | 黄网站色欧美视频 | 福利网在线 | 中文字幕二区在线观看 | www国产一区 | 欧美日韩一区二区久久 | 亚洲精品小区久久久久久 | 国产九九九九九 | 亚洲激情婷婷 | 日本久久视频 | h动漫中文字幕 | 射九九 | 国产区精品区 | 在线成人中文字幕 | 亚洲毛片一区二区三区 | 在线av资源| 视频在线观看一区 | 人人插人人草 | 成人黄色电影免费观看 | 亚洲在线视频观看 | 99视频一区 | 五月婷在线视频 | 亚洲天天做 | 黄色影院在线免费观看 | 一区二区中文字幕在线播放 | 乱男乱女www7788| 成人影片在线免费观看 | 天天操网址 | 免费又黄又爽视频 | 成人精品视频 | 日本不卡一区二区三区在线观看 | 欧美精品乱码久久久久 | 午夜丁香视频在线观看 | 国产精品麻豆欧美日韩ww | 国产精品免费人成网站 | 91人人射| 欧美一区二区在线免费看 | 在线观看av免费 | 亚洲精品乱码久久久久久9色 | 91网免费看 | 成人午夜免费剧场 | 精品99久久 | 国产精品第54页 | 手机av看片 | 在线91播放 | 久久人人射 | 国产资源av | 97成人在线观看视频 | 欧美日韩国产一二三区 | 国产精品美女久久久久久免费 | 午夜精品影院 | 在线观看色视频 | 国产精品21区 | 韩国一区视频 | 国产精品va在线观看入 | 久久综合给合久久狠狠色 | 久久激五月天综合精品 | 九色视频网 | 六月色婷| 九草视频在线观看 | 欧美二区三区91 | 天天操天天舔天天干 | 国产成视频在线观看 | 一区二区三区免费在线观看视频 | 国产精品1024| 日本女人的性生活视频 | 在线国产精品视频 | 色美女在线 | 亚洲综合干 | 精品99在线视频 | 91免费高清 | 久久精品爱爱视频 | 亚洲最新av网址 | wwwwww色| 日韩特黄一级欧美毛片特黄 | 一区二区不卡视频在线观看 | 欧美日韩伦理一区 | 精品少妇一区二区三区在线 | 日韩精品专区在线影院重磅 | 天天操天天干天天插 | 亚洲国产999| 丁香婷婷激情网 | 精品专区 | 久久短视频| 亚洲成人精品在线 | 日本精品久久久一区二区三区 | 免费在线观看亚洲视频 | 精品在线播放视频 | 久久99国产精品自在自在app | 91大神一区二区三区 | 免费国产在线观看 | 热久久免费视频精品 | 欧美日韩国产精品久久 | 最新国产福利 | 欧美91在线| 在线免费91 | 欧美一区二区日韩一区二区 | 久久成人国产精品一区二区 | 色吧av色av | 欧美日韩精品久久久 | 日韩美女一级片 | 又黄又爽又刺激的视频 | 91在线视频观看 | 国产99久久久精品 | 国产精品白丝av | 色视频在线观看免费 | 久久国产精品99久久久久久老狼 | 日韩av不卡在线观看 | 91大神精品视频在线观看 | 一级片免费视频 | 久久天堂网站 | 丁香高清视频在线看看 | 天天插综合网 | 一区二区三区在线观看免费 | 麻豆视频在线播放 | av中文国产| 午夜色性片| 国产一区在线看 | www.日本色| 国产精品久久久久久久久久久久午 | 色婷婷国产在线 | 精品国产亚洲一区二区麻豆 | 亚洲永久精品在线观看 | 精品一区二区三区久久 | 四虎影视成人 | 69热国产视频 | 欧美a√在线| 中文字幕在线一区二区三区 | 欧美一级免费黄色片 | 一区二区三区污 | 久久久久久久久免费 | 日韩理论片在线 | 国产一区自拍视频 | 欧美一区二区在线 | 精品视频在线看 | 久久综合爱| 欧美一级电影片 | 国产高清区 | 91中文字幕网 | 黄色一级大片免费看 | 99热高清 | 成人手机在线视频 | 西西44人体做爰大胆视频 | 成人午夜影院在线观看 | 久久99国产一区二区三区 | 视频在线播放国产 | 99精品在线直播 | 97超碰人人澡| 超碰激情在线 | 伊人伊成久久人综合网站 | 成人网在线免费视频 | 91大神在线看| 欧美日韩精品综合 | 国产日韩在线播放 | 色视频在线 | 深爱开心激情网 | 亚色视频在线观看 | 国产黄色免费看 | 在线播放视频一区 |