精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

前端問答:JavaScript 中的 "??" 和 "||" 有啥不同

開發
一開始看,??(空值合并運算符)和 ||(邏輯或運算符)似乎都能達到相同的效果,但其實它們背后的邏輯完全不同,適用的場景也不一樣。今天我們就來聊聊這兩者的區別,幫你快速上手,避免掉坑!

在 JavaScript 開發中,很多小伙伴都會遇到一個場景,就是要給變量設置一個默認值,比如當變量沒有有效值時,使用一個備用值。這個時候,可能有兩個操作符會讓你感到困惑:??(空值合并運算符)和 ||(邏輯或運算符)。一開始看,它們似乎都能達到相同的效果,但其實它們背后的邏輯完全不同,適用的場景也不一樣。今天我們就來聊聊這兩者的區別,幫你快速上手,避免掉坑!

一、"||" 是怎么工作的?—— 就像找備胎一樣!

|| 就好像是在說:“如果這個不行,就換另一個。”它的具體作用是檢查左邊的值(第一個計劃),如果左邊這個值是 “假”(也就是不靠譜、不能用的意思),它就會去看右邊的值(第二個計劃),并返回右邊的值。

舉個例子來理解一下:

let result = value1 || value2;

這段代碼就是在說:“如果 value1 能用,就用 value1;如果 value1 不行,那就用 value2 吧!”那問題來了,什么情況下 value1 會不行呢?

1. 什么是 "假值"?

在 JavaScript 里,有一些特殊的值會被認為是“假”的,像這些:

  • false(假)
  • 0(零)
  • ""(空字符串)
  • null(表示空)
  • undefined(未定義)
  • NaN(非數字)

這些值都被認為是不能用的“假值”。如果你遇到這些值,|| 操作符就會幫你返回后面的備用計劃。

2. 舉個栗子??:

let username = "" || "游客"; // 返回 "游客"
let score = 0 || 10;          // 返回 10

在上面的例子里,""(空字符串)和 0 都是“假值”,所以 JavaScript 會忽略它們,直接選擇后面的“游客”和 10 作為返回值。

3. 那什么時候用 "||" 呢?

|| 的最佳使用場景就是當你不確定一個值是否靠譜的時候,你可以為它準備一個備用值。就像生活中你遇到的兩手準備:如果第一種方案失敗了,立刻執行第二種。

比如你想讓用戶輸入他們的名字,但如果用戶沒有輸入名字,你就讓系統自動叫他們“游客”。用 || 來實現這個需求簡直再好不過了:

function greetUser(name) {
  let username = name || "游客";
  console.log(`你好, ${username}!`);
}

greetUser("");  // 輸出: 你好, 游客!
greetUser("Alice");  // 輸出: 你好, Alice!

在這個例子里,如果用戶沒有輸入名字(比如空字符串 ""),我們就用 || 返回一個默認值“游客”。但如果用戶輸入了名字(比如 “Alice”),我們就用這個名字打招呼。

二、JavaScript 中的"??"操作符:只關心空值,別搞混了!

JavaScript 里的??(空值合并運算符)看起來和我們之前聊過的||有點像,但它其實更“挑剔”!如果說||是遇到假值就找備胎,那么??只會在 null 和 undefined 出現時才出手救場。今天咱們就來深入了解一下這個 ECMAScript 2020 (ES11) 中的新工具。

1. "??" 是怎么工作的?—— 只處理“真正”的空值

?? 操作符的工作方式是:當左邊的值是 null 或 undefined 時,才返回右邊的備用值。像 0、false、"" 這些“假值”,在??眼里都是 有效值,它們不會觸發備用計劃。

語法很簡單:

let result = value1 ?? value2;

意思是:如果 value1 是 null 或 undefined,那就返回 value2;否則就直接用 value1。

2. 舉個例子??:

let username = "" ?? "游客"; // 返回 ""
let score = 0 ?? 10;          // 返回 0

在這兩個例子中,空字符串 "" 和 0 雖然是“假值”,但因為它們不是 null 或 undefined,?? 不會認為它們無效,所以直接返回它們本身。這樣就避免了 || 操作符那種“誤判”的情況——如果你真的想用 0 或 "" 作為有效值,?? 就非常合適。

3. 什么時候用"??"?

?? 非常適合在你 只想處理null或undefined 的場景下使用。比方說,你希望某個變量可以是 0 或 false 這樣的值,而不想讓它們觸發默認值。來看個小例子:

function getScore(score) {
  return score ?? 10;
}

console.log(getScore(0));    // 輸出: 0
console.log(getScore(null)); // 輸出: 10

在這個例子里,score 可以是 0,也可以是 null。如果傳入 0,?? 不會把它當成空值,而是直接返回 0。但如果 score 是 null,它就會返回默認值 10。這種行為對于某些場景非常有用,比如分數為 0 的時候你不希望它被誤當成無效值。

三、?? 和 || 的關鍵區別:用錯容易踩坑哦!

在 JavaScript 里,??(空值合并運算符)和 ||(邏輯或運算符)都是用來設置默認值的利器,初學者可能覺得它們差不多,但其實它們的行為有很大不同。為了避免代碼里的坑,我們必須清楚兩者的使用場景和差異。

1. "Falsy" vs. "Nullish":誰才是真的空?

||:它的邏輯是,遇到任何“假值”(falsy)就會返回備用值。這些“假值”包括:

  • false
  • 0
  • ""(空字符串)
  • null
  • undefined
  • NaN(非數字)

只要值是這些“假值”,|| 就會觸發備用值。

??:相比之下,?? 只關注 null 和undefined。也就是說,像 0、false 和 "" 這些雖然看似“假”的值,但在 ?? 眼中是有效的,不會觸發備用值。

2. 使用場景:該選誰?

  • 使用 ||:當你想對所有“假值”都提供一個備用方案時,比如 false、0 或空字符串。這種情況下,|| 是你最好的選擇。
  • 使用 ??:如果你只想處理 null 和 undefined,而對 0、false 這些值保留,那么 ?? 更適合你。

3. 舉例對比:看代碼更直觀

let value1 = 0 || 5;    // value1 是 5
let value2 = 0 ?? 5;    // value2 是 0

let value3 = null || "默認值";  // value3 是 "默認值"
let value4 = null ?? "默認值";  // value4 是 "默認值"

在第一個例子中,value1 變成了 5,因為 0 被 || 認為是“假值”。而在 ?? 的情況下,value2 保持為 0,因為 0 并不是 null 或 undefined,所以不會觸發備用值。

第二個例子里,null 在兩種操作符中都觸發了備用值,結果一樣。

4. 潛在的 Bug:小心別踩坑!

誤用 || 會導致一些你沒料到的問題,特別是當 0、false 或 "" 是有效值時。來看個例子:

function getDiscountedPrice(price) {
  return price || 100;  // 這里會返回 100,即使 price 是 0
}

console.log(getDiscountedPrice(0));  // 輸出: 100(錯誤)

這里的邏輯會導致問題,因為 0 是一個有效的價格,但由于 || 把它當作“假值”,最終返回了備用值 100。解決方案就是用 ??,這樣 0 就不會被誤判了:

function getDiscountedPrice(price) {
  return price ?? 100;  // 這里會正確返回 0
}

console.log(getDiscountedPrice(0));  // 輸出: 0(正確)

5. 短路求值:誰先說了算?

|| 和 ?? 都使用了 短路求值,意思是如果左邊的值能決定結果,右邊的值就不會被計算。但兩者的判斷標準不同——|| 會在遇到任意“假值”時短路,而 ?? 只會在 null 或 undefined 時短路。

6.總結:怎么選?

  • 如果你需要處理所有的“假值”(包括 0、false、""),就用 ||。
  • 如果你只關心 null 和 undefined,而 0、false 這些值也是有效輸入,那就用 ??。

四、結合 || 和 ??:多重保險,讓代碼更健壯!

有時候,你可能會遇到更復雜的場景,既要處理 null 和 undefined,又需要對其他“假值”如 0、false、"" 做特殊處理。這種情況下,我們可以把 || 和 ?? 結合起來,打造一個更加全面的“多重保險”邏輯。

1. 為什么要同時用 || 和 ???

?? 負責處理 null 和 **undefined**,而 || 可以處理 所有“假值”(如 0、false、空字符串等)。有些情況下,你可能希望 null 和 undefined 返回默認值,而對于其他“假值”則使用不同的邏輯處理。

來看個例子:

let result = (value ?? defaultValue) || fallbackValue;

在這段代碼中,我們做了兩步處理:

  • value ?? defaultValue:首先,?? 檢查 value 是否為 null 或 undefined。如果是,那么返回 defaultValue;如果不是,則直接返回 value。
  • || fallbackValue:接下來,結果再經過 ||,如果這個結果是“假值”(例如 0、false、空字符串等),就返回 fallbackValue。

2. 舉個栗子

假設你在處理一個分數系統,null 或 undefined 的時候要用默認分數,但同時如果分數是 0 也不能直接忽略,需要特殊處理。我們可以這樣寫:

function getFinalScore(score) {
  return (score ?? 50) || "分數無效";
}

console.log(getFinalScore(null));  // 輸出: 50(null 被 `??` 處理)
console.log(getFinalScore(0));     // 輸出: "分數無效"(0 被 `||` 處理)
console.log(getFinalScore(80));    // 輸出: 80(有效分數)
  • null 的情況:score 是 null 時,?? 返回默認值 50,|| 不會再觸發。
  • 0 的情況:score 是 0 時,?? 不起作用,|| 將 0 視為“假值”,返回 "分數無效"。
  • 有效分數的情況:score 是 80 時,直接返回 80。

3. 什么時候使用這種組合?

這種組合特別適合需要處理復雜邏輯的場景,比如:

  • null 或 undefined 的時候,返回一個默認值;
  • 其他“假值”(如 0、false)也需要單獨處理,避免被誤認為無效。

結束

在 JavaScript 開發中,?? 和 || 絕對是處理默認值的利器,雖然它們看上去很像,但實際應用中卻有明顯區別。|| 會把很多值當作“假值”,包括 0、false、空字符串等;而 ?? 只關心 null 和 undefined。因此,合理選擇這兩個運算符,能讓你避免不必要的 Bug,尤其是在處理特殊值的時候。

責任編輯:趙寧寧 來源: 前端達人
相關推薦

2010-08-17 15:21:17

IEFirefoxHTML

2019-10-22 11:12:46

臺式機筆記本顯卡

2021-12-06 15:35:01

CSS前端開發

2024-05-11 08:20:23

2021-01-07 14:20:55

JavaGC

2010-09-10 10:20:51

DIVSpan

2013-02-28 20:28:19

Office 365Office 201微軟

2020-08-02 23:20:36

JavaScriptmap()forEach()

2021-11-16 07:52:24

前端技術編程

2017-01-13 16:26:56

開發

2023-10-12 07:35:45

面試線程通信

2022-09-23 10:25:00

VueReact

2020-10-19 13:03:16

Java 8接口抽象類

2023-01-06 10:52:30

SQL索引存儲

2022-01-17 10:07:05

PodmanDocker容器

2025-09-08 00:17:05

2015-01-19 13:33:44

KubernetesMesos計算集群

2025-05-08 09:10:00

2010-12-23 13:56:55

SharePointIntranet

2021-04-19 09:27:03

Java線程操作系統
點贊
收藏

51CTO技術棧公眾號

国产精品高潮呻吟久久| 欧美一级精品片在线看| 亚洲va欧美va天堂v国产综合| caoporn国产精品免费公开| 久久久久99精品成人片毛片| 一区二区三区视频播放| 欧美日韩国产在线播放| 亚洲五月六月| 全国男人的天堂网| 日本欧美在线观看| 欧美疯狂xxxx大交乱88av| 在线免费观看黄色小视频| 激情亚洲小说| 亚洲成人av电影| 中文一区一区三区免费| 亚洲黄色在线免费观看| 青青草91视频| 97久久精品国产| 91插插插插插插| 国产a久久精品一区二区三区| 日韩午夜在线影院| 成人在线激情网| 久久免费电影| 欧美国产日韩a欧美在线观看| 成人在线看片| 96亚洲精品久久久蜜桃| 免费看的黄色欧美网站| 欧美富婆性猛交| 林心如三级全黄裸体| 丝袜美腿综合| 亚洲精品在线免费播放| 午夜精品久久久久久久99热影院| 中文字幕在线免费观看视频| 亚洲自拍偷拍欧美| 亚洲一区精彩视频| 国产在线一二三区| 成人国产视频在线观看| 91视频网页| 亚洲天堂一二三| 久久久久久穴| 欧美诱惑福利视频| 成人免费看片98| 亚洲电影在线一区二区三区| 在线观看精品国产视频| 天堂久久精品忘忧草| 99精品在免费线中文字幕网站一区| 欧美日韩成人在线| 国产成人黄色网址| 国产亚洲一区二区手机在线观看| 精品国产电影一区| 日日摸日日碰夜夜爽无码| 怡红院av在线| 亚洲香肠在线观看| 男人添女荫道口女人有什么感觉| h片在线免费| 亚洲欧美日本在线| 日本丰满大乳奶| av在线免费网站| 一区二区在线观看视频在线观看| 正在播放国产精品| 国产区在线看| 一级日本不卡的影视| 欧美激情亚洲天堂| 都市激情久久综合| 婷婷夜色潮精品综合在线| 高清在线观看免费| **欧美日韩在线观看| 欧美影院一区二区| 中文字幕线观看| 精品精品视频| 精品福利一区二区三区免费视频| 88av在线播放| 免费视频一区三区| 综合欧美国产视频二区| 91高清免费观看| 黑丝一区二区三区| 5566日本婷婷色中文字幕97| 国产成人麻豆免费观看| 麻豆精品一二三| 亚洲xxx视频| 少妇精品高潮欲妇又嫩中文字幕 | 国产精品久久不能| 国产一区二区三区中文字幕| 国产成人亚洲综合a∨猫咪| 国产免费一区二区| 成人av电影观看| 亚洲精品国产精华液| 无码 制服 丝袜 国产 另类| 欧美无毛视频| 这里只有精品电影| 免费成人蒂法网站| 欧美xxav| 国外成人在线直播| 伊人网中文字幕| 成+人+亚洲+综合天堂| 奇米精品在线| 午夜成年人在线免费视频| 欧美日韩国产区| 少妇一级淫免费放| 国产成人精品福利| 中文亚洲视频在线| 中日韩精品视频在线观看| 日本sm残虐另类| 国产精品日韩一区二区三区 | 欧美国产乱子伦| 国产一线二线三线女| 51一区二区三区| 亚洲第一av在线| 三上悠亚在线观看视频| 国产毛片一区| av色综合网| av网站在线播放| 黑人精品xxx一区一二区| 亚洲精品永久视频| 国产精品一在线观看| 欧美精品videosex牲欧美| 亚洲天堂aaa| 国产蜜臀av在线一区二区三区| 久久精品xxx| 9999在线精品视频| 亚洲午夜av久久乱码| 久久精品国产亚洲AV无码麻豆 | 4438x全国最大成人| 成人av二区| 日韩免费av片在线观看| 欧美一区二区三区激情| 一区二区三区中文在线观看| 午夜久久久精品| 欧美色爱综合| 国产suv精品一区二区| 污视频软件在线观看| 亚洲欧美一区二区三区极速播放| wwwwww.色| 久久99国产精品视频| 7777免费精品视频| 黄色片一区二区| 一区二区三区四区视频精品免费 | 国产精品丝袜久久久久久app| 国产女大学生av| 精品av导航| 久久人人看视频| 性猛交xxxx乱大交孕妇印度| 日韩美女视频一区| 欧美在线a视频| 久久精品青草| 91免费视频网站| 超碰超碰在线| 日韩免费一区二区| 久草网视频在线观看| 国产成人自拍高清视频在线免费播放| 91社在线播放| 日韩av综合| 欧美激情性做爰免费视频| 午夜精品久久久久久久爽 | 一级片视频网站| 亚洲欧洲精品一区二区精品久久久 | 30一40一50老女人毛片| 午夜在线观看免费一区| 欧美二区在线看| 巨胸喷奶水www久久久免费动漫| 亚洲精品中文字| 中文字幕理论片| 亚洲色欲色欲www在线观看| 精品国产午夜福利在线观看| av在线免费观看国产| 91视频亚洲| 久久av红桃一区二区小说| 香蕉久久夜色| 成人性生活av| 在线观看亚洲视频| 国产又黄又大又爽| 一区二区三区欧美| 2一3sex性hd| 久久久精品性| 一区二区视频在线观看| 欧州一区二区三区| 91精品国产高清自在线| 久久久久久久久亚洲精品| 91久久香蕉国产日韩欧美9色| fc2ppv在线播放| 成人免费视频caoporn| 欧美性久久久久| 日韩理论电影院| 91精品久久久久久蜜桃| 嗯~啊~轻一点视频日本在线观看| 精品伊人久久97| 91精品视频免费在线观看| 亚洲一区二区偷拍精品| 成人在线一级片| 国产一区不卡精品| www黄色av| 欧美黄免费看| 日本一区二区精品| 色妞ww精品视频7777| 国产z一区二区三区| 成人video亚洲精品| 日韩精品中文字幕在线播放| 夜夜爽8888| 黄色一区二区在线观看| 2014亚洲天堂| 91视频免费看| 国产不卡的av| **亚洲第一综合导航网站| 四川一级毛毛片| 国产欧美综合一区二区三区| 无遮挡亚洲一区| 国产乱论精品| 91免费精品视频| 91精品影视| 久久久久久久久久久网站| 91欧美在线视频| 日韩国产在线看| 国产成人精品一区二三区四区五区| 日韩人体视频一二区| 久草视频在线资源| 亚洲色图视频网站| 欧美三级视频网站| 91在线码无精品| 久久久久亚洲av无码网站| 美女视频黄免费的久久 | 91高清在线| 国产视频久久久久久久| 亚洲狼人综合网| 3d动漫精品啪啪1区2区免费| 无码任你躁久久久久久久| 亚洲一二三四久久| 成人免费视频网站入口::| 国产精品每日更新在线播放网址| 国产成人无码一区二区在线观看| 国产成人在线视频播放| 911av视频| 久久99国产精品久久| 五月婷婷激情久久| 日本不卡高清视频| 五月婷婷深爱五月| 日韩av一区二| 成人免费视频久久| 久久一区二区三区超碰国产精品| 精品久久一二三| 一区二区日韩免费看| 免费av观看网址| 99热免费精品在线观看| 欧美视频在线观看网站| 亚洲高清免费| 黄色国产一级视频| 久久精品日韩欧美| 日韩精品一区二区三区不卡| 国产亚洲一区在线| 成年人在线看片| 日本美女一区二区三区视频| 91国产精品视频在线观看| 久久99久久99| 99999精品| 高清日韩电视剧大全免费| 扒开伸进免费视频| av午夜精品一区二区三区| 日本xxxx裸体xxxx| 久久精品欧美日韩精品 | 亚洲在线观看免费视频| 久久亚洲精品大全| 性做久久久久久久免费看| 久久久久久久黄色片| 色999日韩国产欧美一区二区| 在线观看亚洲黄色| 日韩在线观看第一页| 欧美性少妇18aaaa视频| 色嗨嗨av一区二区三区| 黄网站免费在线| 午夜精品久久久久久久久久| 日韩免费av片| 国产一区视频免费观看| 婷婷综合网站| 免费观看亚洲视频| 亚洲国产精品一区制服丝袜| 黄色网页免费在线观看| 久久激情网站| 老司机午夜性大片| 国产盗摄视频一区二区三区| 亚洲精品乱码久久久久久蜜桃图片| 99在线热播精品免费| 免费在线观看污| 亚洲欧洲综合另类在线| 精品美女久久久久| 欧美日韩国产首页在线观看| www.色日本| 亚洲图中文字幕| 四季久久免费一区二区三区四区| 97热精品视频官网| 日日夜夜一区| 久久爱av电影| 91精品二区| 青青在线视频观看| 激情综合色丁香一区二区| 国产黄色三级网站| 国产精品久久久久久久久免费桃花| 久久久久久天堂| 欧美影院一区二区三区| 人妻视频一区二区三区| 中文字幕在线看视频国产欧美| 免费电影网站在线视频观看福利| 国产91色在线| 粉嫩久久久久久久极品| 日韩电影免费观看在| 欧美日韩1区2区3区| 韩国视频一区二区三区| 99久久久无码国产精品| 国产性xxxx| 欧美午夜精品一区二区三区| 日本精品久久久久| 精品中文字幕在线2019| 成人18视频在线观看| 精品国产乱码久久久久软件| 羞羞答答成人影院www| 激情综合网俺也去| 成人福利视频在线看| 一区二区三区影视| 欧美影院一区二区三区| 嫩草在线播放| 992tv在线成人免费观看| 免费精品一区二区三区在线观看| 日韩精品极品视频在线观看免费| 在线日韩av| 国产性猛交96| 一区av在线播放| 国产黄a三级三级三级| y97精品国产97久久久久久| 3d欧美精品动漫xxxx无尽| 精品婷婷色一区二区三区蜜桃| 国产精品v欧美精品v日本精品动漫| 午夜精品免费看| 国产精品毛片高清在线完整版| 一二三区免费视频| 亚洲国产中文字幕久久网| 欧美6一10sex性hd| 成人女人免费毛片| 欧美日韩视频一区二区三区| 手机在线免费毛片| 亚洲视频资源在线| 国产日韩精品suv| 久久久精品在线| 国产精品一区免费在线 | 久久久久久久久久毛片| 国产精品福利一区二区| 一二三区中文字幕| 色久欧美在线视频观看| 日韩精品第二页| 午夜啪啪免费视频| 国产精品自拍毛片| 麻豆亚洲av成人无码久久精品| 日韩欧美一区二区免费| 日本天码aⅴ片在线电影网站| av蓝导航精品导航| 9国产精品视频| 90岁老太婆乱淫| 欧美视频一区二| www久久日com| 国产伦视频一区二区三区| 国产欧美不卡| 免费看黄色三级| 制服.丝袜.亚洲.另类.中文 | 欧美中文在线观看| 国产在视频线精品视频www666| 国产精品久久久久9999小说| 中文av一区二区| 国产高清精品软件丝瓜软件| 久久久久久成人精品| 亚洲警察之高压线| 亚洲精品一二三四五区| 国产精品短视频| 成人毛片视频免费看| 欧美亚洲视频在线观看| 欧美中文一区二区| 黄色片子免费看| 欧美日韩裸体免费视频| 97最新国自产拍视频在线完整在线看| 成人在线小视频| 亚洲日产国产精品| 久久久精品成人| 欧美mv日韩mv国产| 亚洲综合在线电影| 欧美性受xxxx黑人猛交88| 成人成人成人在线视频| 欧美一级黄视频| 欧美极品欧美精品欧美视频 | 潘金莲一级淫片aaaaaa播放| 综合网日日天干夜夜久久| 91蜜桃臀久久一区二区| 黑鬼大战白妞高潮喷白浆| 亚洲人成小说网站色在线 | 丁香综合av| 欧美成人福利在线观看| 亚洲成人综合视频| 最新97超碰在线| 国产日韩精品推荐| 老司机一区二区| 欧美日韩乱国产| 不卡av电影院| 欧美一区电影| 欧美熟妇精品黑人巨大一二三区| 3d动漫精品啪啪一区二区竹菊|