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

你可能不知道的幾個JavaScript原生方法

開發 前端
自ES6發行以來,許多新的,便捷的原生方法已添加到JavaScript的新標準中。然而,我在GitHub的代碼庫中看到了很多舊的代碼。這并不意味著它們一定是壞的,但我要介紹的這些功能將幫助你的代碼更可讀,更漂亮。

自ES6發行以來,許多新的,便捷的原生方法已添加到JavaScript的新標準中。

你可能不知道的幾個JavaScript原生方法

然而,我在GitHub的代碼庫中看到了很多舊的代碼。這并不意味著它們一定是壞的,但我要介紹的這些功能將幫助你的代碼更可讀,更漂亮。

Number.isNaN vs. isNaN

NaN 是數字類型。

  1. typeof NaN === 'number' // true 

因此,你無法區分 NaN 和數字。

甚至 Object.prototype.toString.call 都為 NaN 和數字返回 [object Number]。你可能已經知道可以使用 isNaN 方法檢查參數是否為NaN。但是從ES6開始,number構造函數已開始將 isNaN 作為其方法。那有什么不同?

  • isNaN——檢查傳遞的值是不是數字還是不能轉換為數字。
  • Number.isNaN——檢查傳遞的值是否不是數字。

下面是這個例子。

  1. Number.isNaN({}); 
  2. // <- false, {} is not NaN 
  3. Number.isNaN('ponyfoo') 
  4. // <- false, 'ponyfoo' is not NaN 
  5. Number.isNaN(NaN) 
  6. // <- true, NaN is NaN 
  7. Number.isNaN('pony'/'foo') 
  8. // <- true, 'pony'/'foo' is NaN, NaN is NaN 
  9.  
  10. isNaN({}); 
  11. // <- true, {} is not a number 
  12. isNaN('ponyfoo') 
  13. // <- true, 'ponyfoo' is not a number 
  14. isNaN(NaN) 
  15. // <- true, NaN is not a number 
  16. isNaN('pony'/'foo') 
  17. // <- true, 'pony'/'foo' is NaN, NaN is not a number 

Number.isFinite vs. isFinite

在JavaScript中,諸如1/0之類的計算不會產生錯誤。相反,它為你提供了 Infinit(無限),這是一個全局屬性。

那么,如何檢查一個值是否是Infinit呢?你不能,但是你可以用 isFinite 和 Number.isFinite 來檢查一個值是否是有限值。

它們的工作原理基本相同,但彼此之間略有不同。

  • isFinite——檢查傳遞的值是否有限。如果傳遞的值的類型不是數字,則將其轉換為數字。
  • Number.isFinite——檢查傳遞的值是否有限。傳遞的值不會轉換為數字。

示例:

  1. Number.isFinite(Infinity) // false 
  2. isFinite(Infinity) // false 
  3.  
  4. Number.isFinite(NaN) // false 
  5. isFinite(NaN) // false 
  6.  
  7. Number.isFinite(2e64) // true 
  8. isFinite(2e64) // true 
  9.  
  10. Number.isFinite(undefined) // false 
  11. isFinite(undefined) // false 
  12.  
  13. Number.isFinite(null) // false 
  14. isFinite(null) // true 
  15.  
  16. Number.isFinite('0') // false 
  17. isFinite('0') // true 

Math.floor vs. Math.trunc

在過去,當你需要把數字取整時你可能會用 Math.floor。但是從現在開始,如果你真正想要的只是整數部分,請嘗試使用 Math.trunc。

  • Math.floor——返回小于或等于給定數字的最大整數。
  • Math.trunc——截斷點和右邊的數字。

基本上,如果給定數為正,它們將為你返回完全相同的結果。但是,如果給定數為負數,結果將有所不同。

  1. Math.floor(1.23) // 1 
  2. Math.trunc(1.23) // 1 
  3. Math.floor(-5.3) // -6 
  4. Math.trunc(-5.3) // -5 
  5. Math.floor(-0.1) // -1 
  6. Math.trunc(-0.1) // -0 

Array.prototype.indexOf vs. Array.prototype.includes

當你在給定數組中尋找某個值時,如何找到它?我已經看到很多開發人員都使用 Array.prototype.indexOf,如以下示例所示。

  1. const arr = [1, 2, 3, 4]; 
  2. if (arr.indexOf(1) > -1) { 
  3.   ... 

他們的區別如下:

  • Array.prototype.indexOf——返回可以在數組中找到給定元素的第一個索引;如果不存在,則返回 -1
  • Array.prototype.includes——檢查給定數組是否包含你要查找的特定值,并返回 true / false 作為結果

示例:

  1. const students = ['Hong', 'James', 'Mark', 'James']; 
  2.  
  3. students.indexOf('Mark') // 1 
  4. students.includes('James') // true 
  5.  
  6. students.indexOf('Sam') // -1 
  7. students.includes('Sam') // false 

小心!由于Unicode差異,傳遞的值區分大小寫。

String.prototype.repeat vs. 手動循環

在添加這個功能之前,你制作字符串的方式是復制字符串,比如 abcabcabc,然后將其串聯成一個空的字符串,無論你想要多少次,都可以將其串聯起來。

  1. var str = 'abc'
  2. var res = ''
  3. var copyTimes = 3
  4. for (var i = 0; i < copyTimes; i += 1) { 
  5.   for (var j = 0; j < str.length; j += 1) { 
  6.     res += str[j]; 
  7.   } 

但這太長了,非常混亂,有時很難閱讀。為此,可以使用 String.prototype.repeat。你要做的就是傳遞數字,該數字表示你要復制字符串的次數。

  1. 'abc'.repeat(3) // "abcabcabc" 
  2. 'hi '.repeat(2) // "hi hi " 
  3.  
  4. 'empty'.repeat(0) // "" 
  5. 'empty'.repeat(null) // "" 
  6. 'empty'.repeat(undefined) // "" 
  7. 'empty'.repeat(NaN) // "" 
  8.  
  9. 'error'.repeat(-1) // RangeError 
  10. 'error'.repeat(Infinity) // RangeError 

傳入的值不能為負數,而且必須小于無窮大,不能是溢出的最大字符串大小。

你可能不知道的幾個JavaScript原生方法

String.prototype.match vs. String.prototype.includes

要檢查字符串中是否包含某些單詞,有兩種方法:match 和 includes。

  • String.prototype.match——采用RegExp類型的參數,可以使用RegExp中所有支持的標志。
  • String.prototype.includes——采用兩個參數,searchString 作為第一個參數,而 position 作為第二個參數。如果 position 沒有通過,將使用默認值 0。

區別在于,includes是區分大小寫的,而 match 則不區分大小寫。你可以將 i 標志放在RegExp中,以使其不區分大小寫。

  1. const name = 'jane'
  2. const nameReg = /jane/i; 
  3.  
  4. const str = 'Jane is a student'
  5.  
  6. str.includes(name) // false 
  7. str.match(nameReg)  
  8. // ["Jane", index: 0, input: "Jane is a student", groups: undefined] 

String.prototype.concat vs. String.prototype.padStart

當你想在某些字符串的開頭附加一些字符串時,padStart 是一種功能強大的方法。

另外,concat 也可以很好地執行這個功能。但主要的區別在于 padStart 重復了從結果字符串的第一個索引到當前字符串的第一個索引的字符串。

下面演示如何使用這個功能:

  1. const rep = 'abc'
  2. const str = 'xyz'

這是兩個字符串。我想做的是在 xyz 前面添加 rep,但不僅是一次,我希望重復幾次。padStart 需要兩個參數——新創建的結果字符串的總長度和將被重復的字符串。

  1. str.padStart(10, rep); // "abcabcaxyz" 

這個功能很好用,這個功能用 concat 肯定是很難做到的,concat 也是執行字符串附加的。

padEnd 從位置的結尾開始。

結論

在JavaScript中,有很多有趣而有用的方法并不普遍。但這并不意味著它們沒有用處。這一切都取決于你如何在各種情況下使用它們。

 

責任編輯:趙寧寧 來源: 今日頭條
相關推薦

2012-11-23 10:57:44

Shell

2015-08-13 09:03:14

調試技巧

2020-01-29 19:40:36

Python美好,一直在身邊Line

2021-01-05 11:22:58

Python字符串代碼

2019-11-20 10:25:06

sudoLinux

2023-01-29 09:46:47

Dialog彈窗模態

2023-02-27 09:20:24

絕對定位CSS

2017-11-07 21:58:25

前端JavaScript調試技巧

2020-11-03 09:51:04

JavaScript開發 技巧

2014-12-08 10:39:15

2019-11-25 14:05:47

Python裝飾器數據

2021-07-12 07:59:06

安全 HTML 屬性

2025-03-19 09:46:45

2024-09-11 16:21:09

2018-05-10 11:50:13

Docker容器冷知識

2021-12-17 00:10:00

ChromeDevtools功能

2010-07-26 13:24:11

2011-02-14 16:11:44

2010-08-06 13:15:35

2015-05-14 15:59:33

DockerLinux容器管理工具
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品五月天 | 97视频在线观看免费 | 国产日韩一区二区三区 | 亚洲国产精品激情在线观看 | 久久精品欧美一区二区三区麻豆 | 男人的天堂亚洲 | 国产成人精品一区二区三区在线观看 | 国产一区二区在线免费播放 | 国产精品乱码一区二区三区 | av网站推荐 | 精品视频一区二区 | 国产精品美女久久久久aⅴ国产馆 | 午夜在线视频一区二区三区 | 亚洲精品视频播放 | 午夜欧美一区二区三区在线播放 | 欧美一区二区免费 | 久久久成人免费视频 | 黄色一级大片在线免费看产 | 日韩中文在线视频 | 欧美中文字幕 | 国产成人免费网站 | 韩日一区二区 | 91精品久久久久久久久久小网站 | 毛片入口 | 精品一区国产 | 亚洲精品免费观看 | 欧美视频一区二区三区 | 91精品久久久久久久久久 | 成人夜晚看av | 99热精品久久 | 亚洲va欧美va人人爽午夜 | 久久一二| 亚洲精品久久久久久国产精华液 | 国产精品视频网站 | 亚洲综合一区二区三区 | 欧美aⅴ | 免费午夜视频在线观看 | 国产精品久久久久久久7777 | av免费看在线 | 久久久久久网站 | 欧洲一级视频 |