詳解JavaScript中常用操作符的使用
在 JavaScript 中,有一些操作符可以使代碼更簡(jiǎn)潔、易讀和高效。以下是一些常見(jiàn)的操作符:
1、可選鏈操作符(optional chaining operator)
?.
是可選鏈操作符(optional chaining operator)。?.
可選鏈操作符用于訪問(wèn)可能為空或未定義的屬性或方法,它允許我們安全地訪問(wèn)嵌套對(duì)象的屬性,如果中間的屬性為空或未定義,則不會(huì)拋出錯(cuò)誤,而是返回 undefined。例如:
const obj = { foo: { bar: 123 } }; // 普通訪問(wèn)屬性的方式 const x = obj.foo.bar; // x = 123 // 使用可選鏈操作符 const y = obj?.foo?.bar; // y = 123 // 如果對(duì)象未定義,則返回 undefined const z = undefined?.foo?.bar; // z = undefined
2、空值合并操作符(nullish coalescing operator)
??
是空值合并操作符(nullish coalescing operator)。??
空值合并操作符用于檢查一個(gè)變量是否為 null 或 undefined,如果是,則返回一個(gè)默認(rèn)值,否則返回該變量的值。與傳統(tǒng)的邏輯運(yùn)算符 ||
不同,??
只會(huì)在左側(cè)的值為 null 或 undefined 時(shí)返回右側(cè)的默認(rèn)值,對(duì)于其他假值(如空字符串、0、false 等)并不會(huì)返回默認(rèn)值,而是會(huì)返回它本身。例如:
const x = undefined ?? 'default'; // x = 'default' const y = null ?? 'default'; // y = 'default' const z = 'value' ?? 'default'; // z = 'value' const a = '' ?? 'default'; // a = '' const b = '' || 'default'; // b = 'default'
需要注意的是,??
操作符需要在 ES11 及以上的版本才能使用。
3、箭頭函數(shù)(Arrow Function)
使用箭頭(=>)可以更簡(jiǎn)潔地定義函數(shù)。例如:
const add = (a, b) => a + b; console.log(add(1, 2)); // 3
const obj = { x: 1, add(y) { return this.x + y; }, double: () => this.x * 2, }; console.log(obj.add(2)); // 3 console.log(obj.double()); // NaN
注意,箭頭函數(shù)中的 this 指向的是定義時(shí)的上下文,而不是調(diào)用時(shí)的上下文。
4、模板字面量(Template Literals)
使用反引號(hào)(`)可以定義包含變量、表達(dá)式和換行符的字符串。例如:
const name = "Alice"; const age = 20; console.log(`My name is ${name}, and I am ${age} years old.`); // 'My name is Alice, and I am 20 years old.'
5、展開(kāi)操作符(Spread Operator)
使用三個(gè)點(diǎn)(...)可以將數(shù)組或?qū)ο笳归_(kāi)為一個(gè)列表或多個(gè)參數(shù)。例如:
const arr1 = [1, 2, 3]; const arr2 = [4, 5, 6]; const arr3 = [...arr1, ...arr2]; console.log(arr3); // [1, 2, 3, 4, 5, 6] const obj1 = { x: 1, y: 2 }; const obj2 = { z: 3 }; const obj3 = { ...obj1, ...obj2 }; console.log(obj3); // { x: 1, y: 2, z: 3 }
6、短路求值(Short-circuit Evaluation)
使用邏輯運(yùn)算符&&
和||
可以進(jìn)行短路求值,簡(jiǎn)化條件分支的寫法。例如:
const obj = { prop: "value" }; const propValue = obj.prop || "default"; console.log(propValue); // 'value' const arr = []; const firstValue = arr[0] && arr[0].prop; console.log(firstValue); // undefined
7、簡(jiǎn)寫的條件語(yǔ)句(Conditional (Ternary) Operator)
使用問(wèn)號(hào)和冒號(hào)(?:)可以簡(jiǎn)化 if-else 語(yǔ)句的寫法。例如:
const age = 20; const message = age >= 18 ? "You are an adult" : "You are not an adult"; console.log(message); // 'You are an adult'
8、簡(jiǎn)寫的自增和自減操作符(Short-circuit Evaluation)
使用雙加號(hào)(++)和雙減號(hào)(--)可以簡(jiǎn)化變量的自增和自減操作。例如:
let count = 0; count++; console.log(count); // 1 let num = 5; const result = --num; console.log(result); // 4
9、簡(jiǎn)寫的賦值操作符(Assignment Operator)
使用加等號(hào)(+=)、減等號(hào)(-=)、乘等號(hào)(*=)、除等號(hào)(/=)等可以簡(jiǎn)化復(fù)合賦值操作。例如:
let count = 0; count += 1; console.log(count); // 1 let num = 5; num *= 2; console.log(num); // 10
10、雙重否定運(yùn)算符(Double NOT Operator)
雙重否定運(yùn)算符(Double NOT Operator)即為兩個(gè)連續(xù)的嘆號(hào)("!!"),也稱為邏輯非非運(yùn)算符。它可以將一個(gè)值轉(zhuǎn)換為其對(duì)應(yīng)的布爾值。例如:
const x = "hello"; console.log(!!x); // true const y = 0; console.log(!!y); // false
需要注意的是,使用!!
運(yùn)算符進(jìn)行布爾值轉(zhuǎn)換時(shí),要注意避免隱式類型轉(zhuǎn)換帶來(lái)的副作用(具體內(nèi)容參考文末補(bǔ)充內(nèi)容),以免導(dǎo)致意外的行為。
11、?: 在 TypeScript 中表示可選屬性
在 TypeScript 中,可以使用 ?
表示一個(gè)屬性是可選的。例如:
interface Person { name: string; age?: number; } const person1: Person = { name: "Alice" }; const person2: Person = { name: "Bob", age: 20 };
在上面的例子中,Person 接口有一個(gè)可選屬性 age,這意味著可以創(chuàng)建一個(gè) Person 類型的對(duì)象,其中 age 屬性是可選的。
補(bǔ)充
JavaScript 隱式類型轉(zhuǎn)換有哪些副作用
在 JavaScript 中,隱式類型轉(zhuǎn)換指的是在運(yùn)行時(shí)自動(dòng)將一個(gè)數(shù)據(jù)類型轉(zhuǎn)換為另一個(gè)數(shù)據(jù)類型。雖然 JavaScript 中的隱式類型轉(zhuǎn)換有時(shí)可以使代碼更簡(jiǎn)潔,但也會(huì)帶來(lái)一些副作用,包括:
1.難以預(yù)測(cè)的結(jié)果:由于 JavaScript 在隱式類型轉(zhuǎn)換時(shí)會(huì)自動(dòng)進(jìn)行一些操作,因此在代碼中進(jìn)行類型轉(zhuǎn)換時(shí)可能會(huì)產(chǎn)生意外的結(jié)果。例如:
console.log(1 + "2"); // '12' console.log(true + true); // 2 console.log("10" - 5); // 5
在上述例子中,JavaScript 自動(dòng)將數(shù)字 1 轉(zhuǎn)換為字符串類型,將布爾值 true 轉(zhuǎn)換為數(shù)字類型,并將字符串 '10' 轉(zhuǎn)換為數(shù)字類型。
2.可讀性差:隱式類型轉(zhuǎn)換可能會(huì)使代碼難以理解和維護(hù),因?yàn)樽x者需要知道代碼中所有的類型轉(zhuǎn)換規(guī)則才能正確地解釋代碼的含義。
3.性能下降:JavaScript 在進(jìn)行隱式類型轉(zhuǎn)換時(shí)需要進(jìn)行額外的計(jì)算,這會(huì)導(dǎo)致代碼的性能下降。在性能要求較高的場(chǎng)景下,應(yīng)盡量避免使用隱式類型轉(zhuǎn)換。
4.安全問(wèn)題:隱式類型轉(zhuǎn)換可能會(huì)導(dǎo)致一些安全問(wèn)題,例如在比較兩個(gè)值時(shí),如果類型不同,可能會(huì)產(chǎn)生意想不到的結(jié)果,如:
console.log("100" == 100); // true console.log("0e1" == 0); // true console.log("0e0" == 0); // true
在上述例子中,由于 JavaScript 進(jìn)行了隱式類型轉(zhuǎn)換,因此字符串 '100' 被轉(zhuǎn)換為了數(shù)字類型 100,字符串 '0e1' 被轉(zhuǎn)換為了數(shù)字類型 0,導(dǎo)致了比較結(jié)果與預(yù)期不符。
為了避免隱式類型轉(zhuǎn)換帶來(lái)的副作用,可以使用顯式類型轉(zhuǎn)換來(lái)代替。例如,使用 Number() 函數(shù)將字符串轉(zhuǎn)換為數(shù)字,使用 String() 函數(shù)將其他類型的值轉(zhuǎn)換為字符串等。這樣可以使代碼更加明確和易于理解,也可以提高代碼的性能。
到此這篇關(guān)于詳解JavaScript中常用操作符的使用的文章就介紹到這了,更多相關(guān)JavaScript操作符內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用原生js封裝webapp滑動(dòng)效果(慣性滑動(dòng)、滑動(dòng)回彈)
這篇文章主要介紹了使用原生js封裝webapp滑動(dòng)效果,具有慣性滑動(dòng)、滑動(dòng)回彈功能,需要的朋友可以參考下2014-05-05JavaScript簡(jiǎn)單編程實(shí)例學(xué)習(xí)
在本篇文章里小編給大家整理的是關(guān)于JavaScript簡(jiǎn)單編程實(shí)例學(xué)習(xí)內(nèi)容,有興趣的朋友們可以參考下。2020-02-02iframe窗口高度自適應(yīng)的又一個(gè)巧妙實(shí)現(xiàn)思路
這篇文章主要介紹了實(shí)現(xiàn)iframe窗口高度自適應(yīng)的又一個(gè)巧妙思路,需要的朋友可以參考下2014-04-04微信小程序把百度地圖坐標(biāo)轉(zhuǎn)換成騰訊地圖坐標(biāo)過(guò)程詳解
這篇文章主要介紹了微信小程序把百度地圖坐標(biāo)轉(zhuǎn)騰訊地圖坐標(biāo)過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07javascript實(shí)現(xiàn)簡(jiǎn)易聊天室
這篇文章主要為大家詳細(xì)介紹了javascript實(shí)現(xiàn)簡(jiǎn)易聊天室,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-07-07javascript 文件的同步加載與異步加載實(shí)現(xiàn)原理
本文將介紹javascript 文件的同步加載與異步加載實(shí)現(xiàn)原理,需要了解的朋友可以了解下2012-12-12那些項(xiàng)目中常見(jiàn)的TypeScript錯(cuò)誤總結(jié)
這篇文章主要給大家總結(jié)介紹了一些項(xiàng)目中常見(jiàn)的TypeScript錯(cuò)誤的相關(guān)資料,如果你想查看所有的錯(cuò)誤信息和錯(cuò)誤碼,可以瀏覽TypeScript的源代碼倉(cāng)庫(kù),當(dāng)然隨著?ts?版本的更新,官網(wǎng)也會(huì)逐漸增加更多新的類型錯(cuò)誤,需要的朋友可以參考下2022-03-03區(qū)分中英文字符的兩種方法(正則和charCodeAt())
最近在為項(xiàng)目寫登錄注冊(cè)系列頁(yè)面, 表單驗(yàn)證無(wú)疑是不可缺少的部分, 在這個(gè)jQ插件滿天飛的web年代, 表單驗(yàn)證倒也不是難事. 但再好的插件, 也并不能做到十全十美2010-11-11JavaScript 產(chǎn)生不重復(fù)的隨機(jī)數(shù)三種實(shí)現(xiàn)思路
在 JavaScript 中,一般產(chǎn)生的隨機(jī)數(shù)會(huì)重復(fù),但是有時(shí)我們需要不重復(fù)的隨機(jī)數(shù),如何實(shí)現(xiàn)?本文給于解決方法,需要的朋友可以參考下2012-12-12