JavaScript判空設默認值的幾種寫法

?前端面試題庫 (面試必備)?? ? ? ? ? ?推薦:★★★★★

地址:前端面試題庫

實踐中需要給某個變量賦值時,若數據來源不可控,通常會給它設置一個默認值(就像空對象模式一樣)。JavaScript中有很多語法支持設置這樣的默認值,比如函數參數默認值,解構賦值默認值等。但本文主要討論手動賦值時的3默認值設置方式:

  1. 使用條件判斷設置默認值,如:let result = input || {}
  2. 使用空判斷運算符,如:let result = input ?? {}
  3. 配合typeof判斷類型設置默認值,如:let result = typeof(input) !== 'undefined' ? input : {}

?

||運算符

??這種形式主要利用了?Boolean()?類型轉換以及?||?運算符的短路特性,其也可改寫成三目運算符(?:)或If-else語句形式;受布爾類型轉換限制,所有的?假值都會被認為未賦值。

// 當 input 為:undefined、null、''、0、NaN、false 時會被忽略
let input;
// 即 result 值不會為:undefined、null、''、0、NaN、false
let result;result = input || {};// 變體(1):三目運算符形式
result = input ? input : {};
// 變體(2):If-else 語句
if(input) {result = input;
} else {result = {};
}// 若只涉及一個變量,還可簡寫
obj ||= {};

??運算符

??由于?||?會忽略所有假值,TC39在ES2020的提案里提出????運算符,僅當左側運算數為?null?或?undefined?時,才會計算右側表達式。多配合??.?可選鏈式運算符一起使用。

// 當 input 為:undefined、null 時會被忽略
let input;
// 即 result 值不會為:undefined、null;可以是:''、0、NaN、false
let result;result = input ?? {}; // 若只涉及一個變量,還可簡寫
obj ??= {};

typeof運算符

??還有場景,只有在輸入為?undefined?時才認為是無效輸入,即?null?被認為是有效輸入。此時可使用?typeof?運算符判斷輸入類型是否為?undefined?來區分;若已明確輸入變量已經聲明,則可將變量和?undefined?比較,通過其是否相等來判斷。

// 當 input 為:undefined 時會被忽略
let input;
// 即 result 值不會為:undefined;可以是:null、''、0、NaN、false
let result;result = (typeof(input) !== 'undefined') ? input : {};// 變體:直接和 undefined 判斷,需注意若input未聲明會報錯
result = (input !== undefined) ? input : {};

總結

??在面向對象編程過程中,大多場景變量是引用對象的,這些情況下????配合??.?會更符合現代編程語言的寫法,也是官方推薦使用的。

const EMPTY_WALLET = {money: 0
}function consume(user = null, goods = null) {if (null === (goods?.price ?? null)) {return false;}let wallet = user?.info?.wallet ?? EMPTY_WALLET;if (wallet.money < goods.price) {return false;}wallet.money -= goods.price;return true;
}

前端面試題庫 (面試必備)?? ? ? ? ? ?推薦:★★★★★

地址:前端面試題庫

?

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

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

相關文章

python編程中有哪些方便的調試方法

大家好&#xff0c;給大家分享一下一個有趣的事情&#xff0c;很多人還不知道這一點。下面詳細解釋一下。現在讓我們來看看&#xff01; 對于每個程序開發者來說&#xff0c;調試幾乎是必備技能。常用Pycharm編輯器里的方法有Print大法、log大法&#xff0c;但缺少類似Matlab的…

敏感掛載binfmt_misc容器逃逸復現和分析

前言 對于/proc下有很多掛載會導致容器逃逸&#xff0c;其中binfmt_misc就是一種可以利用的逃逸掛載 binfmt_mics 實驗 touch test_fmt_intp echo aaa > test_fmt echo #!/bin/sh > test_fmt_intp echo >> test_fmt_intp chmod x test_fmt_intp echo :test_fmt…

怎么開通Tik Tok海外娛樂公會呢?

TikTok作為全球知名的社交媒體平臺&#xff0c;吸引了數億用戶的關注和參與。許多公司和個人渴望通過開通TikTok直播公會進入這一領域&#xff0c;以展示自己的創造力和吸引更多粉絲。然而&#xff0c;成為TikTok直播公會并非易事&#xff0c;需要滿足一定的門檻和申請找cmxyci…

【日常積累】Linux之init系統學習

init系統簡介: Linux 操作系統的啟動首先從 BIOS 開始&#xff0c;接下來進入 boot loader&#xff0c;由 bootloader 載入內核&#xff0c;進行內核初始化。內核初始化的最后一步就是啟動 pid 為 1 的 init 進程&#xff0c;這個進程是系統的第一個進程&#xff0c;它負責產生…

銀河麒麟服務器v10 sp1 .Net6.0 上傳文件錯誤

上一篇&#xff1a;銀河麒麟服務器v10 sp1 部署.Net6.0 http https_csdn_aspnet的博客-CSDN博客 .NET 6之前&#xff0c;在Linux服務器上安裝 libgdiplus 即可解決&#xff0c;libgdiplus是System.Drawing.Common原生端跨平臺實現的主要提供者&#xff0c;是開源mono項目。地址…

封裝form表單

目錄 1. 源碼 2. 其他頁面引用 ps&#xff1a;請看完看明白再復用 1. 源碼 <template><div style"width: 100%; height: 100%" class"form-condition"><!-- 普通表單 --><el-card shadow"hover" class"cardheigh…

AQS的原理及應用

文章目錄 AQS引言AQS 的原理AQS 應用舉例1:Semaphore舉例2:ReentrantLockAQS 的案例分析問題背景解決方案AQS 引言 在我們的日常生活和工作中,往往需要協調各個線程之間的執行順序和資源使用,而AQS(AbstractQueuedSynchronizer)即為 Java 并發包中提供的一種解決辦法。…

ubuntu 部署 ChatGLM-6B 完整流程 模型量化 Nvidia

ubuntu 部署 ChatGLM-6B 完整流程 模型量化 Nvidia 初環境與設備環境準備克隆模型代碼部署 ChatGLM-6B完整代碼 ChatGLM-6B 是一個開源的、支持中英雙語的對話語言模型&#xff0c;基于 General Language Model (GLM) 架構&#xff0c;具有 62 億參數。結合模型量化技術&#x…

力扣 322. 零錢兌換

題目來源&#xff1a;https://leetcode.cn/problems/coin-change/description/ C題解&#xff08;來源代碼隨想錄&#xff09;&#xff1a;題目中說每種硬幣的數量是無限的&#xff0c;可以看出是典型的完全背包問題。動規五部曲分析如下&#xff1a; 確定dp數組以及下標的含義…

深入理解設計模式-創建型之建造者模式(與工廠區別)

什么是建造者設計模式&#xff1f;和工廠設計模式有什么區別 建造者設計模式&#xff08;Builder Design Pattern&#xff09;和工廠設計模式&#xff08;Factory Design Pattern&#xff09;都是面向對象設計中的創建型模式&#xff0c;但它們解決的問題和應用場景有所不同。…

原碼、反碼、補碼,進制轉換,有符號數和無符號數轉換

計算機底層存儲數據時&#xff0c;存儲的是數據對應的二進制數字。對于整型數據&#xff0c;其二進制表示形式有三種&#xff0c;分別是&#xff1a;原碼、反碼、補碼&#xff0c;而實際存儲的是整型數據的補碼。 原碼、反碼以及補碼都是有符號的&#xff0c;其中最高位存放符…

帶你掌握Stable Diffution商業級玩法

課程介紹 學習地址 《Stable Diffusion商業級玩法》通過詳細講解AI繪畫技巧、實操演示和個性化指導&#xff0c;幫助您從零基礎成為繪畫高手&#xff0c;幫助您有效推廣產品或服務&#xff0c;提升市場份額。教您掌握穩定擴散繪畫技巧&#xff0c;開啟藝術創作新篇章。

Opencv 之ORB特征提取與匹配API簡介及使用例程

Opencv 之ORB特征提取與匹配API簡介及使用例程 ORB因其速度較快常被用于視覺SLAM中的位姿估計、視覺里程、圖像處理中的特征提取與匹配及圖像拼接等領域本文將詳細給出使用例程及實現效果展示 1. API 簡介 創建 static Ptr<ORB> cv::ORB::create (int nfeatures 500…

無涯教程-Perl - use函數

描述 此函數將MODULE導出的所有功能(或僅LIST引用的功能)導入當前包的名稱空間。有效等效于- BEGIN { require "Module.pm"; Module->import(); }也用于在當前腳本上強加編譯器指令(編譯指示),盡管從本質上講它們只是模塊。 請注意,use語句在編譯時進行判斷。在…

springcloud3 hystrix實現服務熔斷的案例配置3

一 hystrix的熔斷原理 1.1 hystrix的熔斷原理 在springcloud的框架里&#xff0c;熔斷機制是通過hystrix實現&#xff0c;hystrix會監控服務之間的調用。當失敗調用達到一定的閾值&#xff0c;默認是5s內失敗20次&#xff0c;就會啟用hystrix的熔斷機制&#xff0c;使用命Hy…

神經網絡基礎-神經網絡補充概念-44-minibatch梯度下降法

概念 小批量梯度下降法&#xff08;Mini-Batch Gradient Descent&#xff09;是梯度下降法的一種變體&#xff0c;它結合了批量梯度下降&#xff08;Batch Gradient Descent&#xff09;和隨機梯度下降&#xff08;Stochastic Gradient Descent&#xff09;的優點。在小批量梯…

Apache Doris大規模數據使用指南

目錄 發展歷史 架構介紹 彈性MPP架構-極簡架構 邏輯架構 基本訪問架構 分區 創建單分區表

【C++ 記憶站】缺省參數

文章目錄 缺省參數的概念缺省參數的分類1、全缺省參數2、半缺省參數 缺省參數實際應用場景 缺省參數的概念 缺省參數是聲明或定義函數時為函數的參數指定一個缺省值。在調用該函數時&#xff0c;如果沒有指定實參則采用該形參的缺省值&#xff0c;否則使用指定的實參 正常調用一…

音頻解碼及如何在Java實現

本人并不干這個&#xff0c;但是被迫下水了解了一下這個&#xff0c;稍微做了一下整理。再就是感覺現在網上以及ChatGPT在這方面給出的答案太水了&#xff0c;在此開辟一篇。無意放出代碼&#xff0c;這里只介紹一些可能重要的點。 本來以為有了ChatGPT寫這些就沒有必要了&…

Docker部署ES服務,canal全量同步的時候內存爆炸,ES/Canal Adapter自動關閉,CPU100%

文章目錄 問題解決方案1. 對ES的限制2. 對Canal-Adapter的限制 問題 使用canal-adapter全量同步&#xff08;參考Canal Adapter1.1.5版本API操作服務&#xff0c;手動同步數據&#xff08;4&#xff09;&#xff09;的時候 小批量數據可以正常運行&#xff08;幾千條&#xf…