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

資訊專(zhuān)欄INFORMATION COLUMN

Symbol能干什么!為什么要掌握它?

genedna / 544人閱讀

摘要:說(shuō)到就先來(lái)說(shuō)下中的基礎(chǔ)數(shù)據(jù)類(lèi)型,就是中的第六種基礎(chǔ)數(shù)據(jù)類(lèi)型用一句話(huà)來(lái)描述那就是獨(dú)一無(wú)二的使用基本使用中的標(biāo)識(shí)一般放聲明的變量不相等作為語(yǔ)法可以將的值作為屬性循環(huán)無(wú)法遍歷屬性方法可以拿到所有的屬性我們上面說(shuō)是獨(dú)一無(wú)二的但是有的時(shí)候我希望可以復(fù)

說(shuō)到Symbol就先來(lái)說(shuō)下 js中的基礎(chǔ)數(shù)據(jù)類(lèi)型 string、number、boolean、null、undefined,Symbol就是js中的第六種基礎(chǔ)數(shù)據(jù)類(lèi)型

用一句話(huà)來(lái)描述Symbol,那就是獨(dú)一無(wú)二! Symbol的使用

基本使用

const s1 = Symbol("song");
const s2 = Symbol("song");
// Symbol中的標(biāo)識(shí)一般放number、string
console.log(s1 === s2); // Symbol聲明的變量不相等
Symbol作為key
    const s1 = Symbol("song");
    let obj = {
        [s1]:"song", // es6語(yǔ)法[] 可以將symbol的值作為屬性
        age:18
    }
    for(let key in obj){ // for循環(huán)無(wú)法遍歷symbol屬性
        console.log(obj[key])
    }
    // Reflect.ownKeys方法可以拿到所有的key屬性
    Reflect.ownKeys(obj).forEach(key=>{
        console.log(obj[key]);
    })
Symbol.for

我們上面說(shuō)symbol是獨(dú)一無(wú)二的,但是有的時(shí)候我希望可以復(fù)用聲明過(guò)的symbol,可以使用for語(yǔ)法,如果symbol不存在則聲明,如果存在則將創(chuàng)建過(guò)的symbol返回回來(lái)!

const s1 = Symbol.for("song");
const s2 = Symbol.for("song");

console.log(s1 === s2);
console.log(Symbol.keyFor(s2)); // 可以通過(guò)keyFor 獲取symbok的key
Symbol元編程

元編程:可以去對(duì)原生js的操作進(jìn)行修改,說(shuō)白了就是可以更改原生js的行為

ES6提供了11個(gè)內(nèi)置的Symbol值

1.Symbol.hasInstance

重寫(xiě)instanceof默認(rèn)行為

const instance = {
    [Symbol.hasInstance](value){
        return "a" in value
    }
}
// 當(dāng)調(diào)用 instanceof 方法,會(huì)默認(rèn)調(diào)用instance上的hasInstance方法
console.log({a:1} instanceof instance)
2.Symbol.isConcatSpreadable

重寫(xiě)數(shù)組的展開(kāi)行為

const arr = [1,2,3];
arr[Symbol.isConcatSpreadable] = false;
console.log(arr.concat([1,2,3]));
3.Symbol.match / split / search / replace

重寫(xiě)字符串的match,split,search方法

const obj = {
    [Symbol.match](value){
        return value.length === 3
    }
}
console.log("abc".match(obj));
4.Symbol.species

創(chuàng)建衍生對(duì)象時(shí),指定構(gòu)造函數(shù)

class MyArray extends Array{
    constructor(...args){
        super(...args);
    }
    static get [Symbol.species](){
        return Array; // 創(chuàng)建衍生對(duì)象會(huì)用Array作為構(gòu)造函數(shù)
    }
}
const arr = new MyArray(1,2,3);
const newArr = arr.map(item=>item*2);
console.log(newArr instanceof MyArray); // 默認(rèn)衍生對(duì)象也是MyArray的實(shí)例
5.Symbol.toPrimitive

重寫(xiě)數(shù)據(jù)類(lèi)型轉(zhuǎn)化

const obj = {
    [Symbol.toPrimitive](type){ // type number string default
        return 123;
    }
}
console.log(obj*123);
6.Symbol.toStringTag

重寫(xiě)toString方法

const obj = {
  [Symbol.toStringTag]: "xxx"
};
console.log(Object.prototype.toString.call(obj)); // [object xxx]
7.Symbol.unscopables

重寫(xiě)哪些屬性被with所排除

console.log(Array.prototype[Symbol.unscopables]); // 哪些方法不能再with中使用
with(Array.prototype){ // 直接調(diào)用數(shù)組原型上的方法
    forEach.call([1,2,3],element => {
        console.log(element)
    });
}

class MyClass {
  eat() {}
  get [Symbol.unscopables]() {
    return { eat: true }; // 不能在with下使用
  }
}
with (MyClass.prototype) {
  console.log(eat);
}

還差最后一個(gè)Symbol.iterator,留個(gè)小尾巴,大家自己踩一踩看看這個(gè)有什么用!!這個(gè)面試經(jīng)常會(huì)被問(wèn)哦~

到此我們將Symbol的用法整個(gè)過(guò)了一遍,當(dāng)然一般元編程在開(kāi)發(fā)的時(shí)候還是很少用到呢!不過(guò)我們已經(jīng)具備改寫(xiě)js語(yǔ)言本身的能力啦!

`歡迎持續(xù)關(guān)注公眾號(hào):「前端優(yōu)選」
技術(shù)持續(xù)更新,請(qǐng)持續(xù)關(guān)注......`

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

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

相關(guān)文章

  • 云服務(wù)器能干什么

    摘要:在阿里云服務(wù)器安裝好操作系統(tǒng)之后,安裝好軟件。所以,如果你家路由器自帶接口,且提供動(dòng)態(tài)域名解析服務(wù),可以將自家路由器打造成私有的網(wǎng)盤(pán)。于是很多公司想辦法搭建公司服務(wù)器,存放在公司內(nèi)部服務(wù)器是啥?就是一個(gè)24小時(shí)不斷電的電腦,有l(wèi)inux系統(tǒng),windows2003-2013,你可以用他來(lái)掛qq,掛軟件,掛一切你想掛的,除了游戲,因?yàn)樗旧硎怯脕?lái)為大家提供遠(yuǎn)程信息處理服務(wù)的,那么話(huà)又說(shuō)回來(lái)了,...

    young.li 評(píng)論0 收藏0
  • 【JS進(jìn)階】你真的掌握變量和類(lèi)型了嗎

    摘要:本文從底層原理到實(shí)際應(yīng)用詳細(xì)介紹了中的變量和類(lèi)型相關(guān)知識(shí)。內(nèi)存空間又被分為兩種,棧內(nèi)存與堆內(nèi)存。一個(gè)值能作為對(duì)象屬性的標(biāo)識(shí)符這是該數(shù)據(jù)類(lèi)型僅有的目的。 導(dǎo)讀 變量和類(lèi)型是學(xué)習(xí)JavaScript最先接觸到的東西,但是往往看起來(lái)最簡(jiǎn)單的東西往往還隱藏著很多你不了解、或者容易犯錯(cuò)的知識(shí),比如下面幾個(gè)問(wèn)題: JavaScript中的變量在內(nèi)存中的具體存儲(chǔ)形式是什么? 0.1+0.2為什...

    fuyi501 評(píng)論0 收藏0
  • 快速掌握JavaScript面試基礎(chǔ)知識(shí)(一)

    摘要:根據(jù)調(diào)查,自年一來(lái),是最流行的編程語(yǔ)言。在一個(gè)函數(shù)體中聲明的變量和函數(shù),周?chē)淖饔糜騼?nèi)無(wú)法訪(fǎng)問(wèn)。也就是說(shuō)被大括號(hào)包圍起來(lái)的區(qū)域聲明的變量外部將不可訪(fǎng)問(wèn)。一個(gè)常見(jiàn)的誤解是使用聲明的變量,其值不可更改。 譯者按: 總結(jié)了大量JavaScript基本知識(shí)點(diǎn),很有用! 原文: The Definitive JavaScript Handbook for your next developer ...

    acrazing 評(píng)論0 收藏0
  • ES6 的 for..of 和 Generator,從偽數(shù)組 jQuery 對(duì)象說(shuō)起

    摘要:引用自可迭代對(duì)象和迭代器不以規(guī)矩,不成方圓為了使某個(gè)對(duì)象成為可迭代對(duì)象象,它必須實(shí)現(xiàn)方法,也就是說(shuō),它得有一個(gè)是的屬性。的遍歷,絕對(duì)應(yīng)該用。 pseudo 英 [sju:d??] 美 [su:do?]adj.假的,虛偽的n.[口]假冒的人,偽君子 pseudo-array 英 [sju:d???re?] 美 [sju:d???re?][計(jì)] 偽數(shù)組 jQuery 對(duì)象是偽數(shù)組 兩個(gè)...

    Harriet666 評(píng)論0 收藏0
  • 手寫(xiě)call、apply、bind及相關(guān)面試題解析

    摘要:我是前端我的全名是我是一個(gè)前端指向接收多個(gè)參數(shù),第一個(gè)是返回值返回值是一個(gè)函數(shù)上下文的,不會(huì)立即執(zhí)行。柯里化相關(guān)講解請(qǐng)移步簡(jiǎn)版的實(shí)現(xiàn)就算完成了歡迎吐槽點(diǎn)贊 它們有什么不同?怎么用? call 接收多個(gè)參數(shù),第一個(gè)為函數(shù)上下文也就是this,后邊參數(shù)為函數(shù)本身的參數(shù)。 let obj = { name: 一個(gè) } ...

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

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

0條評(píng)論

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