国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

ES6

FuisonDesign / 1877人閱讀

摘要:函數(shù)的參數(shù)只是表示對(duì)當(dāng)前值的描述,因此相同參數(shù)的函數(shù)的返回值是不相等的。方法返回的是一個(gè)數(shù)組成員是當(dāng)前對(duì)象中所有用作屬性名的值。

Symbol 概述

ES6引進(jìn)了一種新的原始數(shù)據(jù)類型Symbol表示獨(dú)一無二的值。它是JavaScript語言的第七種類型。
Symbol值是通過Symbol函數(shù)生成。這就是說,對(duì)象的屬性名吸納在可以有兩種類型,一種是原來的字符串,另一種就是新增的Symbol類型。凡是屬性名屬于Symbol類型,就都是獨(dú)一無二的,可以保證不會(huì)與其他屬性名沖突。

let s = Symbol();
alert(typeof s)  //Symbol

注意:

1.symbol函數(shù)不能使用new命令,否則會(huì)報(bào)錯(cuò)
2.Symnol是一個(gè)原始類型的值,不是對(duì)象(不能添加屬性)
3.它是一種類似于字符串的數(shù)據(jù)類型

Symbol函數(shù)可以接收一個(gè)字符串作為參數(shù),表示對(duì)Symbol實(shí)例的描述,主要是為了在控制臺(tái)顯示,或者轉(zhuǎn)為字符串時(shí)比較容易區(qū)分。
Symbol函數(shù)的參數(shù)只是表示對(duì)當(dāng)前Symbol值的描述,因此相同參數(shù)的Symbol函數(shù)的返回值是不相等的。

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

//有參數(shù)的情況
let s1 = Symbol("foo")
let s1 = Symbol("bar")
s1 === s2 // false 
  
//如果參數(shù)是一個(gè)對(duì)象,就會(huì)調(diào)用改對(duì)象的toString方法,將其轉(zhuǎn)為字符串,然后才生成一個(gè)Symbol值
const obj = {
    toString() {
        return "abc";
    }
};
const sym = Symbol(obj);
sym // Symbol(abc)
作為屬性名的Symbol
let mySymbol = Symbol();

// 第一種寫法
let a = {};
a[mySymbol] = "Hello!";

// 第二種寫法
let a = {
  [mySymbol]: "Hello!"
};

// 第三種寫法
let a = {};
Object.defineProperty(a, mySymbol, { value: "Hello!" });

// 以上寫法都得到同樣結(jié)果
a[mySymbol] // "Hello!"
a.mySymbol  // undefined  //作為對(duì)象屬性名時(shí),不能用點(diǎn)運(yùn)算符。

a.mySymbol = "Hello!";
a[mySymbol] // undefined
a["mySymbol"] // "Hello!"
//因?yàn)辄c(diǎn)運(yùn)算符后面是字符串,所以不會(huì)讀取mySymbol作為標(biāo)識(shí)名所指代的那個(gè)值,導(dǎo)致a的屬性名實(shí)際上是一個(gè)字符串,而不是一個(gè) Symbol 值。
屬性名的遍歷

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

Object.getOwnPropertySymbol方法返回的是一個(gè)數(shù)組,成員是當(dāng)前對(duì)象中所有用作屬性名的Symbol值。

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)]

另一個(gè)新的 API,Reflect.ownKeys方法可以返回所有類型的鍵名,包括常規(guī)鍵名和 Symbol 鍵名。

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

Reflect.ownKeys(obj)
//  ["enum", "nonEnum", Symbol(my_key)]

由于以Symbol值作為名稱的屬性,不會(huì)被常規(guī)方法遍歷得到。我們可以利用這個(gè)特性,為對(duì)象定義一些非私有的,但又希望只用于內(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)]
//對(duì)象x的size屬性是一個(gè)Symbol值,所有Object.key(x)、object.getOwnPropertyName(x)
symbol.for(),symbol.keyFor()

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

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

Symbol.for()與Symbol()這兩種寫法,都會(huì)生成新的Symbol,它們的區(qū)別是,前者會(huì)被登記在全局環(huán)境中供搜索,后者不會(huì)。Symbol.for()不會(huì)每次調(diào)用就返回一個(gè)新的Symbol類型的值,而是會(huì)先檢查給定的key是否已經(jīng)存在,如果不存在才會(huì)新建一個(gè)值。

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

Symbol("bar") === Symbol("bar")
// false

Symbol.keyFor方法返回一個(gè)已登記的symbol類型的key

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

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


文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/103785.html

相關(guān)文章

  • 使用ES6新特性開發(fā)微信小程序

    摘要:使用新特性開發(fā)微信小程序國(guó)際化與本地化新特性國(guó)際化與本地化新增了很多對(duì)于國(guó)際化的支持,比如時(shí)間格式,貨幣格式,數(shù)字格式等。 ECMAScript 6(簡(jiǎn)稱ES6)是JavaScript語言的最新標(biāo)準(zhǔn)。因?yàn)楫?dāng)前版本的ES6是在2015年發(fā)布的,所以又稱ECMAScript 2015。 微信小程序支持絕大部分ES6的新增特性。 使用ES6新特性開發(fā)微信小程序(1) ES6新特性:Cons...

    Backache 評(píng)論0 收藏0
  • ES6-前世今生(0)

    摘要:更新了個(gè)版本,最新正式版是語言的下一代標(biāo)準(zhǔn),早已在年月正式發(fā)布。基本不支持移動(dòng)端瀏覽器對(duì)的支持情況版起便可以支持的新特性。比較通用的工具方案有,,,等。 1、ECMAScript是什么? 和 JavaScript 有著怎樣的關(guān)系? 1996 年 11 月,Netscape 創(chuàng)造了javascript并將其提交給了標(biāo)準(zhǔn)化組織 ECMA,次年,ECMA 發(fā)布 262 號(hào)標(biāo)準(zhǔn)文件(ECMA-...

    LeviDing 評(píng)論0 收藏0
  • 給React初學(xué)者的10分鐘ES6教程

    摘要:但是在中,可以通過關(guān)鍵字來實(shí)現(xiàn)類的繼承的使用可以使得繼承意義更加明確并且值得一提的是,如果你使用來定義的組件,那么可以在類的構(gòu)造器里面,用簡(jiǎn)單的的聲明方式來替代方法。 原文:The 10 min ES6 course for the beginner React Developer譯者:Jim Xiao 著名的80/20定律可以用來解釋React和ES6的關(guān)系。因?yàn)镋S6增加了超過75...

    Awbeci 評(píng)論0 收藏0
  • 10個(gè)最佳ES6特性

    摘要:,正式名稱是,但是這個(gè)名稱更加簡(jiǎn)潔。已經(jīng)不再是最新的標(biāo)準(zhǔn),但是它已經(jīng)廣泛用于編程實(shí)踐中。而制定了模塊功能。自從年雙十一正式上線,累計(jì)處理了億錯(cuò)誤事件,得到了金山軟件等眾多知名用戶的認(rèn)可。 譯者按: 人生苦短,我用ES6。 原文: Top 10 ES6 Features Every Busy JavaScript Developer Must Know 譯者: Fundebug 為了保...

    codeKK 評(píng)論0 收藏0
  • 為什么都說js 里面任何對(duì)象最終都繼承了Object對(duì)象

    摘要:今天閑來無事,看見幾行小字。又說所有對(duì)象,繼承終是。強(qiáng)行押韻一波這首詩(shī)的意思就是說的我今天沒有什么事情,然后無意中又在網(wǎng)上看到了任何對(duì)象都是從對(duì)象繼承而來的這句話。一時(shí)興起,便去驗(yàn)證這句話。 今天閑來無事,看見幾行小字。又說所有對(duì)象,繼承終是Obj。—— 強(qiáng)行押韻一波 這首詩(shī)的意思就是說的我今天沒有什么事情,然后無意中又在網(wǎng)上看到了任何對(duì)象都是從Object對(duì)象繼承而來的這句話。一時(shí)興...

    Gemini 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<