es6 --- 內置的Symbol值

Symbol.hasInstance

// Symbol.hasInstance
class MyClass {[Symbol.hasInstance] (foo) {return foo instanceof Array;}
}
[1, 2, 3] instanceof new MyClass() // true// symbol.hasInstance:會在[1, 2, 3]  instanceof 時 自動調用 [Symbol.hasInstance] (foo) 方法...
// 等價于. ([1,2,3]) => { return [1,2,3] instanceof Array}

Symbol.isConcatSpreadable

class A1 extends Array {construcor(args) {super(args);this[Symbol.isConcatSpreadable] = true;}
}
class A2 extends Array {constructor(args) {super(args);this[Symbol.isConcatSpreadable] = 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]]
// Symbol.isConcatSpreadable:表示對象使用Array.prototype.concat()時,是否可以展開

Symbol.species

// Symbol.species
// 使用格式
class MyArray extends Array {// 覆蓋父類 Array 的構造函數static get [Symbol.species] () { return Array; }
}// 實例.
class MyArray extends Array {static get [Symbol.species] () { return Array; }
}
var a = new MyArray(1,2,3);
var mapped = a.map (x => x * x);mapped instanceof MyArray // false
mapped instanceof Array // true// 注:在static get[Symbol.species] () 中 將構造函數改為了 返回Array類,, 故使用instance MyArray 返回 false.

Symbol.match

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

Symbol.replace

// Symbol.replace
const x= {};
x[Symbol.replace] = (...s) => console.log(s);
'Hello'.replace(x, 'World') 
// 注:在執行'Hello'.replace操作時,實際上執行:(['Hello','World']) => console.log ('["Hello","World"]');
// Symbol.replace會在執行String.prototype.replace方法時調用函數.

在這里插入圖片描述
Symbol.search

// Symbol.search
class MySearch {constructor (value) {this.value = value;}[Symbol.search] (string) {return string.indexOf(this.value);}
}
'foobar'.search(new MySearch('foo')) // 0
// 注: [Symbol.search] (string),在執行String.prototype.search方法時調用.
// 本例相當于執行: ('foobar') { return 'foobar'.indexOf('foo')}
}

Symbol.split

// Symbol.split
class MySplitter {constructor (value) {this.value = value;}[Symbol.split] (string) {var 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]](string) 在執行String.prototypr.string方法時觸發
// 本例改寫了split方法,將string分為2部分,一部分(未匹配的)不變,另一部分(匹配到的)置為空, 若string中無匹配值,則完整返回...

Symbol.iterator

// 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
// 注:在執行for ... of 循環時 觸發Symbol.iterator方法
// yield 在for循環時會保存當前的元素...

Symbol.toPrimitive

// Symbol.toPrimitive
let obj = {[Symbol.toPrimitive] (hint) {swtich (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'
// 注:在對象被轉為原始類型的值時,會調用這個方法

Symbol.toStringTag

// Symbol.toStringTag
class Collection {get [Symbol.toStringTag] () {return 'xxx',}
}
var x = new Collection();
Object.prototype.toString.call(x);     // "[object xxx]"
// 注:當執行Object.prototype.toString方法時,觸發Symbol.toStringTag

Symbol.unscopables

// Symbol.unscopables
// 無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
}
// 注:unscopables屬性指定了使用with關鍵字時哪些屬性會被with環境排除.
// 在本例中指定了foo屬性被排除....

參考《ES6標準入門》 P194~P203

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/251428.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/251428.shtml
英文地址,請注明出處:http://en.pswp.cn/news/251428.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

對象的克隆

對象的克隆 1、克隆即復制的意思,對象的克隆,意味著生成一個對象,這個對象和某個對象的屬性和行為是一致的,但是這個對象和源對象是兩個不同的對象。實現對象的克隆,方法是實現Cloneable接口,否則會報異常C…

15 調試

1. pdb pdb是基于命令行的調試工具,非常類似gnu的gdb(調試c/c)。 def getAverage(a,b):result abprint("result is %s"%result)return resulta 10 b 20 c ab ret getAverage(a,b) print(ret) 2.執行時調試 程序啟動&#xff0…

html5播放視頻只有聲音不出現畫面?

一開始網上大神們都是要把MP4的編碼格式轉換成AVC(H264),然后趕緊用格式工廠把它給換了,結果!! 沒用!!還是黑屏???咋回事啊,然后自己又…

vue項目代碼改進(一)login組件

Login登錄組件 1. 新增登錄頭像(css樣式回顧) 1)div.avatar 2)子絕父相定位,left…top… 3)border 4)placeholder 5)box-shadow box-shadow: offset-x offset-y blur spread color …

es6 --- set實現并集(Union)、交集(Intersect)和差集(Difference)

Set:類似于數組,但是成員的值都是唯一的 let a new Set([1, 2, 3]); let b new Set([4, 3, 2]);// 并集 let union new Set([...a, ...b]);// 交集 let intersect new Set([...a].filter(x > b.has(x)));// 差級 let difference new Set( [...a].filter(x > !b.has…

解析DBF文件

上周,公司給了許多DBF后綴的數據文件讓我進行解析。 因為是DBF文件我發現mysql,和Oracle都能直接對DBF文件進行導入。在導入過程中發現這些數據庫并不能識別這些文件。 通過百度找到了打開這種文件的軟件Visual FoxPro、Access,用它們打開后出…

Scrum 沖刺 第一日

Scrum 沖刺 第一日 站立式會議燃盡圖Alpha 階段認領任務明日任務安排項目預期任務量成員貢獻值計算規則今日貢獻量參考資料站立式會議 返回目錄 燃盡圖 返回目錄 Alpha 階段認領任務 學號組員分工用時20162309邢天岳補充說明書&部分測試18h20162311張之睿編寫代碼20h201623…

淺析 NodeJs 的幾種文件路徑

Node 中的文件路徑大概有 __dirname, __filename, process.cwd(), ./ 或者 ../,前三個都是絕對路徑,為了便于比較,./ 和 ../ 我們通過 path.resolve(./)來轉換為絕對路徑。 先看一個簡單的栗子: 假如我們有這樣的文件結構&#xf…

Vue項目代碼改進(二)—— element-UI的消息顯示時間修改

Message 消息提示 Options duration 顯示時間, 毫秒。設為 0 則不會自動關閉 — 默認值3000 全局重寫 element 的message 消息提示,修改時間,在main.js里 Vue.prototype.$message function (msg) {ElementUI.Message(msg) } Vue.prototype.$message.success func…

es6 --- 使用node的memoryUsage檢測WeakMap()

打開node命令行 $ node --expose-gc// --expose-gc:表示允許手動執行垃圾回收機制// 手動執行一次垃圾回收,保證獲取的內存使用狀態準確 > global.gc();// 查看內存占用的初始狀態, > process.memoryUsage();可以發現初始用了4.7MB左右 // 創建一個WeakMap()實例wm >…

遍歷字典

Python支持對字典的遍歷,有多種遍歷字典的方式:所有的鍵值對,鍵或者值。 遍歷所有的鍵值對: people {name:winter, age:25, sex:man, }for key,value in people.items():print("\nkey:"key)print("value…

Flexbox 布局

Flexbox 是 flexible box 的簡稱(愚人碼頭注:意思是“靈活的盒子容器”),是 CSS3 引入的新的布局模式。它決定了元素如何在頁面上排列,使它們能在不同的屏幕尺寸和設備下可預測地展現出來。 它之所以被稱為 Flexbox &a…

利用jQuery和bootstrap更改radio樣式

<div class"container body-content"><div class"row"><div class"text-center col-xs-12"><h3>標題</h3><div class"well well-sm"><div class"btn-group" data-toggle"butto…

將markdown編譯為HTML和PDF

使用gulp搭建markdown編譯環境 1. 執行npm init 進行項目初始化得到package.json 2. 全局安裝gulp &#xff1a;npm install gulp --global; 3. 在項目中安裝gulp依賴&#xff1a;npm install gulp --save-dev; 4. 創建gulpfile.js文件設置任務&#xff1a; var gulp require…

捕獲異常的兩種方式

捕獲異常的兩種方式方法一 #codingutf-8 import systry:with open("ddd.txt", "r") as f:data f.read()print data except:err sys.exc_info()print errsys.exc_info()返回三元組&#xff0c;分別是&#xff0c;異常類型、異常值、異常追溯地址方法二 #c…

Vue項目代碼改進(三)—— Cookie、LocalStorage和SessionStorage的使用

存在問題&#xff1a; 如果在退出頁面時&#xff0c;沒有點擊“退出”按鈕&#xff0c;而是直接關閉頁面&#xff0c;token并沒有被清除&#xff0c;依然能通過訪問http://localhost:8080/#/ 直接進入主頁。 原因&#xff1a; 使用了localStorage而非sessionStorage或Cookie 一…

es6 --- Proxy實例的get方法

寫一個攔截函數,訪問目標對象不存在屬性時,會拋出不存在該屬性的錯誤 如果存在該屬性時,就返回其值. var person {name: "張三" };var proxy new Proxy(person, {get: function(target, property) {if (property in target) {return target[property];} else {thr…

webstorm前端常用快捷鍵

Ctrl / 行注釋/取消行注釋 Ctrl Shift / 塊注釋/取消塊注釋 Ctrl W 選擇代碼塊&#xff0c;一般是增量選擇 Ctrl Shift W 上個快捷鍵的回退&#xff0c;減量選擇代碼 Alt Q 上下文信息 A…

sql常識

1.UNION與UNION ALL的區別UNION去重且排序UNION ALL不去重不排序2.sql語句or與union all的執行效率比較:union all>union> in >or 用一張表更新另一張表&#xff1a; UPDATE ASET A1 B1, A2 B2, A3 B3FROM A LEFT JOIN B ON A.ID B.IDMS SQL SERVER的寫法&#xf…

優秀導航網站收集

一納米學習網站導航 泡面吧導航 納威安全導航 設計師導航網址 優設圖書導航 極客導航 大前端網址導航 前端導航 轉載于:https://www.cnblogs.com/fazero/p/7976684.html