国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【ES6 新特性】

這篇具有很好參考價值的文章主要介紹了【ES6 新特性】。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1、let 聲明變量

// var 聲明的變量往往會越域
// let 聲明的變量有嚴格局部作用域
{
  var a = 1;
  let b = 2;
}
console.log(a); // 1
console.log(b); // ReferenceError: b is not defined
// var 可以聲明多次
// let 只能聲明一次
var m = 1
var m = 2
let n = 3
// let n = 4
console.log(m) // 2
console.log(n) // Identifier 'n' has already been declared
// var 會變量提升
// let 不存在變量提升
console.log(x); // undefined
var x = 10;
console.log(y); //ReferenceError: y is not defined
let y = 20

2、const 聲明常量(只讀變量)

// 1. 聲明之后不允許改變
// 2. 一但聲明必須初始化,否則會報錯
const a = 1;
a = 3; //Uncaught TypeError: Assignment to constant 

3、解構表達式

1)、數(shù)組解構

let arr = [1,2,3];
//以前我們想獲取其中的值,只能通過角標。ES6 可以這樣:
const [x,y,z] = arr;// x,y,z 將與 arr 中的每個位置對應來取值
// 然后打印
console.log(x,y,z)

2)、對象解構

const person = {
name: "jack",
age: 21,
language: ['java', 'js', 'css']
}
// 解構表達式獲取值,將 person 里面每一個屬性和左邊對應賦值
const { name, age, language } = person;
// 等價于下面
// const name = person.name;
// const age = person.age;
// const language = person.language;
// 可以分別打印
console.log(name);
console.log(age);
console.log(language);
//擴展:如果想要將 name 的值賦值給其他變量,可以如下,nn 是新的變量名
const { name: nn, age, language } = person;
console.log(nn);
console.log(age);
console.log(language)

4、字符串擴展

1)、幾個新的 API

ES6 為字符串擴展了幾個新的 API:

  • includes():返回布爾值,表示是否找到了參數(shù)字符串。
  • startsWith():返回布爾值,表示參數(shù)字符串是否在原字符串的頭部。
  • endsWith():返回布爾值,表示參數(shù)字符串是否在原字符串的尾部。
let str = "hello.vue";
console.log(str.startsWith("hello"));//true
console.log(str.endsWith(".vue"));//true
console.log(str.includes("e"));//true
console.log(str.includes("hello"));//tru

2)、字符串模板

模板字符串相當于加強版的字符串,用反引號 `,除了作為普通字符串,還可以用來定義多行字符串,還可以在字符串中加入變量和表達式。

// 1、多行字符串
let ss = `
<div>
<span>hello world<span>
</div>
`
console.log(ss)

// 2、字符串插入變量和表達式。變量名寫在 ${} 中,${} 中可以放
入 JavaScript 表達式。
let name = "張三";
let age = 18;
let info = `我是${name},今年${age}`;
console.log(info)

// 3、字符串中調(diào)用函數(shù)
function fun() {
  return "這是一個函數(shù)"
}
let sss = `O(∩_∩)O 哈哈~,${fun()}`;
console.log(sss); //O(∩_∩)O 哈哈~,這是一個函數(shù)

5、函數(shù)優(yōu)化

1)、函數(shù)參數(shù)默認值

//在 ES6 以前,我們無法給一個函數(shù)參數(shù)設置默認值,只能采用變通寫法:
function add(a, b) {
  // 判斷 b 是否為空,為空就給默認值 1
  b = b || 1;
  return a + b;
}
// 傳一個參數(shù)
console.log(add(10));
  //現(xiàn)在可以這么寫:直接給參數(shù)寫上默認值,沒傳就會自動使用默認值
  function add2(a , b = 1) {
  return a + b;
}
// 傳一個參數(shù)
console.log(add2(10));

2)、不定參數(shù)

不定參數(shù)用來表示不確定參數(shù)個數(shù),形如,…變量名,由…加上一個具名參數(shù)標識符組成。具名參數(shù)只能放在參數(shù)列表的最后,并且有且只有一個不定參數(shù)

function fun(...values) {
  console.log(values.length)
}
fun(1, 2) //2
fun(1, 2, 3, 4) //

3)、箭頭函數(shù)

ES6 中定義函數(shù)的簡寫方式

  • 一個參數(shù)時:
//以前聲明一個方法
// var print = function (obj) {
// console.log(obj);
// }
// 可以簡寫為:
var print = obj => console.log(obj);
// 測試調(diào)用
print(100);
  • 多個參數(shù):
// 兩個參數(shù)的情況:
var sum = function (a, b) {
  return a + b;
}
// 簡寫為:
//當只有一行語句,并且需要返回結果時,可以省略 {} , 結果會自動返回。
var sum2 = (a, b) => a + b;
//測試調(diào)用
console.log(sum2(10, 10));//20
// 代碼不止一行,可以用`{}`括起來
var sum3 = (a, b) => {
  c = a + b;
  return c;
};
//測試調(diào)用
console.log(sum3(10, 20));//30

4)、實戰(zhàn):箭頭函數(shù)結合解構表達式

//需求,聲明一個對象,hello 方法需要對象的個別屬性
//以前的方式:
const person = {
  name: "jack",
  age: 21,
  language: ['java', 'js', 'css']
}
function hello(person) {
  console.log("hello," + person.name)
}
//現(xiàn)在的方式
var hello2 = ({ name }) => { console.log("hello," + name) };
//測試
hello2(person);

6、對象優(yōu)化

1)、新增的 API

ES6 給 Object 拓展了許多新的方法,如:

  • keys(obj):獲取對象的所有 key 形成的數(shù)組
  • values(obj):獲取對象的所有 value 形成的數(shù)組
  • entries(obj):獲取對象的所有 key 和 value 形成的二維數(shù)組。格式:[[k1,v1],[k2,v2],...] - assign(dest, …src) :將多個 src 對象的值 拷貝到 dest 中。(第一層為深拷貝,第二層為淺
    拷貝)
const person = {
  name: "jack",
  age: 21,
  language: ['java', 'js', 'css']
}
console.log(Object.keys(person));//["name", "age", "language"]
console.log(Object.values(person));//["jack", 21, Array(3)]
console.log(Object.entries(person));//[Array(2), Array(2), Array(2)]
const target = { a: 1 };
const source1 = { b: 2 };
const source2 = { c: 3 };
//Object.assign 方法的第一個參數(shù)是目標對象,后面的參數(shù)都是源對象。
Object.assign(target, source1, source2);
console.log(target)//{a: 1, b: 2, c: 3

2)、聲明對象簡寫

const age = 23
const name = "張三"
// 傳統(tǒng)
const person1 = { age: age, name: name }
console.log(person1)
// ES6:屬性名和屬性值變量名一樣,可以省略
const person2 = { age, name }
console.log(person2) //{age: 23, name: "張三"}

3)、對象的函數(shù)屬性簡寫

let person = {
  name: "jack",
  // 以前:
  eat: function (food) {
    console.log(this.name + "在吃" + food);
  },
  // 箭頭函數(shù)版:這里拿不到 this
  eat2: food => console.log(person.name + "在吃" + food),
  // 簡寫版:
  eat3(food) {
    console.log(this.name + "在吃" + food);
  }
}
person.eat("apple");

4)、對象拓展運算符

拓展運算符(…)用于取出參數(shù)對象所有可遍歷屬性然后拷貝到當前對象。

// 1、拷貝對象(深拷貝)
let person1 = { name: "Amy", age: 15 }
let someone = { ...person1 }
console.log(someone) //{name: "Amy", age: 15}
// 2、合并對象
let age = { age: 15 }
let name = { name: "Amy" }
let person2 = { ...age, ...name } //如果兩個對象的字段名重復,后面對象字
段值會覆蓋前面對象的字段值
console.log(person2) //{age: 15, name: "Amy"}

7、map 和 reduce

數(shù)組中新增了 map 和 reduce 方法。

1)、map

map():接收一個函數(shù),將原數(shù)組中的所有元素用這個函數(shù)處理后放入新數(shù)組返回。

let arr = ['1', '20', '-5', '3'];
console.log(arr)
arr = arr.map(s => parseInt(s));
console.log(arr)

2)、reduce

語法:
arr.reduce(callback,[initialValue])
reduce 為數(shù)組中的每一個元素依次執(zhí)行回調(diào)函數(shù),不包括數(shù)組中被刪除或從未被賦值的元
素,接受四個參數(shù):初始值(或者上一次回調(diào)函數(shù)的返回值),當前元素值,當前索引,調(diào)
用 reduce 的數(shù)組。
callback (執(zhí)行數(shù)組中每個值的函數(shù),包含四個參數(shù))
1、previousValue (上一次調(diào)用回調(diào)返回的值,或者是提供的初始值(initialValue))
2、currentValue (數(shù)組中當前被處理的元素)
3、index (當前元素在數(shù)組中的索引)
4、array (調(diào)用 reduce 的數(shù)組)
initialValue (作為第一次調(diào)用 callback 的第一個參數(shù)。)
示例:

const arr = [1,20,-5,3];
//沒有初始值:
console.log(arr.reduce((a,b)=>a+b));//19
console.log(arr.reduce((a,b)=>a*b));//-300
//指定初始值:
console.log(arr.reduce((a,b)=>a+b,1));//20
console.log(arr.reduce((a,b)=>a*b,0));//-0

8、Promise

在 JavaScript 的世界中,所有代碼都是單線程執(zhí)行的。由于這個“缺陷”,導致 JavaScript 的所
有網(wǎng)絡操作,瀏覽器事件,都必須是異步執(zhí)行。異步執(zhí)行可以用回調(diào)函數(shù)實現(xiàn)。一旦有一連
串的 ajax 請求 a,b,c,d… 后面的請求依賴前面的請求結果,就需要層層嵌套。這種縮進和層
層嵌套的方式,非常容易造成上下文代碼混亂,我們不得不非常小心翼翼處理內(nèi)層函數(shù)與外
層函數(shù)的數(shù)據(jù),一旦內(nèi)層函數(shù)使用了上層函數(shù)的變量,這種混亂程度就會加劇…總之,這
層疊上下文的層層嵌套方式,著實增加了神經(jīng)的緊張程度。
案例:用戶登錄,并展示該用戶的各科成績。在頁面發(fā)送兩次請求:

  1. 查詢用戶,查詢成功說明可以登錄
  2. 查詢用戶成功,查詢科目
  3. 根據(jù)科目的查詢結果,獲取去成績
    分析:此時后臺應該提供三個接口,一個提供用戶查詢接口,一個提供科目的接口,一個提
    供各科成績的接口,為了渲染方便,最好響應 json 數(shù)據(jù)。在這里就不編寫后臺接口了,而
    是提供三個 json 文件,直接提供 json
user.json:
{ 
  "id": 1, "name": "zhangsan", "password": "123456"
}
user_corse_1.json:{
  "id": 10, "name": "chinese"
}
corse_score_10.json:{
  "id": 100, "score": 90
}
//回調(diào)函數(shù)嵌套的噩夢:層層嵌套。
$.ajax({
  url: "mock/user.json",
  success(data) {
    console.log("查詢用戶:", data);
    $.ajax({
      url: `mock/user_corse_${data.id}.json`,
      success(data) {
        console.log("查詢到課程:", data);
        $.ajax({
          url: `mock/corse_score_${data.id}.json`,
          success(data) {
            console.log("查詢到分數(shù):", data);
          },
          error(error) {
            console.log("出現(xiàn)異常了:" + error);
          }
        });
      },
      error(error) {
        console.log("出現(xiàn)異常了:" + error);
      }
    });
  },
  error(error) {
    console.log("出現(xiàn)異常了:" + error);
  }
});

我們可以通過 Promise 解決以上問題。

1)、Promise 語法

const promise = new Promise(function (resolve, reject) {
// 執(zhí)行異步操作
  if (/* 異步操作成功 */) {
    resolve(value);// 調(diào)用 resolve,代表 Promise 將返回成功的結果
  } else {
    reject(error);// 調(diào)用 reject,代表 Promise 會返回失敗結果
  }
});

使用箭頭函數(shù)可以簡寫為:

const promise = new Promise((resolve, reject) =>{
// 執(zhí)行異步操作
  if (/* 異步操作成功 */) {
    resolve(value);// 調(diào)用 resolve,代表 Promise 將返回成功的結果
  } else {
    reject(error);// 調(diào)用 reject,代表 Promise 會返回失敗結果
  }
});

這樣,在 promise 中就封裝了一段異步執(zhí)行的結果。

2)、處理異步結果

如果我們想要等待異步執(zhí)行完成,做一些事情,我們可以通過 promise 的 then 方法來實現(xiàn)。如果想要處理 promise 異步執(zhí)行失敗的事件,還可以跟上 catch:

promise.then(function (value) {
  // 異步執(zhí)行成功后的回調(diào)
}).catch(function (error) {
  // 異步執(zhí)行失敗后的回調(diào)
})

3)、Promise 改造以前嵌套方式

new Promise((resolve, reject) => {
  $.ajax({
    url: "mock/user.json",
    success(data) {
      console.log("查詢用戶:", data);
      resolve(data.id);
    },
    error(error) {
      console.log("出現(xiàn)異常了:" + error);
    }
  });
}).then((userId) => {
  return new Promise((resolve, reject) => {
    $.ajax({
      url: `mock/user_corse_${userId}.json`,
      success(data) {
        console.log("查詢到課程:", data);
        resolve(data.id);
      },
      error(error) {
        console.log("出現(xiàn)異常了:" + error);
      }
    });
  });
}).then((corseId) => {
  console.log(corseId);
  $.ajax({
    url: `mock/corse_score_${corseId}.json`,
    success(data) {
      console.log("查詢到分數(shù):", data);
    },
    error(error) {
      console.log("出現(xiàn)異常了:" + error);
    }
  });
});

4)、優(yōu)化處理

優(yōu)化:通常在企業(yè)開發(fā)中,會把 promise 封裝成通用方法,如下:封裝了一個通用的 get 請求方法;

let get = function (url, data) { // 實際開發(fā)中會單獨放到 common.js 中
  return new Promise((resolve, reject) => {
    $.ajax({
      url: url,
      type: "GET",
      data: data,
      success(result) {
        resolve(result);
      },
      error(error) {
        reject(error);
      }
    });
  })
}
// 使用封裝的 get 方法,實現(xiàn)查詢分數(shù)
get("mock/user.json").then((result) => {
  console.log("查詢用戶:", result);
  return get(`mock/user_corse_${result.id}.json`);
}).then((result) => {
  console.log("查詢到課程:", result);
  return get(`mock/corse_score_${result.id}.json`)
}).then((result) => {
  console.log("查詢到分數(shù):", result);
}).catch(() => {
  console.log("出現(xiàn)異常了:" + error);
});

通過比較,我們知道了 Promise 的扁平化設計理念,也領略了這種上層設計帶來的好處。我們的項目中會使用到這種異步處理的方式;

9、模塊化

1)、什么是模塊化

模塊化就是把代碼進行拆分,方便重復利用。類似 java 中的導包:要使用一個包,必須先導包。而 JS 中沒有包的概念,換來的是模塊。模塊功能主要由兩個命令構成:exportimport。

  • export命令用于規(guī)定模塊的對外接口。
  • import命令用于導入其他模塊提供的功能。

2)、export

比如我定義一個 js 文件:hello.js,里面有一個對象

const util = {
  sum(a,b){
    return a + b;
  }
}

我可以使用 export 將這個對象導出:

const util = {
  sum(a,b){
    return a + b;
  }
}
export {util};

當然,也可以簡寫為:

export const util = {
  sum(a,b){
    return a + b;
  }
}

export不僅可以導出對象,一切 JS 變量都可以導出。比如:基本類型變量、函數(shù)、數(shù)組、對象。當要導出多個值時,還可以簡寫。比如我有一個文件:user.js:

var name = "jack"
var age = 21
export {name,age}

省略名稱
上面的導出代碼中,都明確指定了導出的變量名,這樣其它人在導入使用時就必須準確寫出
變量名,否則就會出錯。
因此 js 提供了default關鍵字,可以對導出的變量名進行省略
例如:

// 無需聲明對象的名字
export default {
  sum(a,b){
    return a + b;
  }
}

這樣,當使用者導入時,可以任意起名字。

3)、import

使用export命令定義了模塊的對外接口以后,其他 JS 文件就可以通過import命令加載這個模塊。
例如我要使用上面導出的 util:

// 導入 util
import util from 'hello.js'
// 調(diào)用 util 中的屬性
util.sum(1,2)

要批量導入前面導出的 name 和 age:

import {name, age} from 'user.js'
console.log(name + " , 今年"+ age +"歲了")

但是上面的代碼暫時無法測試,因為瀏覽器目前還不支持 ES6 的導入和導出功能。除非借助于工具,把 ES6 的語法進行編譯降級到 ES5,比如Babel-cli工具,我們暫時不做測試,了解即可文章來源地址http://www.zghlxwxcb.cn/news/detail-680498.html

到了這里,關于【ES6 新特性】的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • ES6 特性

    ES6 特性

    1.1.1 什么是 ES ES 全稱 EcmaScript 是腳本語言的規(guī)范 JavaScript 是 EcmaScript 的一種實現(xiàn) ES 新特性就是指 JavaScript 的新特性 1.1.2 為什么要使用 ES 語法簡單,功能豐富 框架開發(fā)應用 前端開發(fā)職位要求 1.1.3 為什么要學習 ES6 ES6 的版本變動最多,具有里程碑的意義 ES6 加入許多新的語法

    2024年02月07日
    瀏覽(22)
  • ES6的重要特性

    1. 塊級作?域:引? let 和 const ,允許在塊級作?域中聲明變量,解決了變量提升和作?域污染的問題。 2. 箭頭函數(shù):使?箭頭( = )定義函數(shù),簡化了函數(shù)的書寫,并且?動綁定了 this 。 3. 模板字符串:使?反引號(`)包裹字符串,可以在字符串中使?變量和表達式

    2024年02月19日
    瀏覽(31)
  • ES6常用新特性

    ES6改動很大,可以簡單分為四類 1、解決原有語法的缺陷和不足 例如:let,const 2、對原有語法進行增強 解構、擴展、模板字符串 3、新增對象、全新的方法,全新的功能 Object.assign()、Proxy對象代理、Reflect 等等 4、全新的數(shù)據(jù)類型和數(shù)據(jù)結構 set、map、class、迭代器、生成器 等

    2024年02月09日
    瀏覽(18)
  • ES6及以上新特性

    ES6及以上新特性

    ES6(ECMAScript 2015)及以上版本引入了許多新特性,每個版本都有不同的增強和改進。以下是 ES6 及以上版本的新特性的詳細描述: ES6(ECMAScript 2015): let 和 const 聲明:引入塊級作用域的變量聲明,用于替代 var 聲明,解決了變量提升的問題。 箭頭函數(shù):用 “=” 符號定義函

    2024年02月14日
    瀏覽(41)
  • ES新特性系列(一)—— ES的簡介與ES6

    ES新特性系列(一)—— ES的簡介與ES6

    ? ? ? 前幾天在BOSS上了解現(xiàn)在的前端工作的情況和各個公司要求的技術棧情況,看到一條非常有意思的要求:“能夠理解并使用ES6、ES7、ES8、ES9、ES10新特性,都2024年了你總不能只知道ES6吧?” ? ? ? 各位彥祖現(xiàn)在現(xiàn)在就回憶一下,自己是否能把上述的ES系列的常用新特性都

    2024年04月29日
    瀏覽(20)
  • 【ES6】—【新特性】—Symbol詳情

    【ES6】—【新特性】—Symbol詳情

    定義:獨一無二的字符串 PS: Symbol 聲明的值是獨一無二的 PS: 無論Symbol.for()在哪里聲明,都屬于全局環(huán)境聲明 當一個對象的key值有重復時,后面的值會覆蓋前面的值 PS: 使用Symbol的獨一無二的特性來解決

    2024年02月10日
    瀏覽(27)
  • JavaScript 之 ES6 新特性

    在ES6中,模塊化成為了JavaScript的標準特性。ES6模塊化提供了一種更加優(yōu)雅和可維護的方式來組織和管理JavaScript代碼,可以有效地避免全局變量的污染和命名沖突的問題。以下是ES6模塊化的一些主要特性: 導出(export): 可以通過 export 將一個變量、函數(shù)或類導出為一

    2024年02月07日
    瀏覽(26)
  • ES6 新特性(詳細復習筆記)--下

    應用實例-聲明對象簡寫 1. 需求: 演示聲明對象簡寫 代碼演示 2-需求: 演示對象方法簡寫 3-應用實例-對象拓展運算符 需求: 演示對象拓展運算符使用 拷貝對象(深拷貝)的用法和理解 對象拓展運算符是比較新的特性,低版本的瀏覽器不支持 火狐/谷歌瀏覽器沒有問題 基本介紹

    2024年02月15日
    瀏覽(23)
  • es6有哪些新特性?用法和案例

    目錄 箭頭函數(shù) 模板字符串 ?解構賦值 Promise ?async/await 箭頭函數(shù)使用 = 符號定義,可以更簡潔地書寫函數(shù)并且自動綁定 this 。比如: 箭頭函數(shù)通常用在回調(diào)函數(shù)中,例如: 模板字符串是一種新的字符串格式,可以包含變量、表達式和換行符。通過使用占位符 ${} 可以插入變

    2024年02月06日
    瀏覽(19)
  • 【微信小程序 | 實戰(zhàn)開發(fā)】ES5、ES6概述和新特性介紹

    【微信小程序 | 實戰(zhàn)開發(fā)】ES5、ES6概述和新特性介紹

    個人名片: ?? 作者簡介:一名大二在校生,喜歡編程?? ????? 個人主頁??: 小新愛學習. ?? 個人WeChat:hmmwx53 ??? 系列專欄:??? 零基礎學Java——小白入門必備 重識C語言——復習回顧

    2024年02月09日
    瀏覽(14)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包