欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

24個實用JavaScript?開發(fā)技巧

 更新時間:2021年12月10日 09:30:18   作者:CUGGZ  
這篇文章主要給大家分享了24個實用JavaScript?的開發(fā)技巧,文章圍繞JavaScript?的開發(fā)技巧講解展開全文,具有一定的參考價值,需要的朋友可以參考一下,希望對你有所幫助

1. 初始化數(shù)組

如果想要初始化一個指定長度的一維數(shù)組,并指定默認值,可以這樣:

const array = Array(6).fill(''); 
// ['', '', '', '', '', '']


如果想要初始化一個指定長度的二維數(shù)組,并指定默認值,可以這樣:

const matrix = Array(6).fill(0).map(() => Array(5).fill(0)); 
// [[0, 0, 0, 0, 0],
//  [0, 0, 0, 0, 0],
//  [0, 0, 0, 0, 0],
//  [0, 0, 0, 0, 0],
//  [0, 0, 0, 0, 0],
//  [0, 0, 0, 0, 0]]


2. 數(shù)組求和、求最大值、最小值

const array  = [5,4,7,8,9,2];


數(shù)組求和:

array.reduce((a,b) => a+b);


數(shù)組最大值:

array.reduce((a,b) => a > b ? a : b);

Math.max(...array)


數(shù)組最小值:

array.reduce((a,b) => a < b ? a : b);

Math.min(...array)

使用數(shù)組的reduce方法可以解決很多數(shù)組的求值問題。

3. 過濾錯誤值

如果想過濾數(shù)組中的false、0、null、undefined等值,可以這樣:

const array = [1, 0, undefined, 6, 7, '', false];

array.filter(Boolean);
// [1, 6, 7]

4. 使用邏輯運算符

如果有一段這樣的代碼:

if(a > 10) {
    doSomething(a)
}


可以使用邏輯運算符來改寫:

a > 10 && doSomething(a)


這樣寫就會簡潔很多,如果邏輯與&&操作符前面的值為假,就會發(fā)生短路操作,直接結束這一句的執(zhí)行;如果為真,就會繼續(xù)執(zhí)行&&后面的代碼,并返回后面代碼的返回值。使用這種方式可以減少很多if...else判斷。

5. 判斷簡化

如果有下面的這樣的一個判斷:

if(a === undefined || a === 10 || a=== 15 || a === null) {
    //...
}


就可以使用數(shù)組來簡化這個判斷邏輯:

if([undefined, 10, 15, null].includes(a)) {
    //...
}


這樣代碼就會簡潔很多,并且便于擴展,如果還有需要等于a的判斷,直接在數(shù)組中添加即可。

6. 清空數(shù)組

如果想要清空一個數(shù)組,可以將數(shù)組的length置于0:

let array = ["A", "B", "C", "D", "E", "F"]
array.length = 0 
console.log(array)  // []


7. 計算代碼性能

可以使用以下操作來計算代碼的性能:

const startTime = performance.now(); 
// 某些程序
for(let i = 0; i < 1000; i++) {
    console.log(i)
}
const endTime = performance.now();
const totaltime = endTime - startTime;
console.log(totaltime); // 30.299999952316284


8. 拼接數(shù)組

如果我們想要拼接幾個數(shù)組,可以使用擴展運算符:

const start = [1, 2] 
const end = [5, 6, 7] 
const numbers = [9, ...start, ...end, 8] // [9, 1, 2, 5, 6, 7 , 8]


或者使用數(shù)組的concat()方法:

const start = [1, 2, 3, 4] 
const end = [5, 6, 7] 
start.concat(end); // [1, 2, 3, 4, 5, 6, 7]


但是使用concat()方法時,如果需要合并的數(shù)組很大,那么concat() 函數(shù)會在創(chuàng)建單獨的新數(shù)組時消耗大量內存。這時可以使用以下方法來實現(xiàn)數(shù)組的合并:

Array.push.apply(start, end)


通過這種方式就能在很大程度上較少內存的使用。

9. 對象驗證方式

如果我們有一個這樣的對象:

const parent = {
    child: {
      child1: {
        child2: {
          key: 10
      }
    }
  }
}


很多時候我們會這樣去寫,避免某一層級不存在導致報錯:

parent && parent.child && parent.child.child1 && parent.child.child1.child2


這樣代碼看起來就會很臃腫,可以使用JavaScript的可選鏈運算符:

parent?.child?.child1?.child2


這樣實現(xiàn)和效果和上面的一大長串是一樣的。?

可選鏈運算符同樣適用于數(shù)組:

const array = [1, 2, 3];
array?.[5]


可選鏈運算符允許我們讀取位于連接對象鏈深處的屬性的值,而不必明確驗證鏈中的每個引用是否有效。在引用為空(null 或者 undefined) 的情況下不會引起錯誤,該表達式短路返回值是 undefined。與函數(shù)調用一起使用時,如果給定的函數(shù)不存在,則返回 undefined

10. 驗證undefined和null

如果有這樣一段代碼:

if(a === null || a === undefined) {
    doSomething()
}


也就是如果需要驗證一個值如果等于null或者undefined時,需要執(zhí)行一個操作時,可以使用空值合并運算符來簡化上面的代碼:

a ?? doSomething()


這樣,只有a是undefined或者null時,才會執(zhí)行控制合并運算符后面的代碼??罩岛喜⒉僮鞣?#63;?)是一個邏輯操作符,當左側的操作數(shù)為 null 或者 undefined 時,返回其右側操作數(shù),否則返回左側操作數(shù)。

11. 數(shù)組元素轉化為數(shù)字

如果有一個數(shù)組,想要把數(shù)組中的元素轉化為數(shù)字,可以使用map方法來實現(xiàn):

const array = ['12', '1', '3.1415', '-10.01'];
array.map(Number);  // [12, 1, 3.1415, -10.01]


通過這種方式,map會在遍歷數(shù)組時,對數(shù)組的每個元素執(zhí)行Number構造函數(shù)并返回結果。

12. 類數(shù)組轉為數(shù)組

可以使用以下方法將類數(shù)組arguments轉化為數(shù)組:

Array.prototype.slice.call(arguments);


除此之外,還可以使用擴展運算符來實現(xiàn):

[...arguments]


13. 對象動態(tài)聲明屬性

如果想要給對象動態(tài)聲明屬性,可以這樣:

const dynamic = 'color';
var item = {
    brand: 'Ford',
    [dynamic]: 'Blue'
}
console.log(item); 
// { brand: "Ford", color: "Blue" }


14. 縮短console.log()

每次進行調試時書寫很多console.log()就會比較麻煩,可以使用以下形式來簡化這個代碼:

const c = console.log.bind(document) 
c(996) 
c("hello world")


這樣每次執(zhí)行c方法就行了。

15. 獲取查詢參數(shù)

如果我們想要獲取URL中的參數(shù),可以使用window對象的屬性:

window.location.search


如果一個URL為www.baidu.com?project=js&type=1 那么通過上面操作就會獲取到?project=js&type=1。如果在想獲取到其中某一個參數(shù),可以這樣:

let type = new URLSearchParams(location.search).get('type');


16. 數(shù)字取整

如果有一個數(shù)字包含小數(shù),我們想要去除小數(shù),通過會使用math.floor、math.ceilmath.round方法來消除小數(shù)。其實可以使用~~運算符來消除數(shù)字的小數(shù)部分,它相對于數(shù)字的那些方法會快很多。

~~3.1415926  // 3


其實這個運算符的作用有很多,通常是用來將變量轉化為數(shù)字類型的,不同類型的轉化結果不一樣:

  • 如果是數(shù)字類型的字符串,就會轉化為純數(shù)字;
  • 如果字符串包含數(shù)字之外的值,就會轉化為0;
  • 如果是布爾類型,true會返回1,false會返回0;

除了這種方式之外,我們還可以使用按位與來實現(xiàn)數(shù)字的取整操作,只需要在數(shù)字后面加上|0即可:

23.9 | 0   // 23
-23.9 | 0   // -23


這個操作也是直接去除數(shù)字后面的小數(shù)。這個方法和上面方法類似,使用起來性能都會比JavaScript的的API好很多。

17. 刪除數(shù)組元素

如果我們想刪除數(shù)組中的一個元素,我們可以使用delete來實現(xiàn),但是刪除完之后的元素會變?yōu)?code>undefined,并不會消失,并且執(zhí)行時會消耗大量的時間,這樣多數(shù)情況下都不能滿足我們的需求。所以可以使用數(shù)組的splice()方法來刪除數(shù)組元素:

const array = ["a", "b", "c", "d"] 
array.splice(0, 2) // ["a", "b"]


18. 檢查對象是否為空

如果我們想要檢查對象是否為空,可以使用以下方式:

Object.keys({}).length  // 0
Object.keys({key: 1}).length  // 1


Object.keys()方法用于獲取對象的 key,會返回一個包含這些key值的數(shù)組。如果返回的數(shù)組長度為0,那對象肯定為空了。

19. 使用 switch case 替換 if/else

switch case 相對于 if/else 執(zhí)行性能更高,代碼看起來會更加清晰。

if (1 == month) {days = 31;}
else if (2 == month) {days = IsLeapYear(year) ? 29 : 28;}
else if (3 == month) {days = 31;}
else if (4 == month) {days = 30;} 
else if (5 == month) {days = 31;} 
else if (6 == month) {days = 30;} 
else if (7 == month) {days = 31;} 
else if (8 == month) {days = 31;} 
else if (9 == month) {days = 30;} 
else if (10 == month) {days = 31;} 
else if (11 == month) {days = 30;} 
else if (12 == month) {days = 31;} 


使用switch...case來改寫:

switch(month) {
        case 1: days = 31; break;
        case 2: days = IsLeapYear(year) ? 29 : 28; break;
        case 3: days = 31; break;
        case 4: days = 30; break;
        case 5: days = 31; break;
        case 6: days = 30; break;
        case 7: days = 31; break;
        case 8: days = 31; break;
        case 9: days = 30; break;
        case 10: days = 31; break;
        case 11: days = 30; break;
        case 12: days = 31; break;
        default: break;
}


看起來相對來說簡潔了一點??梢愿鶕闆r,使用數(shù)組或對象來改寫if...else。

20. 獲取數(shù)組中的最后一項

如果想獲取數(shù)組中的最后一項,很多時候會這樣來寫:

const arr = [1, 2, 3, 4, 5];
arr[arr.length - 1]  // 5


其實我們還可以使用數(shù)組的slice方法來獲取數(shù)組的最后一個元素:

arr.slice(-1)


當我們將slice方法的參數(shù)設置為負值時,就會從數(shù)組后面開始截取數(shù)組值,如果我們想截取后兩個值,參數(shù)傳入-2即可。

21. 值轉為布爾值

JavaScript中,以下值都會在布爾值轉化時轉化為false,其他值會轉化為true:

  • undefined
  • null
  • 0
  • -0
  • NaN
  • ""

通常我們如果想顯式的值轉化為布爾值,會使用Boolean()方法進行轉化。其實我們可以使用!!運算符來將一個值轉化我布爾值。我們知道,一個!是將對象轉為布爾型并取反,兩個!是將取反后的布爾值再取反,相當于直接將非布爾類型值轉為布爾類型值。這種操作相對于Boolean()方法性能會快很多,因為它是計算機的原生操作:

!!undefined // false
!!"996"     // true
!!null      // false
!!NaN       // false


22. 格式化 JSON 代碼

相信大家都使用過JSON.stringify方法,該方法可以將一個 JavaScript 對象或值轉換為 JSON 字符串。他的語法如下:

JSON.stringify(value, replacer, space)


它有三個參數(shù):

  • value:將要序列化成 一個 JSON 字符串的值。
  • replacer 可選:如果該參數(shù)是一個函數(shù),則在序列化過程中,被序列化的值的每個屬性都會經過該函數(shù)的轉換和處理;如果該參數(shù)是一個數(shù)組,則只有包含在這個數(shù)組中的屬性名才會被序列化到最終的 JSON 字符串中;如果該參數(shù)為 null 或者未提供,則對象所有的屬性都會被序列化。
  • space 可選:指定縮進用的空白字符串,用于美化輸出(pretty-print);如果參數(shù)是個數(shù)字,它代表有多少的空格;上限為10。該值若小于1,則意味著沒有空格;如果該參數(shù)為字符串(當字符串長度超過10個字母,取其前10個字母),該字符串將被作為空格;如果該參數(shù)沒有提供(或者為 null),將沒有空格。

通常情況下,我們都寫一個參數(shù)來將一個 JavaScript 對象或值轉換為 JSON 字符串??梢钥吹剿€有兩個可選的參數(shù),所以我們可以用這倆參數(shù)來格式化JSON代碼:

console.log(JSON.stringify({ alpha: 'A', beta: 'B' }, null, '\t'));


輸出結果如下:

23. 避免使用eval()和with()

  • with() 會在全局范圍內插入一個變量。因此,如果另一個變量具有相同的名稱,則可能會導致混淆并覆蓋該值。
  • eval() 是比較昂貴的操作,每次調用它時,腳本引擎都必須將源代碼轉換為可執(zhí)行代碼。

24. 函數(shù)參數(shù)使用對象而不是參數(shù)列表

當我們使用參數(shù)列表給函數(shù)傳遞參數(shù)時,如果參數(shù)較少還好,如果參數(shù)較多時,就會比較麻煩,因為我們必須按照參數(shù)列表的順序來傳遞參數(shù)。如果使用TypeScript來寫,那么寫的時候還需要讓可選參數(shù)排在必選參數(shù)的后面。?

如果我們的函數(shù)參數(shù)較多,就可以考慮使用對象的形式來傳遞參數(shù),對象的形式傳遞參數(shù)時,傳遞可選參數(shù)并不需要放在最后,并且參數(shù)的順序不在重要。與參數(shù)列表相比,通過對象傳遞的內容也更容易閱讀和理解。?

下面來看一個例子:

function getItem(price, quantity, name, description) {}

getItem(15, undefined, 'bananas', 'fruit')

下面來使用對象傳參:

function getItem(args) {
    const {price, quantity, name, description} = args
}

getItem({
    name: 'bananas',
    price: 10,
    quantity: 1, 
    description: 'fruit'
})

到此這篇關于24個實用JavaScript 開發(fā)技巧的文章就介紹到這了,更多相關JavaScript 開發(fā)技巧內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • JavaScript實現(xiàn)圖片的放大縮小及拖拽功能示例

    JavaScript實現(xiàn)圖片的放大縮小及拖拽功能示例

    這篇文章主要介紹了JavaScript實現(xiàn)圖片的放大縮小及拖拽功能,結合實例形式分析了javascript鼠標事件響應及針對圖形元素的屬性操作相關實現(xiàn)技巧,需要的朋友可以參考下
    2019-05-05
  • 基于原生JS封裝的Modal對話框插件的示例代碼

    基于原生JS封裝的Modal對話框插件的示例代碼

    這篇文章主要介紹了基于原生JS封裝的Modal對話框插件的示例代碼,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • JavaScript中Require調用js的實例分享

    JavaScript中Require調用js的實例分享

    下面小編就為大家?guī)硪黄狫avaScript中Require調用js的實例分享。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • Nest.js快速啟動API項目過程詳解

    Nest.js快速啟動API項目過程詳解

    這篇文章主要為大家介紹了Nest.js快速啟動API項目過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10
  • Webpack4 使用Babel處理ES6語法的方法示例

    Webpack4 使用Babel處理ES6語法的方法示例

    這篇文章主要介紹了Webpack4 使用Babel處理ES6語法的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-03-03
  • 用Javascript實現(xiàn)錨點(Anchor)間平滑跳轉

    用Javascript實現(xiàn)錨點(Anchor)間平滑跳轉

    本文介紹的方法,實現(xiàn)了錨點(Anchor)間平滑跳轉,效果非常不錯。
    2009-09-09
  • JS實現(xiàn)掃碼槍掃描二維碼功能

    JS實現(xiàn)掃碼槍掃描二維碼功能

    這篇文章主要介紹了JS實現(xiàn)掃碼槍掃描二維碼功能,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-01-01
  • JavaScript修剪字符串的方法和技巧

    JavaScript修剪字符串的方法和技巧

    你在?JavaScript?代碼編寫中有遇到過一個你需要比較或操作處理字符串,但是在開始或者結尾有額外空格的情況嗎?在這篇博客中,我將給你展示如何使用不同的方法在?JavaScript?中修剪字符串,需要的朋友可以參考下
    2024-02-02
  • JS實現(xiàn)點擊鏈接切換顯示隱藏內容的方法

    JS實現(xiàn)點擊鏈接切換顯示隱藏內容的方法

    這篇文章主要介紹了JS實現(xiàn)點擊鏈接切換顯示隱藏內容的方法,涉及javascript鼠標事件響應及頁面元素屬性動態(tài)變換相關操作技巧,需要的朋友可以參考下
    2017-10-10
  • Bootstrap 粘頁腳效果

    Bootstrap 粘頁腳效果

    Bootstrap 粘頁腳,說得具體一點就是“將固定高度的頁腳緊貼頁面底部”,本文給大家分享具有實現(xiàn)代碼,感興趣的朋友參考下吧
    2016-03-03

最新評論