前端面試二之運算符與表達式

目錄

1.JavaScript 中的?==?和?===?運算符

2.||?(邏輯或) 運算符

與 ES6 默認參數的區別

與????(空值合并運算符) 的區別?

3.?.(可選鏈)運算符

(1). 安全訪問深層嵌套屬性

(2). 安全調用可能不存在的函數

(3). 安全訪問數組元素

4.展開運算符 (...)

(1). 數組展開

(2). 對象展開 (ES2018)

注意事項

淺拷貝特性:

5.解構賦值

(1)數組解構

(2)對象解構


1.JavaScript 中的?==?和?===?運算符

== 運算符會在比較前進行類型轉換,然后再比較值。

5 == '5'      // true (字符串'5'轉換為數字5)
true == 1     // true (true轉換為1)
false == 0    // true (false轉換為0)
null == undefined // true
'0' == false  // true (兩邊都轉換為數字0)
[] == false   // true (空數組轉換為0,false轉換為0)
'' == 0       // true (空字符串轉換為0)

=== 運算符不會進行類型轉換,如果類型不同直接返回 false。

5 === '5'     // false (數字不等于字符串)
true === 1    // false (布爾值不等于數字)
false === 0   // false (布爾值不等于數字)
null === undefined // false
'0' === false // false (字符串不等于布爾值)
[] === false  // false (數組不等于布爾值)
'' === 0      // false (字符串不等于數字)

2.||?(邏輯或) 運算符

JavaScript 的 || 運算符實際上返回的是第一個"真值"(truthy)的操作數,或者最后一個操作數(如果所有操作數都是"假值"(falsy))。

在 JavaScript 中,以下值被認為是 假值(falsy)

  • false
  • 0
  • ""?(空字符串)
  • null
  • undefined
  • NaN
    function greet(name) {name = name || "訪客";console.log(`你好, ${name}!`);
    }greet("張三");  // 輸出: 你好, 張三!
    greet();       // 輸出: 你好, 訪客!

    與 ES6 默認參數的區別

ES6 的函數默認參數提供了更精確的默認值設置方式:

function greet(name = "訪客") {console.log(`你好, ${name}!`);
}greet(undefined);  // 輸出: 你好, 訪客!
greet(null);       // 輸出: 你好, null!

?|| 會對所有假值使用默認值,而 ES6 默認參數只在參數為 undefined 時使用默認值。

與????(空值合并運算符) 的區別?

ES2020 引入了 ?? 運算符,它只在左側為 nullundefined 時返回右側值:?

0 || "默認值"    // "默認值" (因為0是假值)
0 ?? "默認值"    // 0 (因為0不是null或undefined)"" || "默認值"   // "默認值"
"" ?? "默認值"   // ""false || "默認值" // "默認值"
false ?? "默認值" // false

3.?.(可選鏈)運算符

?. 是 JavaScript 的可選鏈運算符(Optional Chaining Operator),于 ES2020 引入。它允許你安全地訪問嵌套對象屬性或調用函數,而無需驗證每個引用是否有效。當 ?. 左側為 null/undefined 時,右側不會執行。可選鏈運算符極大簡化了深層屬性訪問的代碼,使代碼更簡潔且更安全,是處理不確定結構數據的理想選擇。

obj?.prop       // 訪問屬性
obj?.[expr]     // 通過表達式訪問屬性
func?.(args)    // 調用函數

(1). 安全訪問深層嵌套屬性

const street = user?.address?.street;
// 如果 user 或 address 是 null/undefined,返回 undefined 而不會報錯

(2). 安全調用可能不存在的函數

// 傳統方式
const result = obj.method && obj.method();// 可選鏈方式
const result = obj.method?.();

(3). 安全訪問數組元素

const firstItem = arr?.[0];
// 等同于 (arr !== null && arr !== undefined) ? arr[0] : undefined

4.展開運算符 (...)

展開運算符 (Spread Operator) 是 ES6 引入的重要特性,用三個點 (...) 表示。它可以將可迭代對象(如數組、字符串或對象)"展開"為單個元素。

(1). 數組展開

const arr1 = [1, 2, 3];
const arr2 = [...arr1, 4, 5]; // [1, 2, 3, 4, 5]// 等同于
const arr2 = arr1.concat([4, 5]);

(2). 對象展開 (ES2018)

const obj1 = { a: 1, b: 2 };
const obj2 = { ...obj1, c: 3 }; // { a: 1, b: 2, c: 3 }// 注意:后面的屬性會覆蓋前面的
const obj3 = { ...obj1, b: 99 }; // { a: 1, b: 99 }

注意事項

淺拷貝特性
const nestedObj = { a: { b: 1 } };
const copy = { ...nestedObj };
copy.a.b = 2; // 也會修改原始對象的 a.b

5.解構賦值

解構賦值(Destructuring Assignment)是ES6引入的一種語法,可以讓你從數組或對象中提取數據,并賦值給變量,代碼更簡潔易讀。

(1)數組解構

// 基本解構
const [a, b] = [1, 2];
console.log(a); // 1
console.log(b); // 2// 跳過某些元素
const [first, , third] = [1, 2, 3];
console.log(first); // 1
console.log(third); // 3

(2)對象解構

const person = { name: 'Alice', age: 25 };// 基本解構
const { name, age } = person;
console.log(name); // 'Alice'
console.log(age);  // 25// 不同變量名
const { name: personName, age: personAge } = person;
console.log(personName); // 'Alice'
console.log(personAge);  // 25

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

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

相關文章

GB/T 24507-2020 浸漬紙層壓實木復合地板檢測

浸漬紙層壓實木地板是指以一層或多層專用紙浸漬熱固性氨基樹脂,經干燥后鋪裝在膠合板基材正面,專用紙表面加耐磨層,基材背面可加平衡層,經熱壓、成型的地板。 GB/T 24507-2020 浸漬紙層壓實木復合地板測試項目: 測試項…

AWS DocumentDB vs MongoDB:數據庫的技術抉擇

隨著非關系型數據庫在現代應用中的廣泛應用,文檔型數據庫因其靈活的結構與出色的擴展性,逐漸成為企業開發與架構設計中的核心選擇。在眾多文檔數據庫中,MongoDB 憑借其成熟生態與社區支持占據主導地位;與此同時,AWS 提…

微信小程序實現運動能耗計算

微信小程序實現運動能耗計算 近我做了一個挺有意思的微信小程序,能夠實現運動能耗的計算。只需要輸入性別、年齡、體重、運動時長和運動類型這些信息,就能算出對應的消耗熱量。 具體來說,在小程序里,性別不同,身體基…

三軸地磁傳感器的主要應用場景

隨著材料科學、微電子技術以及傳感器技術的不斷進步,三軸地磁傳感器的性能將不斷提升,包括提高精度、降低功耗、增強抗干擾能力等。 RAMSUN提供的是一款三軸地磁傳感器采用第三代AMR技術,帶有自動溫度補償的三軸磁傳感器,該產品因…

使用 SseEmitter 實現 Spring Boot 后端的流式傳輸和前端的數據接收

1.普通文本消息的發送和接收 GetMapping("/stream")public SseEmitter streamResponse() {SseEmitter emitter new SseEmitter(0L); // 0L 表示永不超時Executors.newSingleThreadExecutor().execute(() -> {try {for (int i 1; i < 5; i) {emitter.send(&q…

nssm配置springboot項目環境,注冊為windows服務

NSSM 的官方下載地址是&#xff1a;NSSM - the Non-Sucking Service Manager1 使用powershell輸入命令,java項目需要手動配置和依賴nacos .\nssm.exe install cyMinio "D:\minio\啟動命令.bat" .\nssm.exe install cyNacos "D:\IdeaProject\capacity\nacos-s…

WinCC學習系列-基礎概念

從本節起&#xff0c;學習和了解西門子最新SCADA軟件WinCC 8.0&#xff0c;將從基礎概念開始&#xff0c;到入門操作&#xff08;創建項目、組態通信、組態過程畫面、組態面板類型和變量結構、歸檔和顯示值、組態消息&#xff09;&#xff0c;到高級應用&#xff08;WinCC選件、…

數據分析圖表類型及其應用場景

說明&#xff1a;頂部HTML文件下載后可以直接查看&#xff0c;帶有示圖。 摘要 數據可視化作為現代數據分析的核心環節&#xff0c;旨在將復雜、抽象的數據轉化為直觀、易懂的圖形形式。這種轉化顯著提升了業務決策能力&#xff0c;優化了銷售與營銷活動&#xff0c;開辟了新…

《江西棒壘球》敗方mvp叫什么·棒球1號位

敗方mvp也是MVP&#xff0c;以棒球運動為例&#xff0c;MLB&#xff08;美國職棒大聯盟&#xff09;的個人獎項旨在表彰球員在不同領域的卓越表現&#xff0c;涵蓋常規賽和季后賽的杰出成就。 常規賽核心獎項 最有價值球員獎&#xff08;MVP&#xff09; 定義&#xff1a;表彰…

CD43.vector模擬實現(2)

目錄 1.拷貝構造函數 寫法1 寫法2 測試代碼 調試找bug 解決方法:修改拷貝構造函數 測試代碼 2.operator[ ] 測試代碼 1.沒有const修飾 2.有const修飾 3.insert 迭代器失效問題 承接CD42.vector模擬實現(1)文章 1.拷貝構造函數 設置start、finish和end_of_storag…

【C/C++】入門grpc的idl

文章目錄 grpc idl 簡單介紹1. 文件結構組織規范文件命名包結構&#xff1a;推薦&#xff1a;一個文件只定義一個 service&#xff0c;如果 service 很復雜&#xff0c;可拆分多個 proto 文件。 2. 消息定義規范命名風格字段編號&#xff1a;示例&#xff1a; 3. 服務與 RPC 設…

安全-JAVA開發-第二天

Web資源訪問的流程 由此可見 客戶訪問JAVA開發的應用時 會先通過 監聽器&#xff08;Listener&#xff09;和 過濾器&#xff08;Filter&#xff09; 今天簡單的了解下這兩個模塊的開發過程 監聽器&#xff08;Listener&#xff09; 主要是監聽 我們觸發了什么行為 并進行反應…

使用 Ansys Q3D 進行電容提取

精確的電容提取在高速和 RF 設計中至關重要。雖然簡單的公式可以提供一個很好的起點&#xff0c;但它們往往無法捕捉 fringing fields 和 layout-dependent parasitics 的影響。在本博客中&#xff0c;我們演示了如何使用Ansys Q3D Extractor來計算電容值&#xff0c;從基本的平…

卡西歐模擬器:Windows端功能強大的計算器

引言 大家還記得初中高中時期用的計算器嗎&#xff1f;今天給大家分享的就是一款windows端的卡西歐計算器。 軟件介紹 大家好&#xff0c;我是逍遙小歡。 CASIO fx-9860G是一款功能強大的圖形計算器&#xff0c;適用于數學、科學和工程計算。以下是其主要功能和特點的詳細介…

【Bluedroid】藍牙啟動之gatt_init 流程源碼解析

本文圍繞Android藍牙協議棧中 GATT(通用屬性配置文件)模塊的初始化函數gatt_init展開,深入解析其核心實現邏輯與關鍵步驟。通過分析gatt_init及其關聯子函數(如L2CA_RegisterFixedChannel、gatt_profile_db_init、EattExtension::Start等),以及相關數據結構(如tGATT_CB控…

Vue 3 中ref 結合ts 獲取 DOM 元素的實踐指南。

文章目錄 前言一、為什么需要為 ref 添加類型&#xff1f;二、基本用法&#xff1a;引用 DOM 元素1. 引用通用 DOM 元素&#xff08;HTMLElement&#xff09;2. 引用特定類型的 DOM 元素&#xff08;如 HTMLDivElement&#xff09; 三、<script setup> 語法中的類型定義四…

Axure形狀類組件圖標庫(共8套)

點擊下載《月下倚樓圖標庫(形狀組件)》 原型效果&#xff1a;https://axhub.im/ax9/02043f78e1b4386f/#g1 摘要 本圖標庫集錦精心匯集了8套專為Axure設計的形狀類圖標資源&#xff0c;旨在為產品經理、UI/UX設計師以及開發人員提供豐富多樣的設計素材&#xff0c;提升原型設計…

01串(二進制串)與集合之間存在天然的對應關系 ← bitset

【集合的二進制表示?】 ● 01 串&#xff08;二進制串&#xff09;與集合之間存在天然的對應關系。對應機理為每個二進制位可以表示集合中一個元素的存在&#xff08;1&#xff09;或不存在&#xff08;0&#xff09;。例如&#xff0c;集合 {a, b, c} 的子集 {a, c} 可以表示…

vba學習系列(10)--外觀報表

系列文章目錄 文章目錄 系列文章目錄前言一、外觀報表1.產能統計2.單板數3.固定傷排查4.件號良率5.鏡片批退率6.鏡筒批退率 總結 前言 一、外觀報表 1.產能統計 Sub ProcessInspectionData()Dim ws1 As Worksheet, ws2 As Worksheet, ws3 As WorksheetDim lastRow1 As Long, …

machine_env_loader must have been assigned before creating ssh child instance

在主機上執行roslaunch命令時&#xff0c;報錯&#xff1a;machine_env_loader must have been assigned before creating ssh child instance。 解決辦法&#xff1a; 打開hostos文件&#xff0c;檢查local host 前的內部ip是否正常。操作示例&#xff1a; 先輸入下方指令打…