深入理解es6(上)

来源:https://www.cnblogs.com/sgs123/archive/2019/09/07/11481396.html
-Advertisement-
Play Games

一、let和const 1、let與var的區別 不存在變數提升 塊級作用域 不允許重覆聲明 2、const常量 const與let一樣,唯一區別在於聲明的常量不能被修改 二、解構賦值 es6按照一定模式,從數組和對象中提取值,對變數進行賦值,被稱為解構 1、數組的解構 + "模式匹配",只要等號兩 ...


一、let和const

1、let與var的區別

不存在變數提升
塊級作用域
不允許重覆聲明

2、const常量

const與let一樣,唯一區別在於聲明的常量不能被修改

二、解構賦值

es6按照一定模式,從數組和對象中提取值,對變數進行賦值,被稱為解構

1、數組的解構

  • "模式匹配",只要等號兩邊的模式相同,左邊的變數就會被賦予對應的值,如果右邊不是數組就會報錯
  • 基本用法:
let [a, b, c] = [1, 2, 3] // a=1, b=2, c=3

let [a1, b1=2] = [1] // a1=1, b1=2 //指定預設值

let [d, [e], f] = [1, [2], 3] // 嵌套數組解構 d=1, e=2, f=3

let [g, ...h] = [1, 2, 3] // 數組拆分 g=1, h=[2, 3]

let [i,,j] = [1, 2, 3] // 不連續解構 i=1, j=3

let [k,l] = [1, 2, 3] // 不完全解構 k=1, l=2

2、對象的解構

與數組不同的是,變數的解構沒有順序問題,變數必須與屬性同名才能解構
基本用法:

let {a, b} = {a:'aa', b:'bb'} //a='aa' b='bb'

//設置預設值
let {x, y = 5} = {x: 1}; //x= 1 y=5

//允許別名,a的值將失效
let {a:a1,b} = {a:'aa', b:'bb'} //a1='aa' b='bb' 

let obj = {a:'aa', b: {c:'c'}}
let {a, b:{c}} = obj // 嵌套解構 a='aa' c='bb'

3、字元串的解構

let [a, b, c] = 'hello' // a='h' b='e' c='l'

4、函數的解構

function say({name,age}){
    console.log(name + '今年' + age)
} 
say({name:'小明',age:18})

三、字元串的擴展

1、模板字元串

用反引號(`)標識,字元串中嵌入變數用${}

2、新增方法

查找字元串,返回布爾值

let str = 'hello world'
//返回布爾值,表示是否找到了參數字元串
str.includes('r')  //true 

//返回布爾值,表示參數字元串是否在原字元串的頭部
str.startsWith('hello')  //true

//返回布爾值,表示參數字元串是否在原字元串的尾部
str.endsWith('d')  //true

去空格

let str = '   hello world      '
//消除首尾的空格
str.trim()  //'hello world'

//消除字元串頭部的空格
str.trimStart()  //'hello world   '

//消除尾部的空格
str.trimEnd()  //'   hello world'

四、數組的擴展

es5新增的方法:
forEach、map、filter、some、every、reduce

1、Array.from將類似數組的對象轉為數組

//類似數組的對象
let obj = {
    0:'a',
    1:'b',
    2:'c',
    length:3
}
//es5寫法
var arr = [].slice.call(obj);
//es6寫法
var arr1 = Array.from(obj);

// arguments對象
function foo() {
  var args = Array.from(arguments);
  // ...
}

2、Array.of方法用於將一組值,轉換為數組

    Array.of(3, 11, 8) // [3,11,8]
    Array.of(3) // [3]

3、find/findIndex查找符合條件的元素

//find方法找出第一個符合條件的數組成員
let arr = [1, 4, -5, 10];
let val = arr.find((item,index,arr)=>{
    return item > 1;
})
//val 4

//findIndex返回第一個符合條件的數組成員的位置
let index = arr.find((item,index,arr)=>{
    return item > 1;
})
//index 1

4、entries(),keys(),values()用於遍曆數組

可以用for...of迴圈進行遍歷,唯一的區別是keys()是對鍵名的遍歷、values()是對鍵值的遍歷,entries()是對鍵值對的遍歷。

let arr = ['a','b','c']

//遍曆數組的鍵名
for(let index of arr.keys()){
    console.log(index)
}
//0 1 2 

//遍曆數組的鍵值
for(let value of arr.values()){
    console.log(value)
}
//'a' 'b' 'c'

//遍曆數組的鍵值對
for(let [index,value] of arr.entries()){
    console.log(index,value)
}
//0 'a' 
//1 'b'
//2 'c'

5、includes()表示是否包含某個值

[1, 2, 3].includes(2)     // true
[1, 2, 3].includes(4)     // false
[1, 2, NaN].includes(NaN) // true

//第二個參數表示搜索的開始位置,負數表示倒數位置
[1, 2, 3].includes(3, 3);  // false
[1, 2, 3].includes(3, -1); // true

6、數組的擴展運算符 ...

可以把數組展開成用逗號隔開的一組值

let arr = [1,2,3,4,5,6,7]
//複製數組
let arr1 = [...arr]

//合併數組
let arr2 = [...arr,8] // [1,2,3,4,5,6,7,8]

//展開參數
Math.max(...arr) //7

//剩餘參數(解構賦值)
let [a,...b] = arr
//a 1
//b [2,3,4,5,6,7]

//轉Set (同時去重)
let arr3 = [...new Set(arr)]

五、對象的擴展

1、對象的簡寫

  • 當屬性名和屬性值相同時,可以省略屬性值
  • 方法可以省略function
  • 對象的屬性名和方法名允許為變數或者表達式
  • 例如:
let name = '小明'
let age ="age1"
let person = {
    name,
    [age]:18,
    ['hei'+'ght']:180,
    sayName(){
        console.log(this.name)
    }
}
person.sayName();
console.log(person)

2、對象的擴展運算符 ...

同數組擴展運算符,支持對象解構剩餘參數,對象合併,複製對象

3、Object.is()

用來比較兩個值是否嚴格相等,等同於 "==="

//唯一不同之處
+0 === -0 //true
NaN === NaN //false
Object.is(+0, -0) // false
Object.is(NaN,NaN) //true

4、Object.assign()

  • 用於對象的合併,第一個參數是目標對象,後面的參數都是源對象
  • 如果目標對象與源對象有同名屬性,則後面會覆蓋前面的屬性
var obj1 = {a:1,b:2}
var obj2 = {b:3,c:4}
console.log(Object.assign(obj1,obj2))
//{a:1, b:3, c:4}

let obj = {a:1, b:2}
Object.assign(obj) === obj // true

//參數不是對象會轉成對象再返回
typeof Object.assign(2) // "object"

//undefined和null無法轉成對象,作為第一個參數會報錯
Object.assign(undefined) // 報錯
Object.assign(null) // 報錯

Object.assign(obj, undefined) === obj // true
Object.assign(obj, null) === obj // true

5、Object.setPrototypeOf(),Object.getPrototypeOf()

  • Object.setPrototypeOf()用來設置一個對象的prototype對象
  • Object.getPrototypeOf()用於讀取一個對象的原型對象
//設置obj對象上的__proto__原型對象為proto對象
let proto = {};
let obj = { x: 10 };
Object.setPrototypeOf(obj, proto);

6、Object.keys(),Object.values(),Object.entries()

使用for...of可以遍歷對象的鍵名,鍵值,鍵值對

var obj = {
    a:1,
    b:2,
    c:3
}
//傳統遍歷對象
for(key in obj){
    console.log(key) //所有鍵值
    console.log(obj[key]) //所有鍵值
}

//es6遍歷
//所有鍵名
for( let index of Object.keys(obj) ){
    console.log(index)
}
//所有鍵值
for( let value of Object.values(obj) ){
    console.log(value)
}
//所有鍵值對
for( let [index,value] of Object.entries(obj) ){
    console.log(index,value)
}

7、Object.fromEntries()

方法是Object.entries()的逆操作,用於將一個鍵值對數組轉為對象

Object.fromEntries([
  ['foo', 'bar'],
  ['baz', 42]
])
// { foo: "bar", baz: 42 }

// 特別適合Map結構
const map = new Map().set('foo', true).set('bar', false);
Object.fromEntries(map)
// { foo: true, bar: false }

六、函數的擴展

1、函數參數的預設值

如果傳入了參數就使用傳入的值,如果沒有就使用預設值

function sum(a=0, b=0){
    return a + b;
}
sum(); //0
sum(1); //1
sum(1,1) //2

2、rest參數

用於獲取函數的多餘參數,這樣就不需要使用arguments對象

function add(...value){
    console.log(value)
    //[1,2,3,4]
}
add(1,2,3,4)

3、箭頭函數 =>

使用“箭頭”(=>)定義函數

  • 箭頭函數不需要參數或需要多個參數,就使用一個圓括弧代表參數部分
  • 箭頭函數的代碼塊部分多於一條語句,就要使用大括弧將它們括起來,並且使用return語句返回
  • 如果箭頭函數直接返回一個對象,必須在對象外面加上括弧,否則會報錯
var f = v => v;

// 等同於
var f = function (v) {
  return v;
};

註意:

this指向外部作用域
不可以new,也就是不能用作構造函數
不可以使用argument對象,可以使用rest參數代替

參考至 阮一峰es6


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、float基礎用法示例 1、我們先建兩個div盒子,設置高度、寬度和背景顏色; 最開始兩個盒子在網頁上的位置如下: 然後我們將紅色盒子浮動到右邊 然後我們會發現紅色盒子浮動到了右邊,但是藍色盒子就直接上移到了原先紅色盒子的位置。 然後我們將藍色盒子也浮動到右邊看看效果: 我們會發現它會緊跟著紅色 ...
  • Vue路由系統 一切分離都是為了更好的結合,本文詳細介紹了前後端分離架構之後,前端如何實現路由控制,即Vue路由系統。 一、VueRouter實現原理 VueRouter的實現原理是根據監控錨點值的改變,從而不斷修改組件內容來實現的,我們來試試不使用VueRouter,自己實現路由控制,如下代碼: ...
  • 現在很多網站都會使用瀑布流的一個效果,什麼是瀑布流呢,用在哪些地方呢? 大概就是這樣的一個效果,一般用於無法保證圖片大小的網站。 先看下佈局+css 實現的一個大概思路: 瀑布流:第一行正常浮動,從第二行開始,每個元素都定位到上一行的最小高度的元素下 1.獲取元素 2.佈局 3.區分第一行和後面的行 ...
  • 在javascript中常見的瀏覽器相容問題,以及解決方式。 在前端工作當中我們遵循這樣的原則:漸進增強和優雅降級 漸進增強(progressive enhancement): 針對低版本瀏覽器進行構建頁面,保證最基本的功能,然後再針對高級瀏覽器進行效果、交互等改進和追加功能達到更好的用戶體驗 優雅 ...
  • ES6
    1.什麼是ES6? ES的全稱是ECMAScript,ES6就是ES2016之後的一個泛稱,是由ECMA國際標準化組織制定的一項腳本語言的標準化規範。 2.ES6新增語法 1. let ES6中新增的用於聲明變數的關鍵字 特點: 1.let聲明的變數具有塊級作用域的特點,只在所處的塊級作用域有效 i ...
  • 1. 效果圖展示 2. 工程目錄結構 註意: webapp下的resources目錄放置easyui和js(jQuery文件是另外的) 3. 代碼 index.jsp springmvc.xml配置靜態資源 註意: 1. EasyUI和JQuery文件是放在webapp/resources目錄下的, ...
  • JS是以事件驅動為核心的一門語言。 事件的三要素:事件源、事件、事件驅動程式。 例如: 常見的事件如下: DOM:文檔對象模型。DOM 為文檔提供了結構化表示,並定義瞭如何通過腳本來訪問文檔結構。目的其實就是為了能讓js操作html元素而制定的一個規範。 DOM就是由節點組成的。 解析過程 HTML ...
  • 處理方法:數組改變用push ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...