主頁 > 企業開發 > ES6擴展

ES6擴展

2020-10-05 20:39:40 企業開發

模板字串和標簽模板

const getCourseList = function() {
        // ajax
        return {
            status: true,
            msg: '獲取成功',
            data: [{
                id: 1,
                title: 'Vue 入門',
                date: 'xxxx-01-09'
            }, {
                id: 2,
                title: 'ES6 入門',
                date: 'xxxx-01-10'
            }, {
                id: 3,
                title: 'React入門',
                date: 'xxxx-01-11'
            }]
        }
    };

    const { data: listData, status, msg } = getCourseList();

    function foo(val) {
        return val.replace('xxxx', '2020');
    }

    if (status) {
        let arr = [];

        listData.forEach(function({ date, title }) {

            arr.push(
                `
                    <li>
                        <span>${ `課程名: ${ title }` }</span>
                        <span>${ foo(date) }</span>
                    </li>
                `
            );

        });

        let ul = document.createElement('ul');
        ul.innerHTML = arr.join('');

        document.body.appendChild(ul);

    } else {
        alert(msg);
    }

padStart padEnd

    {
        let str = 'i';
        // 插入在5的位置
        let str1 = str.padStart(5, 'mooc');
        console.log(str1);
        // 倒序插入在5的位置
        let str2 = str.padEnd(5, 'mooc');
        console.log(str2);
    }

repeat

    {
        function repeat(str, num) {
            return new Array(num + 1).join(str);
        }
        console.log(repeat('s', 3));
    }

startsWith endsWith

    {
        const str = 'A promise is a promsie';

        console.log(str.startsWith('B'));
        console.log(str.startsWith('A pro'));

        console.log(str.endsWith('promsie'));
        console.log(str.endsWith('A'));
    }

includes

    {
        const str = 'A promise is a promise';
        if (~str.indexOf('promise')) {
            console.log('存在"promise"');
        }

        if (str.includes('a promise')) {
            console.log('存在"a promise"');
        }
    }

字串轉陣列+遍歷

    let str = 'PROMISE';
    // 四種方法:轉成陣列后遍歷
    var oStr = Array.prototype.slice.call(str);
    var oStr = str.split('');
    const oStr = [...str];
    const [...oStr] = str;
    console.log(oStr);
    //單個字符輸出
    oStr.forEach(function(word) {
        console.log(word);
    });

對全是英文的字串中的大寫字符加密 A -> 100  B -> 99

    const map = {A: '100', B: '99', C: '98', D: '97', E: '96', F: '95', G: '94', H: '93', I: '92', J: '91', K: '90', L: '89', M: '88', N: '87', O: '86', P: '85', Q: '84', R: '83', S: '82', T: '81', U: '80', V: '79',W: '78',X: '77',Y: '76', Z: '75'};
    const words = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';

    oStr.forEach(function(word, index) {
        if (words.includes(word)) oStr[index] = map[word];
    });
    console.log(oStr.join(''));

使用for-of遍歷字串

    let str = 'PROMISE';
    let newStr = '';
    const map = {A: '100', B: '99', C: '98', D: '97', E: '96', F: '95', G: '94', H: '93', I: '92', J: '91', K: '90', L: '89', M: '88', N: '87', O: '86', P: '85', Q: '84', R: '83', S: '82', T: '81', U: '80', V: '79',W: '78',X: '77',Y: '76', Z: '75'};
    for (let word of str) {
        if (str.includes(word)) newStr += map[word];
    }
    console.log(newStr);

Unicode是一項標準,包括字符集、編碼方案等
解決傳統的字符編碼方案的局限
?? \u1f436 unicode碼(點) emoji

    console.log('\u1f436');
    console.log('\u{1f436}');

正則擴展

uy修飾符

u.  unicode

    console.log(/^\ud83d/.test('\ud83d\udc36')) //\ud83d\udc36識別為\ud83d和\udc36兩個字符
    console.log(/^\ud83d/u.test('\ud83d\udc36')) //\ud83d\udc36識別為一整個字符

y 粘連修飾符   sticky

    const r1 = /imooc/g;
    const r2 = /imooc/y;
    const str = 'imoocimooc-imooc';
    console.log(r1.exec(str));
    console.log(r1.exec(str));
    console.log(r1.exec(str));
    console.log(r1.exec(str));
    console.log('-----------------');
    console.log(r2.exec(str));
    console.log(r2.exec(str));//imooc后面必須緊跟imooc,不能有其他字符
    console.log(r2.exec(str));

數值擴展
新的進制表示法

    console.log(0o16);//十六進制
    console.log(0b1111);//二進制

新的方法與安全數
掛載在Number上:Number.parseInt Number.parseFloat

    console.log(window.parseInt('1.23'));
    console.log(parseFloat('1.23'));
    console.log(Number.parseInt(1.23));
    console.log(Number.parseFloat(1.23));

Number.isNaN

    console.log(Number.isNaN(NaN));
    function isNaN(value) {
        return value !== value;
    }

Number.isFinite
isFinite() 函式用于檢查其引數是否是無窮大,
如果 number 是 NaN(非數字),或者是正、負無窮大的數,則回傳 false

    console.log(Number.isFinite(Infinity));
    console.log(Number.isFinite(2 / 0));
    console.log(Number.isFinite(1234));
    console.log(Number.isFinite('1234'));
    console.log(Number.isFinite(true));
    console.log(Number.isFinite(NaN));

Number.MAX_SAFE_INTEGER Number.MIN_SAFE_INTEGER 安全數范圍
Number.isSafeInteger(); 是否在安全范圍內

    console.log(Number.MAX_SAFE_INTEGER);
    console.log(Number.MIN_SAFE_INTEGER);
    console.log(Number.isSafeInteger(Number.MAX_SAFE_INTEGER - 1));
    console.log(Number.isSafeInteger(Number.MAX_SAFE_INTEGER + 1));

冪運算 **

    let a = (2 ** 10) ** 0;
    console.log(a);
    let b = 2 ** 10 ** 0;//從后往前計算
    console.log(b);

函式擴展

函式引數的默認值

    function People({ name, age = 38 } = {name: 1}) {
        console.log(name, age);
    };
    People({ name: 3 });

結合擴展運算子(剩余引數...)

    function sum(...args) {
        console.log(args);
    }
    sum(1, 2, 321, 4354, 'fdafsd');
    function op(type, b, ...nums) {
        console.log(type);
        console.log(nums);
    }
    op('sum', 1, 23, 454, 3, 67, 234);

reduce() 方法接收一個函式作為累加器,陣列中的每個值(從左到右)開始縮減,最終計算為一個值

    function sum(...numbers) {
        return numbers.reduce(function(a, b) {
            return a + b;
        }, 0);
    }
    console.log(sum(1, 2, 3, 4));

箭頭函式

    const add1 = (a, b) => {
        a += 1;
        return a + b;
    };

    const add2 = function(a, b) {
        a += 1;
        return a + b;
    }
    console.log(add1(2, 2));
    console.log(add2(2, 2));

函式回傳值

    const pop = arr => arr.pop();//回傳去掉的數值
    console.log(pop([1, 2, 3]));//3
    const pop = arr => void arr.pop();//void沒有回傳值
    console.log(pop([1, 2, 3]));

箭頭函式中沒有arguments,需要用到擴展函式

    const log = () => {
        console.log(arguments);
    };
    log(1, 2, 3);//報錯
    const log = (...arguments) => {
        console.log(arguments);
    };
    log(1, 2, 3);


箭頭函式沒有this,this指向自身所處環境的this
此處指向window

    const xiaoming = {
        name: '小明',
        say1: function() {
            console.log(this);
        },
        say2: () => {
            console.log(this);
        }
    }
    xiaoming.say1();
    xiaoming.say2();
    const xiaoming = {
        name: 'xiaoming',
        age: null,
        getAge: function() {
            // ...ajax模擬1s之后得到服務器的回應獲取到資料
            // 箭頭函式沒有this,默認指向當前物件xiaoming
            setTimeout(() => {
                this.age = 14;
                console.log(this);
            }, 1000);

        }
    };
    xiaoming.getAge();

物件擴展
簡潔表示法

    const getUserInfo = (id = 1) => {
        const name = 'xiaoming';
        const age = 10;

        return {
            name,
            age,
            say() {
                console.log(this.name + this.age);
            }
        };
    };
    const xiaoming = getUserInfo();

屬性名運算式

    const key = 'age';
    const xiaoming1 = {
        name: 'xiaoming1',
        key: 14
    };
    const xiaoming2 = {
        name: 'xiaoming2',
        [`${key}123`]: 14
    };

復制物件 - 淺拷貝

    const obj1 = {
        a: 1,
        b: 2,
        d: {
            aa: 1,
            bb: 2
        }
    };
    const obj2 = {
        c: 3,
        a: 9
    };
    const cObj1 = { ...obj1 };
    cObj1.d.aa = 999;
    console.log(cObj1.d.aa);//999
    console.log(obj1.d.aa);//999

合并物件(淺拷貝)

    const newObj = {
        ...obj2,
        ...obj1
    };
    newObj.d.aa = 22;
    console.log(obj1);

部分新的方法和屬性Object.is
+0 -0

    console.log(Object.is(+0, -0));
    console.log(+0 === -0);
    console.log(Object.is(NaN, NaN));
    console.log(Object.is(true, false));
    console.log(Object.is(true, true));

Object.assign類似于物件合并

    const obj = Object.assign({a: 1}, {b: 2}, {c: 3}, {d: 4, e: 5});
    const obj = {
        a: 1,
        b: {
            c: 2
        }
    };
    let newObj = Object.assign({a: 3}, obj);//類似物件合并,a=1會替換掉a=3
    console.log(newObj.a);
    console.log(newObj.b.c);
    newObj.b.c = 100;
    console.log(obj.b.c);

Object.keys 所有鍵組成的數值
Object.values 所有值組成的陣列
Object.entries 所有鍵值對組成的陣列
for - of

    const obj = {
        a: 1,
        b: 2,
        c: 3,
        d: 4
    };
    console.log(Object.keys(obj));
    console.log(Object.values(obj));
    console.log(Object.entries(obj));

    for (let [k, v] of Object.entries(obj)) {
        console.log(k, v);
    }

__proto__
Rest 解構賦值不會拷貝繼承自原型物件的屬性

    let obj1={a:1};
    let obj2={b:2};
    obj2.__proto__=obj1;
    let obj3={...obj2};
    console.log(obj2); //{b:2}
    console.log(obj3); //{b:2}

Object.setPrototypeOf
修改物件的原型屬性,性能低下,不建議使用

    const obj1 = {a: 1};
    const obj2 = {b: 1}
    const obj = Object.create(obj1);
    console.log(obj.__proto__);
    Object.setPrototypeOf(obj, obj2);
    console.log(obj.__proto__);

Object.getPrototypeOf
獲取原型屬性

    const obj1 = {a: 1};
    const obj = Object.create(obj1);
    console.log(obj.__proto__);
    console.log(Object.getPrototypeOf(obj));
    console.log(obj.__proto__ === Object.getPrototypeOf(obj));

super訪問原型物件上的屬性和方法

  super中的this指向的是之類的this

  非靜態方法中,指向父類的原型物件

  在靜態方法中,指向父類

    const obj = {name: 'xiaoming'};
    const cObj = {
        say() {
            console.log(`My name is ${super.name}`);
        }
    }
    Object.setPrototypeOf(cObj, obj);
    cObj.say();


陣列擴展
結合擴展運算子使用

    const user = ['小明', 14, ['吃飯', '打游戲'], '我沒有女朋友'];
    function say(name, age, hobby, desc) {
        console.log(`我叫${ name }, 我今年${ age } 歲, 我喜歡${ hobby.join('和') }, ${ desc }`);
    }
    say(...user);

apply

    const user = ['小明', 14, ['吃飯', '打游戲'], '我沒有女朋友'];
    function say(name, age, hobby, desc) {
        console.log(`我叫${ name }, 我今年${ age } 歲, 我喜歡${ hobby.join('和') }, ${ desc }`);
    }
    say.apply(null, user);

Math.max()
Math.min()

    const arr = [1, 2, 233, 3, 4, 5];
    console.log(Math.max(...arr));//推薦的ES6新方法
    console.log(Math.max.apply(null, arr));//老方法

陣列操作

    const arr1 = [1, 2, 3, 4];
    const arr2 = [4, 2, 2, 1];
    const arr3 = [2.2, '123', false];

    const cArr1 = [1, 2, 3, ...arr3];//陣列添加資料
    const cArr2 = [...arr1];//拷貝陣列
    const [...cArr3] = arr3;//拷貝陣列
    const cArr4 = [...arr1, ...arr2, ...arr3];//合并陣列

生成器函式
定位點yield

    function *g() {
        console.log(1);
        yield 'hi~';
        console.log(2);
        yield 'imooc~';
    }
    const gg = g();
    gg.next();//1
    setTimeout(function() {
        gg.next();//2
    }, 1000);

Set中元素不能重復
可以將一些元素變為陣列

    let set = new Set([1, 2, 2, 3]);
    console.log([...set]);

Array.from物件轉陣列
該類陣列物件的屬性名必須為數值型或字串型的數字
該類陣列物件的屬性名可以加引號,也可以不加引號

    const obj = {
        0: 1,
        1: '22',
        2: false,
        length: 2 //只取前兩個資料
    };
    console.log(Array.from(obj));//1 22
    console.log(Array.from(obj, item => item * 2));//2 44

Array.of將引數合成陣列

    console.log(Array.of(1, 2, '123', false));

Array#fill填充陣列

    let arr = new Array(10).fill(0, 0, 3);//從0開始,到3結束,都用0填充
    console.log(arr);
    console.log([1, 2, 3].fill(0));

Array.includes判斷陣列中是否存在某個值

    var arr = [1, 2, 3, 4];
    console.log(arr.includes(1));
    console.log(arr.includes(55));

keys values entries

    const arr = [1, 2, 3, 444];
    console.log(arr.keys());
    for (let i of arr.keys()) {
        console.log(i);
    }

    for (let v of arr.values()) {
        console.log(v);
    }

    for (let [i, v] of arr.entries()) {
        console.log(i, v);
    }

find 根據條件(回呼) 按順序遍歷陣列 當回呼回傳true時 就回傳當前遍歷到的值

    const res = [1, 7, 6, 3].find((value, index, arr) => value % 2 === 0);
    console.log(res);

findIndex 根據條件(回呼) 按順序遍歷陣列 當回呼回傳true時 就回傳當前遍歷到的下標

    const res = [1, 7, 6, 3, NaN].findIndex((value, index, arr) => Number.isNaN(value));
    console.log(res);

轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/157945.html

標籤:JavaScript

上一篇:ES6基礎與解構賦值(高顏值彈框小案例!)

下一篇:原生JS輪播圖

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • IEEE1588PTP在數字化變電站時鐘同步方面的應用

    IEEE1588ptp在數字化變電站時鐘同步方面的應用 京準電子科技官微——ahjzsz 一、電力系統時間同步基本概況 隨著對IEC 61850標準研究的不斷深入,國內外學者提出基于IEC61850通信標準體系建設數字化變電站的發展思路。數字化變電站與常規變電站的顯著區別在于程序層傳統的電流/電壓互 ......

    uj5u.com 2020-09-10 03:51:52 more
  • HTTP request smuggling CL.TE

    CL.TE 簡介 前端通過Content-Length處理請求,通過反向代理或者負載均衡將請求轉發到后端,后端Transfer-Encoding優先級較高,以TE處理請求造成安全問題。 檢測 發送如下資料包 POST / HTTP/1.1 Host: ac391f7e1e9af821806e890 ......

    uj5u.com 2020-09-10 03:52:11 more
  • 網路滲透資料大全單——漏洞庫篇

    網路滲透資料大全單——漏洞庫篇漏洞庫 NVD ——美國國家漏洞庫 →http://nvd.nist.gov/。 CERT ——美國國家應急回應中心 →https://www.us-cert.gov/ OSVDB ——開源漏洞庫 →http://osvdb.org Bugtraq ——賽門鐵克 →ht ......

    uj5u.com 2020-09-10 03:52:15 more
  • 京準講述NTP時鐘服務器應用及原理

    京準講述NTP時鐘服務器應用及原理京準講述NTP時鐘服務器應用及原理 安徽京準電子科技官微——ahjzsz 北斗授時原理 授時是指接識訓通過某種方式獲得本地時間與北斗標準時間的鐘差,然后調整本地時鐘使時差控制在一定的精度范圍內。 衛星導航系統通常由三部分組成:導航授時衛星、地面檢測校正維護系統和用戶 ......

    uj5u.com 2020-09-10 03:52:25 more
  • 利用北斗衛星系統設計NTP網路時間服務器

    利用北斗衛星系統設計NTP網路時間服務器 利用北斗衛星系統設計NTP網路時間服務器 安徽京準電子科技官微——ahjzsz 概述 NTP網路時間服務器是一款支持NTP和SNTP網路時間同步協議,高精度、大容量、高品質的高科技時鐘產品。 NTP網路時間服務器設備采用冗余架構設計,高精度時鐘直接來源于北斗 ......

    uj5u.com 2020-09-10 03:52:35 more
  • 詳細解讀電力系統各種對時方式

    詳細解讀電力系統各種對時方式 詳細解讀電力系統各種對時方式 安徽京準電子科技官微——ahjzsz,更多資料請添加VX 衛星同步時鐘是我京準公司開發研制的應用衛星授時時技術的標準時間顯示和發送的裝置,該裝置以M國全球定位系統(GLOBAL POSITIONING SYSTEM,縮寫為GPS)或者我國北 ......

    uj5u.com 2020-09-10 03:52:45 more
  • 如何保證外包團隊接入企業內網安全

    不管企業規模的大小,只要企業想省錢,那么企業的某些服務就一定會采用外包的形式,然而看似美好又經濟的策略,其實也有不好的一面。下面我通過安全的角度來聊聊使用外包團的安全隱患問題。 先看看什么服務會使用外包的,最常見的就是話務/客服這種需要大量重復性、無技術性的服務,或者是一些銷售外包、特殊的職能外包等 ......

    uj5u.com 2020-09-10 03:52:57 more
  • PHP漏洞之【整型數字型SQL注入】

    0x01 什么是SQL注入 SQL是一種注入攻擊,通過前端帶入后端資料庫進行惡意的SQL陳述句查詢。 0x02 SQL整型注入原理 SQL注入一般發生在動態網站URL地址里,當然也會發生在其它地發,如登錄框等等也會存在注入,只要是和資料庫打交道的地方都有可能存在。 如這里http://192.168. ......

    uj5u.com 2020-09-10 03:55:40 more
  • [GXYCTF2019]禁止套娃

    git泄露獲取原始碼 使用GET傳參,引數為exp 經過三層過濾執行 第一層過濾偽協議,第二層過濾帶引數的函式,第三層過濾一些函式 preg_replace('/[a-z,_]+\((?R)?\)/', NULL, $_GET['exp'] (?R)參考當前正則運算式,相當于匹配函式里的引數 因此傳遞 ......

    uj5u.com 2020-09-10 03:56:07 more
  • 等保2.0實施流程

    流程 結論 ......

    uj5u.com 2020-09-10 03:56:16 more
最新发布
  • 使用Django Rest framework搭建Blog

    在前面的Blog例子中我們使用的是GraphQL, 雖然GraphQL的使用處于上升趨勢,但是Rest API還是使用的更廣泛一些. 所以還是決定回到傳統的rest api framework上來, Django rest framework的官網上給了一個很好用的QuickStart, 我參考Qu ......

    uj5u.com 2023-04-20 08:17:54 more
  • 記錄-new Date() 我忍你很久了!

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 大家平時在開發的時候有沒被new Date()折磨過?就是它的諸多怪異的設定讓你每每用的時候,都可能不小心踩坑。造成程式意外出錯,卻一下子找不到問題出處,那叫一個煩透了…… 下面,我就列舉它的“四宗罪”及應用思考 可惡的四宗罪 1. Sa ......

    uj5u.com 2023-04-20 08:17:47 more
  • 使用Vue.js實作文字跑馬燈效果

    實作文字跑馬燈效果,首先用到 substring()截取 和 setInterval計時器 clearInterval()清除計時器 效果如下: 實作代碼如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta ......

    uj5u.com 2023-04-20 08:12:31 more
  • JavaScript 運算子

    JavaScript 運算子/運算子 在 JavaScript 中,有一些運算子可以使代碼更簡潔、易讀和高效。以下是一些常見的運算子: 1、可選鏈運算子(optional chaining operator) ?.是可選鏈運算子(optional chaining operator)。?. 可選鏈操 ......

    uj5u.com 2023-04-20 08:02:25 more
  • CSS—相對單位rem

    一、概述 rem是一個相對長度單位,它的單位長度取決于根標簽html的字體尺寸。rem即root em的意思,中文翻譯為根em。瀏覽器的文本尺寸一般默認為16px,即默認情況下: 1rem = 16px rem布局原理:根據CSS媒體查詢功能,更改根標簽的字體尺寸,實作rem單位隨螢屏尺寸的變化,如 ......

    uj5u.com 2023-04-20 08:02:21 more
  • 我的第一個NPM包:panghu-planebattle-esm(胖虎飛機大戰)使用說明

    好家伙,我的包終于開發完啦 歡迎使用胖虎的飛機大戰包!! 為你的主頁添加色彩 這是一個有趣的網頁小游戲包,使用canvas和js開發 使用ES6模塊化開發 效果圖如下: (覺得圖片太sb的可以自己改) 代碼已開源!! Git: https://gitee.com/tang-and-han-dynas ......

    uj5u.com 2023-04-20 08:01:50 more
  • 如何在 vue3 中使用 jsx/tsx?

    我們都知道,通常情況下我們使用 vue 大多都是用的 SFC(Signle File Component)單檔案組件模式,即一個組件就是一個檔案,但其實 Vue 也是支持使用 JSX 來撰寫組件的。這里不討論 SFC 和 JSX 的好壞,這個仁者見仁智者見智。本篇文章旨在帶領大家快速了解和使用 Vu ......

    uj5u.com 2023-04-20 08:01:37 more
  • 【Vue2.x原始碼系列06】計算屬性computed原理

    本章目標:計算屬性是如何實作的?計算屬性快取原理以及洋蔥模型的應用?在初始化Vue實體時,我們會給每個計算屬性都創建一個對應watcher,我們稱之為計算屬性watcher ......

    uj5u.com 2023-04-20 08:01:31 more
  • http1.1與http2.0

    一、http是什么 通俗來講,http就是計算機通過網路進行通信的規則,是一個基于請求與回應,無狀態的,應用層協議。常用于TCP/IP協議傳輸資料。目前任何終端之間任何一種通信方式都必須按Http協議進行,否則無法連接。tcp(三次握手,四次揮手)。 請求與回應:客戶端請求、服務端回應資料。 無狀態 ......

    uj5u.com 2023-04-20 08:01:10 more
  • http1.1與http2.0

    一、http是什么 通俗來講,http就是計算機通過網路進行通信的規則,是一個基于請求與回應,無狀態的,應用層協議。常用于TCP/IP協議傳輸資料。目前任何終端之間任何一種通信方式都必須按Http協議進行,否則無法連接。tcp(三次握手,四次揮手)。 請求與回應:客戶端請求、服務端回應資料。 無狀態 ......

    uj5u.com 2023-04-20 08:00:32 more