91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JavaScript中有哪些魔法運算符

發布時間:2021-05-06 16:20:53 來源:億速云 閱讀:149 作者:Leah 欄目:開發技術

JavaScript中有哪些魔法運算符?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

javascript是一種什么語言

javascript是一種動態類型、弱類型的語言,基于對象和事件驅動并具有相對安全性并廣泛用于客戶端網頁開發的腳本語言,同時也是一種廣泛用于客戶端Web開發的腳本語言。它主要用來給HTML網頁添加動態功能,現在JavaScript也可被用于網絡服務器,如Node.js。

1. 可選鏈運算符

之前當我們想要使用某個結構比較深的屬性,同時又無法確定所有的父級一定存在時,我們需要進行一連串的判斷,例如一個數據結構:

const student = {
  score: {
    math: 98,
  },
};

我們想要獲取最內層的 math 屬性的值時:

if (student && student.score) {
  console.log(student.score.math);
}

1.1 獲取深層次的屬性

不過當我們使用可選鏈運算符后,判斷就簡單很多了,可選鏈運算符會在鏈路上遇到 null 或者 undefined 時,直接返回 undefined,而不會拋出錯誤異常:

console.log(student?.score?.math);

1.2 執行一個可選的方法

同時在執行一個可能存在的函數時,也可以用到。例如一個 react 組件中,傳入的方法是可選的:

// getScore 是一個可選參數,要么是 undefined,要么是一個函數
const Student = ({ getScore }: { getScore?: () => void }) => {
  useEffect(() => {
    // 當 getScore 存在時,正常執行 getScore()方法
    getScore?.();
  }, []);

  return <div></div>;
};

或者我們執行一個 dom 元素的方法時,也可以使用。

document.querySelector 會返回兩種類型,當 dom 元素真實存在時會返回該元素,否則返回 null。寫過 typescript 的都知道,當我們要調用某個方法時,總是要先確定該 dom 元素是存在的:

const dom = document.querySelector('.score');
if (dom) {
  dom.getBoundingClientRect(); // 當 dom 元素存在時,才執行該方法
}

使用可選鏈操作符時,就直接調用即可:

document.querySelector('.score')?.getBoundingClientRect();

1.3 獲取數組中的值

若數組存在,則獲取某個下標的值,我們現在也不用再判斷數組是否存在了,可以直接使用:

arr?.[1]; // 若 arr 存在時,則正常獲取 arr[1]中的值

上面的 3 種情況也是可以組合使用的。若一個結構比較復雜時,各種類型都有,這里我們要執行數組 math 下標 2 的方法:

const student = {
  score: {
    math: [
      98,
      67,
      () => {
        return 99;
      },
    ],
  },
};

執行:

student?.score?.math?.[2]?.(); // 99

還有這種操作?

1.4 無法進行賦值操作

可選鏈運算符只能執行獲取操作,是無法進行賦值操作的。

例如給一個可能的數組或者 dom 元素賦值時,會直接拋出語法異常:

arr?.[1] = 2; // x
document.querySelector('.score')?.innerHTML = 98; // x

當我們執行上面的語句時,會拋出如下的提示:

Uncaught SyntaxError: Invalid left-hand side in assignment

即不能給左側的可選鏈進行賦值操作。

2. 雙問號運算符

雙問號運算符??,我理解是為了解決或運算符||而設計出來的。

我們先來回顧下或運算符的操作,當左側的數據為假值(數字 0, 布爾類型的 false,空字符串,undefined, null)時,則執行右側的語句。

false || 123;
0 || 123;
'' || '123';
undefined || 123;
null || 123;

可是在有些情況下,false 和 0 都是正常的值,但若使用或運算符時,會導致出錯。

比如下面的這個例子,當 score 為空時,則默認值為 1。當輸入正常值 0 時應當返回 0(但實際上返回了 1):

const getSCore = (score: number) => {
  return score || 1;
};

getScore(0); // 1

這時,我們就用到了雙問號運算符??。雙問號運算符只會在左側為 undefined 或者 null 時,才會執行右側的語句。

const getSCore = (score: number) => {
  return score ?? 1;
};

getScore(0); // 0

同時,雙問號運算符還可以與=結合成為一個賦值操作,當左側為 null 或者 undefined 時,則將右側語句的結果賦值給左側的變量:

score ??= 1; // 1

我讀書多,不會騙你

3. 或運算和與運算的賦值操作

我們在之前使用或運算符進行賦值操作時,是這樣寫的:

score = score || 1;
age = age && 24;

現在可以直接簡寫成:

score ||= 1; // 等同于 score = score || 1
age &&= 24; // 等同于 age = age && 24

4. 雙星號運算符

雙星號運算符**是比較早引入到 js 中的,只是我們用到的比較少而已。其實它執行的是一個冪運算,等同于 Math.pow()。

2 ** 10; // 1024, 2的10次方,等同于 Math.pow(2, 10);

關于JavaScript中有哪些魔法運算符問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

聂拉木县| 湘阴县| 墨玉县| 灌南县| 台山市| 汝州市| 玉林市| 乌海市| 砚山县| 扬中市| 沙坪坝区| 广水市| 唐山市| 赤壁市| 饶阳县| 海阳市| 剑河县| 静乐县| 界首市| 类乌齐县| 沁水县| 绥中县| 乾安县| 繁峙县| 迁安市| 巧家县| 祁连县| 贵定县| 上饶县| 栖霞市| 江城| 那曲县| 信阳市| 金华市| 湟中县| 南平市| 乌苏市| 丹阳市| 台山市| 五家渠市| 武夷山市|