主頁 > 企業開發 > 帶你快速入坑ES6

帶你快速入坑ES6

2022-01-28 07:13:10 企業開發

一、了解ES6

1)ES6官網:http://www.ecma-international.org/ecma-262/6.0/

2)Javascript是ECMAScript的實作和擴展

3)ES學習建議:

  • 基礎語法(包括與舊版的差異優劣;新版有哪些坑等等)
  • 應用場景
  • 多在專案中應用

補充:VSCode的插件Live Server的作用:

  • 頁面更改后自動重繪
  • 使用的是http協議而非file://

二、ES6特性入坑

1)let\const

let

// let定義變數
let name = "zhangsan"

// var會造成變數穿透
for(var i=0;i<5;i++){
  console.log(i);
};
console.log("===這里就是變數穿透===>" + i) // 結果:===這里就是變數穿透===>5
// let不會造成變數穿透
for(let i=0;i<5;i++){
  console.log(i);
};
console.log("===這里就是變數穿透===>" + i) // 結果:i is not defined

const:

// ES5
Object.defineProperty(window, 'es', {
  value:'es6',
  writable:false
})
console.log(es) // window.es,括號內為簡寫;結果:es6
window.es = 'es2015'
console.log(window.es) // 結果:es6

// ES6 const:常量
// 1
const es = 'es6'
console.log(es) // 結果:es6
//es = 'es2015' // 這行報錯 
console.log(es)

// 2.const 常量名不允許重復宣告
var str = 'es6'
var str = 'es2015'
console.log(str) // es2015

// 3
// const 宣告的常量 不屬于 頂層物件window
// var   宣告的變數 屬于   頂層物件window

// 4.const不存在常量提升
// var變數提升
console.log(str) // 結果:undefined
var str = 'es6'
// 相當于
var str
console.log(str) // 結果:undefined
str = 'es6'

// 5.const宣告的常量具有塊級作用域
// var
if(true){
  var strsix = 'es6'
}
console.log(strsix) // 結果:es6

const宣告常量的本質

const宣告的常量真的不可以改變嗎

const esObj = {
  name:'es6',
  year:2015,
}
esObj.name = 'es2015'
console.log(esObj.name) // 結果:es2015

const esObj = {
  name:'es6',
  year:2015,
}
Object.freeze(esObj)
esObj.name = 'es2015'
console.log(esObj.name) // 結果:es6


const arr = ['es6', 'es7', 'es8']
Object.freeze(arr)
arr[0] = 'es2015'
console.log(arr[0]) // 結果:es6 


const esObj = {
  name:'es6',
  year:2015,
  extension:['es7', 'es8'],
}
// Object.freeze(esObj)
myFreeze(esObj)
esObj.extension[0] = 'es2016'
console.log(esObj.extension[0]) // 結果:es7

// 對深層次的資料進行凍結
function myFreeze(obj){
  Object.freeze(obj)
  // ES5的forEach;keys()方法得到的是陣列
  Object.keys(obj).forEach(function(key){
    if(typeof obj[key] === 'object'){
      myFreeze(obj[key])
    }
  });
}

// 建議優先使用const

2)箭頭函式

2-1箭頭函式

// 1-1.原始寫法
const sum = function(x, y){
  return x + y
}
const res = sum(4, 4)
console.log(res)
// 1-2
// 默認引數 給引數串列設定初始值
function add(a=100,b=100) {
    console.log(a,b);    
}
// 執行方法,會用默認值填充,列印出來100,100
add();
// 覆寫默認值列印  結果是1,2      
add(1,2);

// 2.箭頭函式寫法
const sum2 = (x, y) => {
  return x + y
}
// 相當于:  const sum2 = (x, y) => x + y
const res2 = sum2(5, 5)
console.log(res2)

// 3.只有一個形參,小括號可省略

// 4
const btnObj = document.querySelector('#btn')
// console.log(btnObj)
btnObj.addEventListener('click', () => {
  /*箭頭函式里面沒有this,當需要在箭頭函式里用到this時,
   它會通過當前的作用域鏈,向它上層的作用域內去找this指向,到底
   指向的誰*/
  console.log(this) // 結果:window
  this.style.backgroundColor = '#f00'
})

2-2箭頭函式任何場景都可以使用嗎

// 1
const obj = {
  name1:'cy',
  showName:function(){
      console.log('名字:'+ this.name1) //名字:cy
  },
  // 簡寫:
  showName(){
      console.log('名字='+ this.name1) //名字=cy
  },

  showName:() => {
    console.log('名字:'+ this.name1) // 名字:undefined
  },
}
obj.showName()

// 2
/*function sum2(x, y){
  // function里面的關鍵字arguments,arguments能夠取到形參的值和其它東西
  console.log(arguments)
}
sum2(3, 3)*/

const sum = (x, y) => {
  // 在箭頭函式中不能使用arguments
  console.log(arguments) 
  return x + y
}
sum(4, 4) // arguments is not defined

// 3
// 在ES5中使用函式模擬一個類
function Course(mame, price){
  this.name = name
  this.price = price
}
const c1 = new Course('es', 500)
console.log(c1)
// ES5中類的方法定義在原型中
Course.prototype.study = function(){
  console.log(`學習: ${this.name}`) // ES6模板字串
}
c1.study()
// ES6箭頭函式不能作為建構式
const Course = (mame, price) => {
  this.name = name
  this.price = price
}
// TypeError:Course is not a constructor
const c2 = new Course('es', 500)
console.log(c2)
// ES6箭頭函式不能定義原型方法
Course.prototype.study = () => {
  console.log(`學習: ${this.name}`) // ES6模板字串
}
c1.study()

3)解構賦值

3-1解構賦值

// 1
const course = {
  name:'es6',
  price:500,
  teacher:{
    name2:'cy',
    age:89,
  },
  say(){
    console.log(this) // this指window
    console.log('名字');
  }
}
/*傳統的做法:
var name = course.name
var price =course.price
course.say()
 */
/*const {name2, price} = course
  默認情況name,price必須是JSONKey.
  console.log(name2) //結果:undefined */
const {name, price, teacher:{name2, age}, say} = course
console.log(name, price, name2, age)
say()

// 2
const course = {
  name:'es6',
  price:500,
  teacher:{
    name:'cy',
    age:89,
  }
}
// courseName:為別名,可以用冒號取別名
const {name:courseName, price, teacher:{name, age}} = course
console.log(courseName, price, name, age)

// 3
const arr = ['es6', 'es7', 'es8']
const [a, b, c] = arr
console.log(a, b, c)

3-2準確的使用解構賦值

  • 函式引數
  • 函式回傳值
  • 變數互換
  • JSON應用
  • Ajax請求應用
<script src="https://cdn.bootcdn.net/ajax/libs/axios/0.24.0/axios.js"></script>
<script>
// 1.作為函式的形式引數使用
/*const sum = arr =>{
    let res = 0
    for(let i = 0; i < arr.length; i++){
      res += arr[i]
    }
    console.log(res)
  }
  sum([1, 2, 3])

  const sum = ([a, b, c]) =>{
      console.log(a + b + c)
  }
  sum([1, 2, 3]) */

const foo = ({name, age, school='默認值,傳值則改'}) => {
  console.log(name, age, school)
}
foo({
  name:'張三',
  age:20
})

// 2.作為函式的回傳值使用
const foo = () => {
  return {
    name:'cy',
    age:20
  }
}
const {name, age} = foo()

// 3.兩個變數的值互換
let a = 1
let b = 2
[b, a] = [a, b]
console.log(a, b) // 結果:2 1

// 4.JSON應用
const json = '{"name":"es","price":"500"}'
/*const obj = JSON.parse(json)
        console.log(obj) // {name:"es", price:"500"} */
const {name, price} = JSON.parse(json)
console.log(name, price)

// 5.Ajax請求應用
/*axios.get('./data.json').then(function(res){
     console.log(res)
  })*/
axios.get('./data.json').then(res => {
  console.log(res.data)
})
// axios.get('./data.json').then(res => {console.log(res.data)})相當于
axios.get('./data.json').then(({data}) => {
  console.log(data)
})
axios.get('./data.json').then(({data:{name, type}}) => {
  console.log(name, type)
})
</script>

4)模板字串

const name = 'itcast'    
console.log(`hello ${name}`)

5)物件簡寫

如果一個物件中的key和value的名字一樣的情況下可以定義成一個,

function person(name, age) {
    // return {name:name,age:age};
    // 物件簡寫
    return {name, age};
};
// 呼叫和執行
var json = person("小花花美美", 20);
console.log(json.name, json.age);
//========= 實戰應用 =============
//<button onclick="login()">登錄</button>
function login() {
    var username = $("#username").val();
    var password = $("#password").val();
    // 發送ajax
    $.ajax({
        type: "post",
        // 物件簡寫
        data: {username, password},
        // 原始寫分
        //data:{username:username,password:password},
        success() {
        }
    });
}

6)傳播運算子【...】

把一個物件的屬性傳播到另外一個物件中

// ==== ... 物件融合====
var person1 = {
    name: '小飛飛',
    age: 16,
};
var person2 = {
    ...person1,
    gender:1,
    tel:13478900
};
console.log(person2);
// ==== ... 物件取值====
var person3 = {
    name:"李四",
    gender:1,
    tel:"11111",
    address:'廣州'
};
// ...person4 把剩下沒取走給我
var {name,gender,...person4} = person3
console.log(name)
console.log(age)
console.log(person4)

// 模擬后臺:異步查詢回傳用戶資料
function findUsers(){
    $.get("xxxxx",function(res){
        var res = {
            pages:11,
            pageSize:10,
            pageNo:1,
            firstFlag:true,
            lastFlag:false,
            total:123,
            data:[{},{},{},{}],
        };
        // ... 物件取值
        var {data:users,...pagesjon} = res;
        // 等價于
        /*  var users = res.data;
           var pagesjon = {
            res = {
                pages:11,
                pageSize:10,
                pageNo:1,
                firstFlag:true,
                lastFlag:false,
                total:123,
            }; */
    })
}

7)陣列map和reduce方法

map

方法可以將原陣列中的所有元素通過一個函式進行處理并放入到一個新陣列中并回傳該新陣列

let arr = ['1', '20', '-5', '3'];
var newarr = arr.map(value =https://www.cnblogs.com/yulingzhiling/p/> {
    return parseInt(value) * 2;
});
console.log("原陣列:" + arr)
console.log("new陣列:" + newarr)

reduce

reduce(function()(必須),初始值(可選) )

  • 第一個引數是上一次reduce處理的結果
  • 第二個引數是陣列中要處理的下一個元素

reduce() 會從左到右依次把陣列中的元素用reduce處理,并把處理的結果作為下次reduce的第一個引數,如果是 第一次,會把前兩個元素作為計算引數,或者把用戶指定的初始值作為起始引數

let arr2 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
var result = arr2.reduce((a, b) => a + b);
console.log(result);
作者:御靈之靈轉載請注明原文鏈接:https://www.cnblogs.com/yulingzhiling/p/15849730.html若標題中有“轉載”字樣,則本文著作權歸原作者所有,若無轉載字樣,本文著作權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利.

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

標籤:JavaScript

上一篇:JS的一些物件

下一篇:在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