前端工程化:ES6特性

本文為個人學習筆記整理,僅供交流參考,非專業教學資料,內容請自行甄別

文章目錄

  • 一、let與var
    • 1.1、越獄問題
    • 1.2、變量的重復聲明
    • 1.3、變量提升問題
  • 二、解構
    • 2.1、數組解構
    • 2.2、對象解構
    • 2.3、方法解構
  • 三、鏈判斷
  • 四、參數默認值
  • 五、箭頭函數
  • 六、模板字符串
  • 七、異步操作
  • 八、Async
  • 九、Await
  • 十、模塊化


一、let與var

??let與var是定義變量的兩種方式。一般推薦使用前者,主要是考慮到以下的這些因素:

1.1、越獄問題

{var a = 10;let b = 20;
}
console.log(a);
console.log(b);

??這段代碼的運行結果:
在這里插入圖片描述
??a和b的作用域都應該是在大括號中的,而使用var定義的a變量,作用域超出了大括號。

1.2、變量的重復聲明

var a = 1;
var a = 2;
var a = 3;
console.log(a)

??這段代碼的運行結果,前兩次賦值的a被覆蓋了。
在這里插入圖片描述

// 報錯
let b = 4;
let b = 5;
console.log(b)

??這段代碼的運行結果,let聲明的同一個變量不能重復賦值
在這里插入圖片描述

1.3、變量提升問題

console.log(a);
var a = 10;

??這段代碼的運行結果,打印出的a為空:
在這里插入圖片描述

console.log(b);
let b = 2;

??這段代碼的運行結果,報錯,因為使用let聲明的變量,在打印時還沒有進行賦值操作
在這里插入圖片描述

二、解構

??解構分為數組解構,對象解構和方法解構

2.1、數組解構

let arr = [1,2,3];//如果需要獲取數組中的某一個元素,常規寫法
console.log(arr[0]);//解構
let [x,y,z] = arr;
console.log(x)
console.log(y)
console.log(z)

2.2、對象解構

let person = {name:"zhangsan",age:18,email:"2458677367@gmail.com"
}//獲取對象中的某個屬性,常規寫法
console.log(person.name)
console.log(person.age)
console.log(person.email)//將對象解構
let {name,age}=person;
console.log(name)
console.log(age)

2.3、方法解構

//方法解構
function test({name,age}){console.log(name)console.log(age)
}//傳入對象
test(person)

三、鏈判斷

??我定義一個這樣的對象:

let message = {body:{user:{name:'John',}}
};

??常規判空的寫法,如果對象結構層級復雜,那么判空相對也會很復雜

let result = (message && message.body && message.body.user && message.body.user.name) || "default";
console.log(result)

??es6的鏈判斷:

let result0 = message?.body?.user?.name || "default";
console.log(result0);

四、參數默認值

??假設我定義了一個方法,需要接收a和b兩個參數,但是在調用時只傳入了一個參數:

function test(a,b){// b = b || 1return a + b;
}console.log(test(1));

??會報錯,因為1需要和空值做運算。
在這里插入圖片描述
??傳統的給參數默認值,可以是:

function test(a,b){b = b || 1return a + b;
}

??而es6規范,支持在函數的參數定義上,給予默認值:

function test1(a,b = 5){return a + b;
}console.log(test1(1));

在這里插入圖片描述
??如果用戶傳遞了值,則按照用戶傳遞的為準:

function test1(a,b = 5){return a + b;
}console.log(test1(1,10));

在這里插入圖片描述
??注意,默認值只能給函數中的最后一個參數設置。

五、箭頭函數

??箭頭函數就相當于JAVA中的lambda表達式,是函數式編程的體現:

//箭頭函數
//傳統做法
function print(arg){console.log(arg);
}print(2);//箭頭函數
let print1 = arg => console.log(arg);
print1(3);

六、模板字符串

??如果需要進行字符串動態拼接,傳統方式:

let arg1 = "1926";
let arg2 = "1848";
let info = "測試參數1:["+arg1+"],測試參數2:["+arg2+"]"console.log(info);

??采用es6的模板字符串,需要將""換成``,并且使用${}的方式取值。

let info1 = `測試參數1:[${arg1}],測試參數2:[${arg2}]`
console.log(info1);

七、異步操作

??在es6中,promise代表異步操作,并且封裝了異步操作的結果:

//promise
//是js中的異步操作
console.log("start")
let promise = fetch("https://jsonplaceholder.typicode.com/posts/1")
//無需等待上一步操作的結果
console.log("finish")//promise操作成功之后
promise.then(success=>{console.log("success");
});
//promise操作失敗之后
promise.catch(err=>{console.log("fail:" + err);
});

在這里插入圖片描述

八、Async

??async也是將函數轉換為異步的一種方式,如果需要將某個函數進行異步處理,可以使用自己封裝promise的方式:

// 異步方式1
function test2(arg0){return new Promise((resolve,reject)=>{if (arg0 % 2 === 0){resolve(arg0)}else {reject("arg0不是偶數")}})
}//獲取promise正確與錯誤的結果
test2(100).then(data=>console.log(data)).catch(error=>console.log(error));

??也可以直接在function前加入async關鍵字,被async關鍵字修飾的function,返回的依舊是一個promise對象。在處理異常時,最好的方式是直接使用throw new Error關鍵字進行拋出,否則async并不知道是then還是catch接收到的異常。

//異步方式2 async
async function test3(arg0){if (arg0 % 2 === 0){return arg0}else {// return "arg0不是偶數"throw new Error("arg0不是偶數")}
}//如果使用async 出現了異常但是沒有拋出,async并不知道是then還是catch接收到的
test3(101).then(data=>console.log("then接收到" + data)).catch(error=>console.log("catch接收到" + error));

九、Await

??await是異步轉同步的一種方式。還是以之前的fetch異步獲取數據為例,首先fetch得到的是一個promise對象,需要通過then,catch進行處理。在將結果使用.json進行轉換時,得到的又是另一個promise對象,依舊要進行then,catch的處理。

//讀取網頁數據案例,兩個異步操作
function getFile() {let urlResult = fetch("https://jsonplaceholder.typicode.com/posts/1");urlResult.then((res) => {let urlResJson = res.json();urlResJson.then((res) => {console.log(res)})}).catch((err) => {console.log(err)})
}getFile()

??而使用await關鍵字,則是將promise的異步操作轉為同步:

async function getFile1() {let urlResult = await fetch("https://jsonplaceholder.typicode.com/posts/1");let urlResJson = await urlResult.json();console.log(urlResJson)
}getFile1()

在這里插入圖片描述

十、模塊化

??如果一個js文件,需要導入另一個js文件中的內容,可以通過importexport關鍵字實現:
??user.js

const user = {username :"zhangsan",age:18
}const isAdult = (age) =>{if (age > 18){console.log("成年人")}else {console.log("未成年人")}
}//導出用戶實體和方法
export {user,isAdult
}

??main.js

import {user,isAdult
} from "./user.js";isAdult(user.age)

??如果在html中引入,則需要加上type="module"

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>測試模塊化</title><script src="lib/module/main.js" type="module"></script>
</head>

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/91703.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/91703.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/91703.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

大屏項目展示

一、項目克隆與基礎操作 我們參考的項目 互聯網設備可視化平臺---IofTV-Screen: ??一個基于 vue、datav、Echart 框架的物聯網可視化(大屏展示)模板,提供數據動態刷新渲染、屏幕適應、數據滾動配置,內部圖表自由替換、Mixins注入等功能,持續更新.... 將次項目克隆到本…

基于R語言地理加權回歸、主成份分析、判別分析等空間異質性數據分析實踐技術應用

在自然和社會科學領域有大量與地理或空間有關的數據&#xff0c;這一類數據一般具有嚴重的空間異質性&#xff0c;而通常的統計學方法并不能處理空間異質性&#xff0c;因而對此類型的數據無能為力。以地理加權回歸為基礎的一系列方法&#xff1a;經典地理加權回歸&#xff0c;…

【Flask 基礎 ①】 | 路由、參數與模板渲染

0 序言 Flask 是 Python 生態中一款輕量級 Web 框架&#xff0c;以簡潔、靈活著稱。 學習 Flask 的意義在于&#xff1a; 快速開發&#xff1a;通過少量代碼即可搭建功能完整的 Web 應用&#xff1b;理解原理&#xff1a;其設計清晰體現了 Web 框架的核心邏輯&#xff0c;如路由…

wordpress登陸前登陸后顯示不同的頂部菜單

在WordPress中讓“未登錄”和“已登錄”用戶看到不同的頂部菜單&#xff0c;最干凈、最安全、最可維護的做法是&#xff1a; 在同一個菜單位置(themelocation)里&#xff0c;根據is_user_logged_in()動態切換菜單。 下面給出三種常見實現方式&#xff0c;按推薦程度排序。任選…

【昇騰推理PaddleOCR】生產級部署方式

已知的在昇騰上推理Paddle OCR有三種方法&#xff1a; 概要&#xff1a; PyTorch官方提供了昇騰插件包&#xff0c;安裝后雖然可以支持PytorchOCR和PaddlePaddle的推理任務&#xff0c;但性能較低。換句話說&#xff0c;PaddlePaddle框架層面支持了昇騰&#xff0c;但具體到某個…

LangChain摘要記憶組件的使用與解析

01. 摘要記憶組件的類型 在 LangChain 中使用緩沖記憶組件要不就保存所有信息&#xff08;占用過多容量&#xff09;&#xff0c;要不就保留最近的記憶信息&#xff08;丟失太多重要信息&#xff09;&#xff0c;那么有沒有一種情況是既要又要呢&#xff1f; 所以折中方案就出…

NAT與智能選路

1、NAT 基礎概念核心作用&#xff1a;私網地址無法在 Internet 上直接使用和分配&#xff0c;NAT 通過將私有地址與公有地址及端口進行轉換&#xff0c;實現私網與公網的通信。轉換示例&#xff1a;內網用戶&#xff08;10.1.1.1&#xff09;訪問外網 FTP Server&#xff08;12…

【05】VisionMaster入門到精通——圓查找

文章目錄1 運行參數先檢測出多個邊緣點然后擬合成圓形&#xff0c;可用于圓的定位與測量 1 運行參數 先檢測出多個邊緣點然后擬合成圓形&#xff0c;可用于圓的定位與測量——運行參數 扇環半徑——圓環ROI的內外圓半經&#xff1b; 邊綠類型 最強——只檢測掃描范圍內梯度最…

p5.js 用 beginGeometry () 和 endGeometry () 打造自定義 3D 模型

點贊 關注 收藏 學會了 在 p5.js 的 3D 繪圖中&#xff0c;這兩個函數是一對 “黃金搭檔”&#xff1a; beginGeometry()&#xff1a;像一個 “3D 模型的開關”&#xff0c;調用它之后&#xff0c;你畫的所有簡單 3D 形狀&#xff08;比如球體、圓錐&#xff09;都會被 “…

(9)NMPC非線性模型預測控制及機械臂ROS控制器實現

前言 本篇介紹Nonlinear Model Predictive Control&#xff0c;非線性模型預測控制&#xff0c;MPC是一種現代先進的控制方法&#xff0c;而NMPC特指對非線性模型的控制&#xff0c;其核心思想是在每個控制周期內利用系統的非線性模型及損失函數&#xff0c;預測未來一段時間內…

達夢數據庫備份與還原終極指南:從基礎到增量策略實戰

第一部分&#xff1a;備份與還原核心原理 一、備份還原本質解析數據存儲機制 數據存儲在物理文件頁中&#xff08;最小單位4K-32K&#xff09;有效數據頁 文件描述頁 已分配使用頁日志優先原則&#xff1a;操作先寫REDO日志再更新數據文件三大核心操作操作作用關鍵特性備份復…

設計模式篇:在前端,我們如何“重構”觀察者、策略和裝飾器模式

設計模式篇&#xff1a;在前端&#xff0c;我們如何“重構”觀察者、策略和裝飾器模式 引子&#xff1a;代碼里“似曾相識”的場景 作為開發者&#xff0c;我們總會遇到一些“似曾相識”的場景&#xff1a; “當這個數據變化時&#xff0c;我需要通知其他好幾個地方都更新一…

Node.js 服務可以實現哪些功能

以下是 Node.js 服務可以實現的 100 個功能&#xff0c;涵蓋 Web 開發、工具鏈、系統集成、自動化等方向&#xff0c;按類別分類整理&#xff1a;一、Web 開發相關 RESTful API 服務GraphQL 服務實時聊天應用&#xff08;WebSocket/Socket.IO&#xff09;博客/CMS 系統電子商務…

如何安裝和使用 Cursor AI 編輯器

在軟件開發領域&#xff0c;幾乎每天都有新工具涌現&#xff0c;找到最適合您工作流程的工具可能會改變游戲規則。Cursor 是一款 AI 驅動的代碼編輯器&#xff0c;其革命性的 API 管理插件 EchoAPI 就是其中的代表。它們強強聯手&#xff0c;承諾在一個強大的平臺內簡化您的編碼…

LangChain框架概念及簡單的使用案例

一、LangChain介紹LangChain是一個強大的用于開發大模型應用程序的框架&#xff0c;為開發提供豐富的工具和組件&#xff0c;使得構造復雜的自然語言處理變得更加高效和便捷。它允許開發者將大語言模型與其他數據源工具集成&#xff0c;從而創建出能處理各種任務的智能體應用&a…

安卓audio 架構解析

audio_port_handle_t ? 定義&#xff1a;audio_port_handle_t標識音頻設備&#xff08;如揚聲器、耳機&#xff09;或虛擬端口&#xff08;如遠程 submix&#xff09;。它在設備連接或策略路由時由AudioPolicyManager分配&#xff0c;例如通過setDeviceConnectionState()動態注…

GitHub 上 Star 數量前 8 的開源 MCP 項目

原文鏈接&#xff1a;https://www.nocobase.com/cn/blog/github-open-source-mcp-projects。 MCP 這個詞真正被廣泛提起&#xff0c;是在 2025 年年初&#xff0c;尤其是在 AI 工具開發圈。3 月&#xff0c;一場圍繞 “MCP 是否能成為未來標準協議” 的爭論徹底點燃了討論熱度…

【數據結構與算法】數據結構初階:排序內容加餐(二)——文件歸并排序思路詳解(附代碼實現)

&#x1f525;個人主頁&#xff1a;艾莉絲努力練劍 ?專欄傳送門&#xff1a;《C語言》、《數據結構與算法》、C語言刷題12天IO強訓、LeetCode代碼強化刷題 &#x1f349;學習方向&#xff1a;C/C方向 ??人生格言&#xff1a;為天地立心&#xff0c;為生民立命&#xff0c;為…

Jetson Orin NX/NANO+ubuntu22.04+humble+MAVROS2安裝教程

MAVROS2目前不是官方提供的標準&#xff0c;主要區別還是通信機制的不同&#xff0c;以及API接口的區別&#xff0c;在使用的過程中&#xff0c;根據對應的版本安裝即可&#xff0c;此處進提供簡易的二進制安裝方法&#xff0c;源碼安裝暫不提供&#xff0c;前去使用mavros即可…

Ubuntu 安裝 ns-3 教程

Ubuntu 安裝 ns-3最全 教程 1. 環境更新 sudo apt update sudo apt install git2. Ns3 最低依賴要求 2.1 安裝依賴 安裝依賴網址&#xff1a;根據自己安裝的版本安裝對應依賴。 https://www.nsnam.org/wiki/Installation Ubuntu/Debian/Mint 以下軟件包列表在 Ubuntu 22.…