目錄
三元運算子
Short-circuit Evaluation
宣告變數
如果存在
JavaScript的for迴圈
十進位指數
物件屬性
箭頭函數
隱含回傳
預設參數值
Template Literals
Destructuring Assignment
多行字串
Spread Operator
强制参数
Array.find
Object[key]
Double Bitwise NOT
首頁 web前端 js教程 JavaScript編碼的19個小技巧

JavaScript編碼的19個小技巧

Aug 08, 2017 pm 01:43 PM
javascript js 編碼

這篇文章適合任何一位基於JavaScript開發的開發者。我寫這篇文章主要涉及JavaScript中一些簡寫的程式碼,幫助大家更能理解一些JavaScript的基礎。希望這些程式碼能從不同的角度幫助你更好的理解JavaScript。

三元運算子

如果使用if...else語句,那麼這是一個很好節省程式碼的方式。

Longhand:

const x = 20;
let answer;
if (x > 10) {
    answer = 'is greater';
} else {
    answer = 'is lesser';
}
登入後複製

Shorthand:

const answer = x > 10 ? 'is greater' : 'is lesser';
登入後複製

你還可以像下面這樣嵌套if語句:

const big = x > 10 ? " greater 10" : x
登入後複製

Short-circuit Evaluation

分配一個變數值到另一個變數的時候,你可能想要確保變數不是nullundefined 或空。你可以寫一個有多個if的條件語句或Short-circuit Evaluation。

Longhand:

if (variable1 !== null || variable1 !== undefined || variable1 !== '') {
     let variable2 = variable1;
}
登入後複製

Shorthand:

const variable2 = variable1  || 'new';
登入後複製

不要相信我,請先相信自己的測試(可以把下面的程式碼貼在es6console)

let variable1;
let variable2 = variable1  || '';
console.log(variable2 === ''); // prints true

variable1 = 'foo';
variable2 = variable1  || '';
console.log(variable2); // prints foo
登入後複製

宣告變數

在函數中宣告變數時,像下面這樣同時宣告多個變數可以節省你大量的時間和空間:

#Longhand:

let x;
let y;
let x = 3;
登入後複製

Shorthand:

let x, y, z=3;
登入後複製

如果存在

這可能是微不足道的,但值得提及。做「如果檢查」時,賦值操作符有時可以省略。

Longhand:

if (likeJavaScript === true)
登入後複製

Shorthand:

if (likeJavaScript)
登入後複製

註:這兩種方法並不完全相同,簡寫檢查只要likeJavaScripttrue都會通過。

這有另一個範例。如果a不是true,然後做什麼。

Longhand:

let a;
if ( a !== true ) {
// do something...
}
登入後複製

Shorthand:

let a;
if ( !a ) {
// do something...
}
登入後複製

JavaScript的for迴圈

如果你只想要原生的JavaScript,而不想依賴jQuery或Lodash這樣的外部函式庫,那麼這個小技巧是非常有用的。

Longhand:

for (let i = 0; i < allImgs.length; i++)
登入後複製

Shorthand:

for (let index in allImgs)
登入後複製

Array.forEach簡寫:

function logArrayElements(element, index, array) {
  console.log("a[" + index + "] = " + element);
}
[2, 5, 9].forEach(logArrayElements);
// logs:
// a[0] = 2
// a[1] = 5
// a[2] = 9
登入後複製

Short-circuit Evaluation

如果參數是null或是undefined,我們可以簡單的使用一個Short-circuit邏輯運算,實作一行程式碼替代六行程式碼的寫法。

Longhand:

let dbHost;
if (process.env.DB_HOST) {
  dbHost = process.env.DB_HOST;
} else {
  dbHost = &#39;localhost&#39;;
}
登入後複製

Shorthand:

const dbHost = process.env.DB_HOST || &#39;localhost&#39;;
登入後複製

十進位指數

你可能看過這個。它本質上就是一個寫數字的奇特寫法,就是一個數字後面有很多個0。例如1e7本質相當於100000001的後面有70)。它代表了十進制計數等於10000000

Longhand:

for (let i = 0; i < 10000; i++) {}
登入後複製

Shorthand:

for (let i = 0; i < 1e7; i++) {}
// All the below will evaluate to true
1e0 === 1;
1e1 === 10;
1e2 === 100;
1e3 === 1000;
1e4 === 10000;
1e5 === 100000;
登入後複製

物件屬性

定義物件文字(Object literals )讓JavaScript變得更有趣。 ES6提供了一個更簡單的辦法來指派物件的屬性。如果屬性名稱和值一樣,你可以使用下面簡寫的方式。

Longhand:

const obj = { x:x, y:y };
登入後複製

Shorthand:

const obj = { x, y };
登入後複製

箭頭函數

經典函數很容易讀取和寫,但它們確實會變得有點冗長,特別是在巢狀函數中呼叫其他函數時還會讓你感到困惑。

Longhand:

function sayHello(name) {
  console.log(&#39;Hello&#39;, name);
}

setTimeout(function() {
  console.log(&#39;Loaded&#39;)
}, 2000);

list.forEach(function(item) {
  console.log(item);
});
登入後複製

Shorthand:

sayHello = name => console.log(&#39;Hello&#39;, name);

setTimeout(() => console.log(&#39;Loaded&#39;), 2000);

list.forEach(item => console.log(item));
登入後複製

隱含回傳

return在函數中經常使用到的一個關鍵字,將傳回函數的最終結果。箭頭函數用一個語句將隱式的回傳結果(函數必須省略{},為了省略return關鍵字)。

如果傳回多行語句(例如物件),有必要在函數體內使用()取代{}。這樣可以確保程式碼是否會作為一個單獨的語句傳回。

Longhand:

function calcCircumference(diameter) {
  return Math.PI * diameter
}
登入後複製

Shorthand:

calcCircumference = diameter => (
  Math.PI * diameter;
)
登入後複製

預設參數值

你可以使用if語句來定義函數參數的預設值。在ES6中,可以在函數宣告中定義預設值。

Longhand:

function volume(l, w, h) {
  if (w === undefined)
    w = 3;
  if (h === undefined)
    h = 4;
  return l * w * h;
}
登入後複製

Shorthand:

volume = (l, w = 3, h = 4 ) => (l * w * h);
volume(2) //output: 24
登入後複製

Template Literals

是不是厭倦了使用+來連接多個變數變成一個字串?難道就沒有更容易的方法嗎?如果你能使用ES6,那麼你是幸運的。在ES6中,你要做的是使用撇號和${},並且把你的變數放在大括號內。

Longhand:

const welcome = &#39;You have logged in as &#39; + first + &#39; &#39; + last + &#39;.&#39;

const db = &#39;http://&#39; + host + &#39;:&#39; + port + &#39;/&#39; + database;
登入後複製

Shorthand:

const welcome = `You have logged in as ${first} ${last}`;

const db = `http://${host}:${port}/${database}`;
登入後複製

Destructuring Assignment

#如果你正在使用任何一個在流行的Web框架時,就有很多機會使用陣列的形式或資料物件的形式與API之間傳遞訊息。一旦資料物件達到一個對個元件時,你需要將其展開。

Longhand:

const observable = require(&#39;mobx/observable&#39;);
const action = require(&#39;mobx/action&#39;);
const runInAction = require(&#39;mobx/runInAction&#39;);

const store = this.props.store;
const form = this.props.form;
const loading = this.props.loading;
const errors = this.props.errors;
const entity = this.props.entity;
登入後複製

Shorthand:

import { observable, action, runInAction } from &#39;mobx&#39;;

const { store, form, loading, errors, entity } = this.props;
登入後複製

你甚至可以自己指定變數名稱:

const { store, form, loading, errors, entity:contact } = this.props;
登入後複製

多行字串

你會發現以前自己寫多行字串的程式碼會像下面這樣:

Longhand:

const lorem = &#39;Lorem ipsum dolor sit amet, consectetur\n\t&#39;
    + &#39;adipisicing elit, sed do eiusmod tempor incididunt\n\t&#39;
    + &#39;ut labore et dolore magna aliqua. Ut enim ad minim\n\t&#39;
    + &#39;veniam, quis nostrud exercitation ullamco laboris\n\t&#39;
    + &#39;nisi ut aliquip ex ea commodo consequat. Duis aute\n\t&#39;
    + &#39;irure dolor in reprehenderit in voluptate velit esse.\n\t&#39;
登入後複製

但还有一个更简单的方法。使用撇号。

Shorthand:

const lorem = `Lorem ipsum dolor sit amet, consectetur
    adipisicing elit, sed do eiusmod tempor incididunt
    ut labore et dolore magna aliqua. Ut enim ad minim
    veniam, quis nostrud exercitation ullamco laboris
    nisi ut aliquip ex ea commodo consequat. Duis aute
    irure dolor in reprehenderit in voluptate velit esse.`
登入後複製

Spread Operator

Spread Operator是ES6中引入的,使JavaScript代码更高效和有趣。它可以用来代替某些数组的功能。Spread Operator只是一个系列的三个点(...)。

Longhand:

// joining arrays
const odd = [1, 3, 5];
const nums = [2 ,4 , 6].concat(odd);

// cloning arrays
const arr = [1, 2, 3, 4];
const arr2 = arr.slice()
登入後複製

Shorthand:

// joining arrays
const odd = [1, 3, 5 ];
const nums = [2 ,4 , 6, ...odd];
console.log(nums); // [ 2, 4, 6, 1, 3, 5 ]

// cloning arrays
const arr = [1, 2, 3, 4];
const arr2 = [...arr];
登入後複製

不像concat()函数,使用Spread Operator你可以将一个数组插入到另一个数组的任何地方。

const odd = [1, 3, 5 ];
const nums = [2, ...odd, 4 , 6];
登入後複製

另外还可以当作解构符:

const { a, b, ...z } = { a: 1, b: 2, c: 3, d: 4 };
console.log(a) // 1
console.log(b) // 2
console.log(z) // { c: 3, d: 4 }
登入後複製

强制参数

默认情况下,JavaScript如果不给函数参数传一个值的话,将会是一个undefined。有些语言也将抛出一个警告或错误。在执行参数赋值时,你可以使用if语句,如果未定义将会抛出一个错误,或者你可以使用强制参数(Mandatory parameter)。

Longhand:

function foo(bar) {
  if(bar === undefined) {
    throw new Error(&#39;Missing parameter!&#39;);
  }
  return bar;
}
登入後複製

Shorthand:

mandatory = () => {
  throw new Error(&#39;Missing parameter!&#39;);
}

foo = (bar = mandatory()) => {
  return bar;
}
登入後複製

Array.find

如果你以前写过一个查找函数,你可能会使用一个for循环。在ES6中,你可以使用数组的一个新功能find()

Longhand:

const pets = [
  { type: &#39;Dog&#39;, name: &#39;Max&#39;},
  { type: &#39;Cat&#39;, name: &#39;Karl&#39;},
  { type: &#39;Dog&#39;, name: &#39;Tommy&#39;},
]

function findDog(name) {
  for(let i = 0; i<pets.length; ++i) {
    if(pets[i].type === &#39;Dog&#39; && pets[i].name === name) {
      return pets[i];
    }
  }
}
登入後複製

Shorthand:

pet = pets.find(pet => pet.type ===&#39;Dog&#39; && pet.name === &#39;Tommy&#39;);
console.log(pet); // { type: &#39;Dog&#39;, name: &#39;Tommy&#39; }
登入後複製

Object[key]

你知道Foo.bar也可以写成Foo[bar]吧。起初,似乎没有理由应该这样写。然而,这个符号可以让你编写可重用代码块。

下面是一段简化后的函数的例子:

function validate(values) {
  if(!values.first)
    return false;
  if(!values.last)
    return false;
  return true;
}

console.log(validate({first:&#39;Bruce&#39;,last:&#39;Wayne&#39;})); // true
登入後複製

这个函数可以正常工作。然而,需要考虑一个这样的场景:有很多种形式需要应用验证,而且不同领域有不同规则。在运行时很难创建一个通用的验证功能。

Shorthand:

// object validation rules
const schema = {
  first: {
    required:true
  },
  last: {
    required:true
  }
}

// universal validation function
const validate = (schema, values) => {
  for(field in schema) {
    if(schema[field].required) {
      if(!values[field]) {
        return false;
      }
    }
  }
  return true;
}

console.log(validate(schema, {first:&#39;Bruce&#39;})); // false
console.log(validate(schema, {first:&#39;Bruce&#39;,last:&#39;Wayne&#39;})); // true
登入後複製

现在我们有一个验证函数,可以各种形式的重用,而不需要为每个不同的功能定制一个验证函数。

Double Bitwise NOT

如果你是一位JavaScript新手的话,对于逐位运算符(Bitwise Operator)你应该永远不会在任何地方使用。此外,如果你不处理二进制01,那就更不会想使用。

然而,一个非常实用的用例,那就是双位操作符。你可以用它替代Math.floor()。Double Bitwise NOT运算符有很大的优势,它执行相同的操作要快得多。你可以在这里阅读更多关于位运算符相关的知识。

Longhand:

Math.floor(4.9) === 4  //true
登入後複製

Shorthand:

~~4.9 === 4  //true
登入後複製

以上是JavaScript編碼的19個小技巧的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1321
25
PHP教程
1269
29
C# 教程
1249
24
建議:優秀JS開源人臉偵測辨識項目 建議:優秀JS開源人臉偵測辨識項目 Apr 03, 2024 am 11:55 AM

人臉偵測辨識技術已經是一個比較成熟且應用廣泛的技術。而目前最廣泛的網路應用語言非JS莫屬,在Web前端實現人臉偵測辨識相比後端的人臉辨識有優勢也有弱勢。優點包括減少網路互動、即時識別,大大縮短了使用者等待時間,提高了使用者體驗;弱勢是:受到模型大小限制,其中準確率也有限。如何在web端使用js實現人臉偵測呢?為了實現Web端人臉識別,需要熟悉相關的程式語言和技術,如JavaScript、HTML、CSS、WebRTC等。同時也需要掌握相關的電腦視覺和人工智慧技術。值得注意的是,由於Web端的計

如何使用WebSocket和JavaScript實現線上語音辨識系統 如何使用WebSocket和JavaScript實現線上語音辨識系統 Dec 17, 2023 pm 02:54 PM

如何使用WebSocket和JavaScript實現線上語音辨識系統引言:隨著科技的不斷發展,語音辨識技術已成為了人工智慧領域的重要組成部分。而基於WebSocket和JavaScript實現的線上語音辨識系統,具備了低延遲、即時性和跨平台的特點,成為了廣泛應用的解決方案。本文將介紹如何使用WebSocket和JavaScript來實現線上語音辨識系

WebSocket與JavaScript:實現即時監控系統的關鍵技術 WebSocket與JavaScript:實現即時監控系統的關鍵技術 Dec 17, 2023 pm 05:30 PM

WebSocket與JavaScript:實現即時監控系統的關鍵技術引言:隨著互聯網技術的快速發展,即時監控系統在各個領域中得到了廣泛的應用。而實現即時監控的關鍵技術之一就是WebSocket與JavaScript的結合使用。本文將介紹WebSocket與JavaScript在即時監控系統中的應用,並給出程式碼範例,詳細解釋其實作原理。一、WebSocket技

股票分析必備工具:學習PHP和JS繪製蠟燭圖的步驟 股票分析必備工具:學習PHP和JS繪製蠟燭圖的步驟 Dec 17, 2023 pm 06:55 PM

股票分析必備工具:學習PHP和JS繪製蠟燭圖的步驟,需要具體程式碼範例隨著網路和科技的快速發展,股票交易已成為許多投資者的重要途徑之一。而股票分析是投資人決策的重要一環,其中蠟燭圖被廣泛應用於技術分析。學習如何使用PHP和JS繪製蠟燭圖將為投資者提供更多直觀的信息,幫助他們更好地做出決策。蠟燭圖是一種以蠟燭形狀來展示股票價格的技術圖表。它展示了股票價格的

知識圖譜:大模型的理想搭檔 知識圖譜:大模型的理想搭檔 Jan 29, 2024 am 09:21 AM

大型語言模式(LLM)具有產生流暢和連貫文字的能力,為人工智慧的對話、創意寫作等領域帶來了新的前景。然而,LLM也存在一些關鍵限制。首先,它們的知識僅限於從訓​​練資料中辨識出的模式,缺乏對世界的真正理解。其次,推理能力有限,不能進行邏輯推理或從多個資料來源融合事實。面對更複雜、更開放的問題時,LLM的回答可能變得荒謬或矛盾,被稱為「幻覺」。因此,儘管LLM在某些方面非常有用,但在處理複雜問題和真實世界情境時,仍存在一定的限制。為了彌補這些差距,近年來出現了檢索增強生成(RAG)系統,其核心思想是

PHP與JS開發技巧:掌握繪製股票蠟燭圖的方法 PHP與JS開發技巧:掌握繪製股票蠟燭圖的方法 Dec 18, 2023 pm 03:39 PM

隨著網路金融的快速發展,股票投資已經成為了越來越多人的選擇。而在股票交易中,蠟燭圖是常用的技術分析方法,它能夠顯示股票價格的變動趨勢,幫助投資人做出更精準的決策。本文將透過介紹PHP和JS的開發技巧,帶領讀者了解如何繪製股票蠟燭圖,並提供具體的程式碼範例。一、了解股票蠟燭圖在介紹如何繪製股票蠟燭圖之前,我們首先需要先了解什麼是蠟燭圖。蠟燭圖是由日本人

JavaScript與WebSocket:打造高效率的即時天氣預報系統 JavaScript與WebSocket:打造高效率的即時天氣預報系統 Dec 17, 2023 pm 05:13 PM

JavaScript和WebSocket:打造高效的即時天氣預報系統引言:如今,天氣預報的準確性對於日常生活以及決策制定具有重要意義。隨著技術的發展,我們可以透過即時獲取天氣數據來提供更準確可靠的天氣預報。在本文中,我們將學習如何使用JavaScript和WebSocket技術,來建立一個高效的即時天氣預報系統。本文將透過具體的程式碼範例來展示實現的過程。 We

簡易JavaScript教學:取得HTTP狀態碼的方法 簡易JavaScript教學:取得HTTP狀態碼的方法 Jan 05, 2024 pm 06:08 PM

JavaScript教學:如何取得HTTP狀態碼,需要具體程式碼範例前言:在Web開發中,經常會涉及到與伺服器進行資料互動的場景。在與伺服器進行通訊時,我們經常需要取得傳回的HTTP狀態碼來判斷操作是否成功,並根據不同的狀態碼來進行對應的處理。本篇文章將教你如何使用JavaScript來取得HTTP狀態碼,並提供一些實用的程式碼範例。使用XMLHttpRequest

See all articles