成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

代碼水平暴增!掌握這五個JavaScript神技,讓你成為團隊最靚的仔

開發(fā) 前端
在這篇文章中,我將討論一些只有少數(shù)開發(fā)者知道的隱藏的 JavaScript 詞法語法特性。實踐并使用這些高級 JavaScript 語言特性,通過最大限度地利用 JavaScript 成為 JavaScript 專家!

每種現(xiàn)代編程語言通常有兩個主要部分:詞法語法和標準庫。編程語言語法通過保留關(guān)鍵字和特殊 ASCII 字符構(gòu)建了獨特的編程語法,供程序員編寫代碼。編程語言語法實現(xiàn)了一些語言特性,幫助開發(fā)者高效編寫自解釋的代碼以滿足各種開發(fā)需求。同時,標準庫提供了訪問預先開發(fā)的通用編程功能(如字符串處理、數(shù)據(jù)結(jié)構(gòu)、日期/時間處理等)的接口。

JavaScript 具有一個預先導入的功能齊全的標準庫,為開發(fā)者提供了各種預開發(fā)對象。例如,你可以使用標準的 ArrayBuffer 對象在 JavaScript 中處理原始二進制數(shù)據(jù)。JavaScript 語法提供了基本的標準編程語法和現(xiàn)代、高效的 JavaScript 專用語言特性,幫助開發(fā)者更快、更干凈地編寫代碼。

在這篇文章中,我將討論一些只有少數(shù)開發(fā)者知道的隱藏的 JavaScript 詞法語法特性。實踐并使用這些高級 JavaScript 語言特性,通過最大限度地利用 JavaScript 成為 JavaScript 專家!

標記模板字面量函數(shù)

現(xiàn)如今,開發(fā)者使用 ES6 模板字面量進行字符串插值,而不是舊式的字符串連接。模板字面量允許你通過在字符串段中嵌入表達式來構(gòu)建字符串,語法簡潔易讀。JavaScript 模板字面量還支持使用標記模板函數(shù)來解析帶有自定義邏輯的模板字符串。

標記模板函數(shù)允許開發(fā)者訪問解析后的模板字符串的各個部分,因此你可以根據(jù)自定義解析需求輕松處理它。例如,以下 cap 標記模板函數(shù)將每個表達式結(jié)果大寫:

function cap(strings, ...exps) { 
  return strings.reduce((acc, str, i) => 
    (acc + str + (exps[i]?.toString()?.toUpperCase() ?? '')), '');
}

let str = cap`Hello ${'JavaScript'}... Hello ${'everyone'}...`; 
console.log(str);   // Hello JAVASCRIPT... Hello EVERYONE...

如上面的代碼片段所示,你可以使用傳遞給標記函數(shù)的參數(shù)處理評估后的模板字符串。你甚至可以從標記函數(shù)返回對象。因此,使用標記函數(shù)進行字符串到對象數(shù)據(jù)轉(zhuǎn)換是標記模板字面量的一個很好的用例。以下 json 標記函數(shù)實現(xiàn)了一種更好的語法方法來解析代碼中的 JSON 字符串:

function json(strings, ...exps) { 
  return JSON.parse(strings.reduce((acc, str, i) => 
    (acc + str + (exps[i] ?? '')), ''));
}

let obj = json`{
    "msg": "Hello JavaScript",
    "code": ${1000}
}`; 

console.log(obj);   // {msg: 'Hello JavaScript', code: 1000}

類似地,你可以開發(fā)標簽來轉(zhuǎn)換 YAML 和 HTML 格式:

let yamlObj = yaml`...`;
let htmlObj = html`...`;

流行的 Google 開源庫 zx 讓你可以使用標記模板字面量特性在 Node.js 中編寫類似 Bash 的腳本。

原生非十進制數(shù)字字面量

人類通常使用十進制數(shù)系統(tǒng),因此每種編程語言都將數(shù)字字面量視為十進制數(shù)。但在某些開發(fā)場景中,我們必須在源代碼中使用其他數(shù)制。例如,我們應該使用八進制數(shù)來通過 Node.js API 更改文件系統(tǒng)訪問權(quán)限。任何現(xiàn)代編程語言,包括 JavaScript,使用一組通用前綴來表示非十進制數(shù)字字面量。

看看如何使用標準前綴在 JavaScript 中使用二進制、八進制和十六進制數(shù)字字面量:

let n1 = 0b101;
let n2 = 0o21;
let n3 = 0xff;

console.log(n1);  // 5
console.log(n2);  // 17
console.log(n3);  // 255

如你所見,每個非十進制數(shù)字立即轉(zhuǎn)換為十進制數(shù)字,這意味著 JavaScript 在解析源文件時實現(xiàn)了這種非十進制數(shù)字支持,并在運行時使用通用的 Number 對象。

然而,內(nèi)置的 toString() 方法和 parseInt() 函數(shù)幫助開發(fā)者通過將非十進制數(shù)字存儲為字符串來處理它們:

let n1 = '0xff';
let n2 = parseInt(n1, 16);

console.log(n2);   // 255 (decimal)

let n3 = n2.toString(2);

console.log(n3);   // 11111111 (binary)

使用字符串格式顯示二進制數(shù)字并不是大問題,但在字符串中存儲大量二進制數(shù)據(jù)不是性能友好的方法,因此你可以改用類型化數(shù)組。

使用對象方法防止 JavaScript 對象修改

默認情況下,JavaScript 不會對對象進行嚴格檢查——它允許你隨意操作任何對象。你甚至可以操作內(nèi)置對象:

JSON.parse = (str) => console.log(str);

例如,你可以通過在瀏覽器控制臺中覆蓋內(nèi)置對象方法來破壞生產(chǎn)網(wǎng)站(僅限當前瀏覽器標簽頁),如上面的代碼片段所示。

JavaScript 允許你使用 Object.seal() 和 Object.freeze() 方法防止對象修改。例如,seal() 方法通過允許現(xiàn)有屬性值修改來防止新屬性添加:

const obj = {
  a: 100,
  f: () => console.log('Hello...')
};
Object.seal(obj);

obj.a = 1000;   // works
obj.b = 100;    // doesn't work
delete obj.a;   // doesn't work

Object.freeze() 防止添加新屬性并阻止現(xiàn)有屬性修改,如下代碼片段所示:

Object.freeze(obj);

obj.a = 1000;   // doesn't work
obj.b = 100;    // doesn't work
delete obj.a;   // doesn't work

默認情況下,密封和凍結(jié)對象不會因無效操作而拋出錯誤,因此你必須啟用 JavaScript 嚴格模式才能實現(xiàn)這一點。

嵌套解構(gòu)和重命名

現(xiàn)如今,由于 React 等庫教程的影響,開發(fā)者經(jīng)常使用 ES6 解構(gòu)特性與對象和數(shù)組。解構(gòu)特性提供了一種更好的語法糖,用于通過從數(shù)組和對象中提取字段來創(chuàng)建新變量/常量。基本對象解構(gòu)通常從第一級屬性提取屬性,如下所示:

const obj = {
  a: 10,
  b: 20,
  c: 30
};

let {a, b, c} = obj;
console.log(a, b, c);   // 10 20 30

如果你需要重命名變量名,可以使用解構(gòu)重命名語法,如下所示:

let {a: A, b: B, c: C} = obj;
console.log(A, B, C);   // 10 20 30

我們看看一個高級對象解構(gòu)示例。我們可以從嵌套屬性中提取數(shù)據(jù)并使用重命名語法,如下代碼片段所示

const customer = {
  info: {
    name: 'John',
    score: 80,
    address: {postalCode: 2000}
  }
};

let {
  info: { 
    name: customerName,
    address: {postalCode: postCode } 
  }
} = customer;

console.log(customerName, postCode);   // John 2000

在這里,我們通過結(jié)合解構(gòu)和重命名特性提取嵌套屬性,創(chuàng)建了兩個變量。你甚至可以使用剩余參數(shù)語法獲取解構(gòu)過程中未解包的對象屬性:

let {
  info: { 
    name: customerName,
    address: { postalCode: postCode },
    ...rest  
  }
} = customer;

上面的 ...rest 對象包含 { score: 80 } 對象,因為 score 屬性未被解包到單獨的變量中。

使用計算屬性創(chuàng)建鍵值對象

在某些開發(fā)場景中,我們需要動態(tài)訪問對象屬性。我們可以輕松地使用括號語法動態(tài)設置/獲取屬性,但使用多個重復的設置/獲取語句無疑會影響代碼可讀性。

看看以下代碼片段,使用括號語法設置動態(tài)屬性名:

function createElement(tag, score) {
    let doc = {
        id: 100,
        tag,
    };
    doc[tag + 'Score'] = score * 100;
    doc[tag + 'Type'] = 'internal';
    return doc;
}

console.log(createElement('box', 50));
// {id: 100, boxScore: 5000, boxType: 'internal'}

我們可以使用計算屬性語法簡化上述函數(shù),如下所示:

const createElement = (tag, score) => ({
    id: 100,
    tag,
    [tag + 'Score']: score * 100,
    [tag + 'Type']: 'internal'
});

現(xiàn)代 JavaScript 語法是如此富有成效--它甚至支持對象重構(gòu)語法中的計算屬性,因此您可以使用動態(tài)生成的屬性名來解包屬性。例如,下面的代碼片段使用對象重構(gòu)和計算屬性語法,找到了使用上述 createElement() 函數(shù)生成的特定對象的分數(shù)字段:

let obj = { 
    id: 100, 
    tag: 'box',
    boxScore: 5000, 
    boxType: 'internal' 
};

let {[obj.tag + 'Score']: score} = obj;
console.log(score); // 5000

總結(jié)

這篇文章探討了一些鮮為人知的 JavaScript 語言特性,這些特性可以幫助你通過編寫簡潔的代碼塊來提高編碼效率。除了這些特性之外,指數(shù)運算符、類似逗號運算符的語法增強功能也可以幫助你以專家的方式編寫 JavaScript 代碼,并保持最新的知識!

ECMAScript 通過討論社區(qū)提案積極改進標準的 JavaScript 規(guī)范。ECMAScript TC39 小組維護了一個 GitHub 倉庫,列出了最新的 JavaScript 增強提案。其中一些提案試圖擴展 JavaScript 語法以提高開發(fā)者的生產(chǎn)力。例如,一些提案嘗試標準化 function.sent 元屬性、為 throw 關(guān)鍵字支持表達式以及類似函數(shù)管道的語言修改,適用于所有流行的網(wǎng)頁瀏覽器。

責任編輯:姜華 來源: 大遷世界
相關(guān)推薦

2021-07-07 05:03:35

Debugger技巧Nodejs

2021-12-25 22:29:31

類型編程Javascript類型體操

2024-07-16 10:13:01

2023-10-10 16:20:38

JavaScript代碼技巧

2024-10-09 14:45:41

2023-11-22 17:49:32

2025-02-28 08:30:00

Git開發(fā)命令

2025-05-06 03:01:00

GC參數(shù)調(diào)優(yōu)

2025-06-16 08:00:00

2019-06-14 13:46:01

機器學習線性回歸神經(jīng)網(wǎng)絡

2025-02-17 08:50:00

CSS代碼JavaScript

2019-12-25 14:19:21

Python編程語言Java

2016-08-24 22:00:58

CSSWeb設計

2024-08-13 15:09:41

2025-02-13 12:52:27

JavaScrip代碼開發(fā)

2020-08-06 08:27:21

JavaScript概念語言

2025-01-06 09:06:04

JavaScriptWeb 開發(fā)Generators

2020-12-02 14:54:41

JavaScript開發(fā)技術(shù)

2020-03-29 11:47:29

Cat.1物聯(lián)網(wǎng)IOT

2020-04-25 19:46:13

CSS開發(fā)工具前端
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 在线观看黄视频 | 色资源站| 欧美激情国产日韩精品一区18 | 黑色丝袜三级在线播放 | 91天堂| 久久免费资源 | 免费成人高清 | 欧美人妇做爰xxxⅹ性高电影 | 一区二区精品视频 | 国产无套一区二区三区久久 | 久久久久久精 | 国产欧美在线播放 | 欧美1区| 久久一起草| h视频在线看 | 亚洲最色视频 | 天堂一区二区三区 | 亚洲一区日韩 | 欧美一区二区三区视频在线播放 | 国产一区二区视频免费在线观看 | www.亚洲.com| 亚洲国产精品va在线看黑人 | 成人av高清| 日韩成人在线观看 | 日本一区二区三区在线观看 | 男人av的天堂 | 国产乱码高清区二区三区在线 | 国产高清在线精品 | 亚洲精彩免费视频 | 久久久久久久久久性 | 欧美一级黄带 | 中文字幕一区二区三区四区五区 | 成人在线不卡 | 色噜噜亚洲男人的天堂 | 亚洲综合久久久 | 99久久久国产精品 | 久久av在线播放 | 免费观看a级毛片在线播放 黄网站免费入口 | 自拍偷拍中文字幕 | 久久久久久99 | 久久免费精彩视频 |