實(shí)用js

1峭咒、單線 If-Else
在 JavaScript 中,可以使用三元條件運(yùn)算符來(lái)壓縮 if-else 語(yǔ)句完疫。
例如:

const age = 10;
let group;

// LONG VERSION
if (age >= 18) {
  group = "Adult";
} else {
  group = "Child";
}

// SHORTHAND VERSION
group = age > 18 ? "Adult" : "Child";

這個(gè)簡(jiǎn)寫是為了使代碼更簡(jiǎn)潔舀瓢。只有當(dāng)它清楚地使表達(dá)更容易理解時(shí)才使用它黔衡。

2消约、空合并

空合并運(yùn)算符 ?? 如果左側(cè)為空,則返回右側(cè)员帮。否則,它返回左邊的值导饲。這很有用捞高,因?yàn)樗÷粤巳唛L(zhǎng)的 if 檢查。

空合并的語(yǔ)法是:

someValue ?? defaultValue

例如:

let someValue;

// LONGER EXPRESSION
if(someValue){
  console.log(someValue)
} else {
  console.log("Nothing found")
}

//SHORTHAND
console.log(someValue ?? "Nothing found")

輸出:

Nothing found
Nothing found

3渣锦、可選鏈

在 JavaScript 中硝岗,你可以使用點(diǎn)表示法訪問(wèn)對(duì)象的屬性和方法。

例如:

fruit.color

但是袋毙,如果你嘗試訪問(wèn)未定義對(duì)象的屬性型檀,你將看到錯(cuò)誤。為避免這種情況听盖,你需要確保在訪問(wèn)其屬性之前定義該對(duì)象:

const color = fruit && fruit.color;

但這看起來(lái)并不甜胀溺。你可以通過(guò)在點(diǎn)符號(hào)前添加一個(gè)問(wèn)號(hào)來(lái)使用可選鏈接,如下所示:

const color = fruit?.color;

讓我們看一個(gè)真實(shí) JS 對(duì)象的例子:

const student = {
  name: "Ann",
  age: 22,
  address: {
    state: "California"
  },
};

// LONG FORM
console.log(student && student.address && student.address.ZIPCode);

// SHORTHAND
console.log(student?.address?.ZIPCode);

輸出:

undefined
undefined

4皆看、將任何值轉(zhuǎn)換為布爾值

在 JavaScript 中仓坞,你可以將任何內(nèi)容轉(zhuǎn)換為布爾值。這是因?yàn)檠鳎诘讓游薨#琂avaScript 中的一切要么是“True”,要么是“False”毛雇。

要將任何內(nèi)容轉(zhuǎn)換為布爾值嫉称,請(qǐng)使用雙感嘆號(hào) !!。

例如:

!!true    // true
!!2       // true
!![]      // true
!!"Test"  // true

!!false   // false
!!0       // false
!!""      // false

5灵疮、傳播

你可以使用擴(kuò)展運(yùn)算符 ... 將一個(gè)數(shù)組的元素?cái)U(kuò)展到另一個(gè)數(shù)組中织阅。

例如,讓我們使用擴(kuò)展運(yùn)算符將兩個(gè)數(shù)字?jǐn)?shù)組合并在一起:

const nums1 = [1, 2, 3];
const nums2 = [4, 5, 6];

// LONG FORM
let newArray = nums1.concat(nums2);

// SHORTHAND
newArray = [...nums1, ...nums2];

在向數(shù)組添加元素時(shí)始藕,你還可以將 .push() 方法替換為擴(kuò)展運(yùn)算符蒲稳。

例如:

let numbers = [1, 2, 3];

// LONGER FORM
numbers.push(4);
numbers.push(5);

// SHORTHAND
numbers = [...numbers, 4, 5];

6、 使用擴(kuò)展運(yùn)算符進(jìn)行解構(gòu)

你可以使用擴(kuò)展運(yùn)算符 ... 來(lái)解構(gòu)對(duì)象的剩余值伍派。

為了演示江耀,讓我們創(chuàng)建一個(gè)學(xué)生對(duì)象。讓我們將 name 和 age 屬性分配給變量诉植,并將剩余的屬性分配給第三個(gè)變量:

const student = {
  name: "Matt",
  age: 23,
  city: "Helsinki",
  state: "Finland",
};

// LONGER FORM
const name = student.name;
const age = student.age;
const address = { city: student.city, state: student.state };

// SHORTHAND
const { name, age, ...address } = student;

7祥国、從數(shù)組中刪除重復(fù)項(xiàng)

你可以通過(guò)將數(shù)組轉(zhuǎn)換為集合,然后將集合中的值添加回?cái)?shù)組來(lái)刪除數(shù)組的重復(fù)項(xiàng)。

這是有效的舌稀,因?yàn)榧鲜俏ㄒ坏捻?xiàng)目集合啊犬。

換句話說(shuō),一個(gè)集合中不能有兩個(gè)相同的值壁查。因此觉至,將數(shù)組轉(zhuǎn)換為集合會(huì)刪除引擎蓋下的重復(fù)項(xiàng)。

例如:

const nums = [1,1,1,1,3,4,5]
const uniqueNums = [...new Set(nums)];

這是實(shí)現(xiàn)其效果的另一種方法:

const nums = [1,1,1,1,3,4,5]
const uniqueNums = Array.from(new Set(nums))

順便說(shuō)一句睡腿,如果你需要一組獨(dú)特的物品语御,為什么不使用 set 呢?

8席怪、短路評(píng)估中的 && 運(yùn)算符

你是否使用 if 檢查來(lái)查看表達(dá)式的計(jì)算結(jié)果是否為真应闯?

你可以使用短路 && 運(yùn)算符對(duì)速記進(jìn)行相同的操作。

例如:

var ready = true;

function say(){
  console.log("Hi");
}

// LONGER EXPRESSION
if(ready){
  say();
}

// SHORTHAND
ready && say();

輸出:

Yeah
Yeah

9挂捻、將值嵌入到字符串中

你可以通過(guò)將字符串包裝在反引號(hào)內(nèi)并使用 ${} 將變量嵌入到字符串中碉纺。

例如:

const age = 41;
const chen = `I'm ${age} years old`;

// result: I'm 41 years old

這些字符串有時(shí)被稱為“類固醇字符串”。

10刻撒、對(duì)象屬性分配

如果你希望對(duì)象鍵與值具有相同的名稱骨田,則可以省略對(duì)象文字。

例如:

const name = "Chen", city = "Beijing", age = 20, sex= "male";

// LONGER EXPRESSION
let person = {
  name: name,
  city: city,
  age: age,
  sex: sex
};

// SHORTHAND
person = { name, city, age, sex };

11疫赎、默認(rèn)值

在 JavaScript 中盛撑,你可以擁有一個(gè)帶有默認(rèn)參數(shù)值的函數(shù)。

通過(guò)這種方式捧搞,你可以在提供或不提供參數(shù)值的情況下調(diào)用該函數(shù)抵卫。

讓我們看一個(gè)例子:

// LONGER EXPRESSION
function pick(fruit) {
  if(fruit === undefined){
    console.log("I just picked up a banana");
  } else {
    console.log(`I just picked up a ${fruit}`);
  }
}

// SHORTHAND
function pick(fruit="banana") {
  console.log(`I just picked up a ${fruit}`)
}

pick("apple");  // -> I picked up a apple
pick();             // -> I picked up a banana

12、一行聲明變量

你可以將變量聲明合并為一行胎撇,而不是每個(gè)聲明使用一行介粘。

例如:

// LONGER FORM
let name;
let age;
let favoriteFood = "sala";

// SHORTHAND
let name, age, favoriteFood = "sala";

13、對(duì)象值作為數(shù)組

使用 Object.values() 方法將一個(gè)對(duì)象的所有值收集到一個(gè)數(shù)組中晚树。

例如:

const info = { name: "Chen", country: "China", age: 35 };

// LONGER FORM
let data = [];
for (let key in info) {
  data.push(info[key]);
}

// SHORTHAND
const data = Object.values(info);

14姻采、在數(shù)組中查找元素

使用內(nèi)置的 find() 方法查找與特定條件匹配的元素。

例如:

const fruits = [
  { type: "Banana", color: "Yellow" },
  { type: "Apple", color: "Green" }
];

// LONGER FORM
let yellowFruit;
for (let i = 0; i < fruits.length; ++i) {
  if (fruits[i].color === "Yellow") {
    yellowFruit = fruits[i];
  }
}

// SHORTHAND
yellowFruit = fruits.find((fruit) => fruit.color === "Yellow");
```
15爵憎、檢查數(shù)組中的項(xiàng)

你可以使用 includes() 方法慨亲,而不是使用 indexOf() 方法來(lái)檢查元素是否在數(shù)組中。

例如:
```
let numbers = [1, 2, 3];

// LONGER FORM
const hasNumber1 = numbers.indexOf(1) > -1 // -> True

// SHORTHAND/CLEANER APPROACH
const hasNumber1 = numbers.includes(1)     // -> True
```
16宝鼓、多條件檢查

使用 includes() 方法避免條件鏈刑棵。

例如:
```
const num = 1;

// LONGER FORM
if(num == 1 || num == 2 || num == 3){
  console.log("Hi");
}

// SHORTHAND
if([1,2,3].includes(num)){
  console.log("Hi");
}
```
17、用一行代碼分配多個(gè)值

你可以使用解構(gòu)在一行代碼中分配多個(gè)值愚铡。

例如:
```
let num1, num2;

// LONGER FORM
num1 = 10;
num2 = 100;

// SHORTHAND
[num1, num2] = [10, 100];
```
這也適用于對(duì)象:

student = {
  name: "Chen",
  age: 29,
};

// LONGER FORM
let name = student.name;
let age = student.age;

// SHORTHAND
let { name, age } = student;
```
18蛉签、在沒(méi)有第三個(gè)變量的情況下交換兩個(gè)變量

使用解構(gòu)從數(shù)組中提取值胡陪。這可以應(yīng)用于在沒(méi)有第三個(gè)的情況下交換兩個(gè)變量。

例如:
```
let x = 1;
let y = 2;

// LONGER FORM
let temp = x;
x = y;
y = temp;

// SHORTHAND
[x, y] = [y, x];
```
19碍舍、 Math.pow() 簡(jiǎn)寫

你可以不使用 Math.pow() 函數(shù)來(lái)將數(shù)字求冪柠座,而是使用 ** 運(yùn)算符作為速記:
```
// LONGER FORM
Math.pow(4,2); // 16
Math.pow(2,3); // 8

// SHORTHAND
4**2 // 16
2**3 // 8
```
20、 Math.floor() 簡(jiǎn)寫

你可以使用 ~~ 運(yùn)算符作為簡(jiǎn)寫片橡,而不是使用 Math.floor() 函數(shù)來(lái)向下舍入數(shù)字:
```
// LONG FORM
Math.floor(5.25) // -> 5.0

// SHORTHAND
~~5.25 // -> 5.0
```
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末妈经,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子捧书,更是在濱河造成了極大的恐慌狂塘,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鳄厌,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡妈踊,警方通過(guò)查閱死者的電腦和手機(jī)了嚎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)廊营,“玉大人歪泳,你說(shuō)我怎么就攤上這事÷锻玻” “怎么了呐伞?”我有些...
    開封第一講書人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)慎式。 經(jīng)常有香客問(wèn)我伶氢,道長(zhǎng),這世上最難降的妖魔是什么瘪吏? 我笑而不...
    開封第一講書人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任癣防,我火速辦了婚禮,結(jié)果婚禮上掌眠,老公的妹妹穿的比我還像新娘蕾盯。我一直安慰自己,他們只是感情好蓝丙,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開白布级遭。 她就那樣靜靜地躺著,像睡著了一般渺尘。 火紅的嫁衣襯著肌膚如雪挫鸽。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,292評(píng)論 1 301
  • 那天沧烈,我揣著相機(jī)與錄音掠兄,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛蚂夕,可吹牛的內(nèi)容都是我干的迅诬。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼婿牍,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼侈贷!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起等脂,我...
    開封第一講書人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤俏蛮,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后上遥,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體搏屑,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年粉楚,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了辣恋。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡模软,死狀恐怖伟骨,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情燃异,我是刑警寧澤携狭,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站回俐,受9級(jí)特大地震影響逛腿,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜仅颇,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一鳄逾、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧灵莲,春花似錦雕凹、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至明场,卻和暖如春汽摹,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背苦锨。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工逼泣, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留趴泌,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓拉庶,卻偏偏與公主長(zhǎng)得像嗜憔,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子氏仗,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 1. 類型強(qiáng)制轉(zhuǎn)換 1.1 string強(qiáng)制轉(zhuǎn)換為數(shù)字 可以用 *1來(lái)轉(zhuǎn)化為數(shù)字(實(shí)際上是調(diào)用 .valueOf方...
    Lu_嘉興閱讀 512評(píng)論 0 0
  • 0. 寫在前面 當(dāng)你開始工作時(shí)吉捶,你不是在給你自己寫代碼,而是為后來(lái)人寫代碼皆尔。 —— Nichloas C. Zak...
    康斌閱讀 5,321評(píng)論 1 42
  • typeof ECMAScript 有 5 種原始類型(primitive type)呐舔,即 Undefined、N...
    hui8685291閱讀 403評(píng)論 0 0
  • JavaScript簡(jiǎn)介 JavaScript(簡(jiǎn)稱“JS”) 是一種具有函數(shù)優(yōu)先的輕量級(jí)慷蠕,解釋型或即時(shí)編譯型的編...
    Joel_zh閱讀 212評(píng)論 0 0
  • 入門與進(jìn)階 第一章 進(jìn)入編程 1珊拼,如何快速運(yùn)行一段js代碼? 方式1:瀏覽器開發(fā)者工具流炕「唆铮可以使用快捷鍵option...
    瀟瀟瀟瀟瀟瀟瀟閱讀 871評(píng)論 0 0