日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

12 个非常有用的 JavaScript Hacks

發布時間:2025/4/5 javascript 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 12 个非常有用的 JavaScript Hacks 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

12 個非常有用的 JavaScript Hacks

http://webres.wang/12-extremely-useful-hacks-for-javascript/

本文為大家分享 12 個非常有用的 JavaScript Hacks。這些代碼可以減少代碼量,并幫你寫出優秀的代碼。下面就讓我們開始吧。

1. 使用?!!?將變量轉換為布爾值

有時我們需要檢查一個變量是否存在或者是否是有效值。為了實現這個功能,你可以對變量應用使用?!!?操作符:!!variable,這可以把任何類型的值轉換為布爾值,并且只有當這個變量的值為?0?/?NULL?/ ?" "?/?NaN?的時候才會返回?FALSE,其他情況都返回?TRUE。為了方便理解,我們看看下面的例子:

function Account(cash) {this.cash = cash;this.hasMoney = !!cash; } var account = new Account(100.50); console.log(account.cash); // 100.50 console.log(account.hasMoney); // truevar emptyAccount = new Account(0); console.log(emptyAccount.cash); // 0 console.log(emptyAccount.hasMoney); // false

這個例子中,只要?account.cash?的值大于?0?,account.hasMoney?就將為?TRUE。

2. 使用?+?轉換為數值

這個非常贊,并且很容易實現,但它只能作用于字符串數值,否則就會返回?NaN(不是數字)。我們來看下面的例子:

function toNumber(strNumber) {return +strNumber; } console.log(toNumber("1234")); // 1234 console.log(toNumber("ACB")); // NaN

并且此方法也可作用于 Date 函數,這是它將返回時間戳:

console.log(+new Date()) // 1461288164385

3. 減少條件代碼

如果你看到這樣的代碼:

if (conected) {login(); }

你可以通過使用?&&?操作符組合兩個變量來縮短它。比如前面這段代碼可以縮短為:

conected && login();

你也可以用這種方法檢測一個類中的屬性或者方法是否存在。類似的代碼:

user && user.login();

4. 使用?||?設置默認值

現在 ES6 中支持默認值參數。在比較舊的瀏覽器中模擬這一特性,你可以使用?||?操作符,通過將默認值設置為第二個參數來實現。如果第一個參數返回?FALSE,第二個值將被作為默認值,例如:

function User(name, age) {this.name = name || "Oliver Queen";this.age = age || 27; } var user1 = new User(); console.log(user1.name); // Oliver Queen console.log(user1.age); // 27var user2 = new User("Barry Allen", 25); console.log(user2.name); // Barry Allen console.log(user2.age); // 25

5. 在循環中緩存?array.length

當在循環中處理很大的數組時,這個小技巧雖然很簡單,卻會帶來巨大的性能提升。通常情況下,基本上所有人都會這么循環數組:

for(var i = 0; i < array.length; i++) {console.log(array[i]); }

如果這是一個小的數組那還好,但如果是大數組,每一次循環都會重復計算數組的長度,所有就會產生一部分延遲。為了避免這種情況,你應當把?array.length?緩存到一個變量中,而不是在循環中每次計算?array.length?:

var length = array.length; for(var i = 0; i < length; i++) {console.log(array[i]); }

更簡化一些的話,你可以這么寫:

for(var i = 0, length = array.length; i < length; i++) {console.log(array[i]); }

6. 檢測對象中的屬性

當你需要檢測屬性是否存在時,這個技巧非常有用,它可以避免運行未定義的方法或者屬性。如果你計劃編寫跨瀏覽器的代碼,你可能也需要此技能。例如,假設你需要編寫兼容 IE6 的代碼,并且想使用?document.querySelector() 根據它們的 ID 來獲取元素。然而,在這個瀏覽器中此方法并不存在,所以你可以使用 in 操作符來檢測其存在性,例如:

if ('querySelector' in document) {document.querySelector("#id"); } else {document.getElementById("id"); }

這時,如果?document?對象中不存在?querySelector?方法的話,將使用?document.getElementById()?作為回調。

7. 獲取數組中最后的元素

當你設置了?begin?和?end?兩個參數的時候,Array.prototype.slice(begin, end)方法可以剪切數組。但當你不設置?end?參數時,該函數將自動把它設置為數組的最大值。我想很多人可能不知道該函數可以接受負的參數。如果你設置一個負值的話,該函數將得到數組后面的元素:

var array = [1,2,3,4,5,6]; console.log(array.slice(-1)); // [6] console.log(array.slice(-2)); // [5,6] console.log(array.slice(-3)); // [4,5,6]

8. 數組截斷

這個技巧可以鎖定數組的長度,當你需要根據你設置的元素個數來刪除一些元素時,這個方法非常有幫助。比如,當數組中有 10 個元素,而你只想獲取其中前 5 個的話,你可以截斷數組,通過設置?array.length = 5?使其更小。看下面的例子:

var array = [1,2,3,4,5,6]; console.log(array.length); // 6 array.length = 3; console.log(array.length); // 3 console.log(array); // [1,2,3]

9. 全部替換

String.replace()?函數允許使用字符串和正則來替換字符串,默認情況下,它只會替換第一個出現的。但你可以通過在正則最后加上?/g?來模擬?replaceAll()?函數:

var string = "john john"; console.log(string.replace(/hn/, "ana")); // "joana john" console.log(string.replace(/hn/g, "ana")); // "joana joana"

10. 合并數組

如果你需要合并兩個數組的話,可以使用?Array.concat():

var array1 = [1,2,3]; var array2 = [4,5,6]; console.log(array1.concat(array2)); // [1,2,3,4,5,6];

然而,這個函數并不適用于合并大的數組,因為它需要創建一個新的數組,而這會消耗很多內存。這時,你可以使用?Array.push.apply(arr1, arr2)?來代替創建新的數組,它可以把第二個數組合并到第一個中,從而較少內存消耗:

var array1 = [1,2,3]; var array2 = [4,5,6]; console.log(array1.push.apply(array1, array2)); // [1,2,3,4,5,6];

11. 把節點列表(NodeList)轉換為數組

如果你運行?document.querySelectorAll("p")?方法,它可能會返回一個 DOM 元素的數組 — 節點列表對象。但這個對象并不具有數組的全部方法,如?sort(),reduce(),?map(),?filter()。為了使用數組的那些方法,你需要把它轉換為數組。只需使用?[].slice.call(elements)?即可實現:

var elements = document.querySelectorAll("p"); // NodeList var arrayElements = [].slice.call(elements); // 現在 NodeList 是一個數組 var arrayElements = Array.from(elements); // 這是另一種轉換 NodeList 到 Array 的方法

12. 打亂數組元素的順序

不適用?Lodash?等這些庫打亂數組元素順序,你可以使用這個技巧:

var list = [1,2,3]; console.log(list.sort(function() { Math.random() - 0.5 })); // [2,1,3]

總結

現在你已經學到了一些可以減少代碼量的 Hacks,其中一些出現在類似于?Lodash、Underscore.js、Strings.js 等的 JS 框架中。如果你想學習的更深入,并且想更加的減小代碼量,可以持續的關注我們。我希望你喜歡這篇文章,如果你有其他 JS 的技巧,可以在留言中與我們分享。

via:jscrambler.com,本文由?Specs?翻譯整理,發布在?WEB資源網,未經允許,不得轉載

?

總結

以上是生活随笔為你收集整理的12 个非常有用的 JavaScript Hacks的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲色图另类小说 | 欧美 日韩 视频 | 日韩欧美视频在线播放 | 久久久综合 | av老司机在线 | 免费看黄在线网站 | 天堂av√ | 999热精品视频 | 日日撸视频 | 免费看国产黄色片 | 久精品免费视频 | 国产福利网 | 色噜噜狠狠狠综合曰曰曰 | 欧美婷婷精品激情 | 99嫩草| www.奇米| 污污视频网站 | 视频h在线 | 九九爱精品视频 | 亚洲乱码av | 97免费人妻无码视频 | 熟女人妻一区二区三区免费看 | 谁有免费黄色网址 | v片在线观看 | 波多一区二区 | 超碰人人超| wwwwww国产| 日日干夜夜艹 | 免费黄色三级网站 | 一区二区三区高清在线 | 亚洲麻豆| 日本一区二区免费电影 | 色综合天 | 五月综合激情 | 26uuu精品一区二区在线观看 | 视频免费1区二区三区 | 日韩国产在线播放 | 图片区视频区小说区 | 在线观看成年人视频 | 苍井空亚洲精品aa片在线播放 | 国产 丝袜 欧美中文 另类 | 久久久av一区二区三区 | 夜夜干夜夜 | 亚洲美女福利视频 | 免费精品一区 | 杨幂毛片午夜性生毛片 | 亚洲免费中文字幕 | 樱桃视频一区二区三区 | 三极片黄色| 国产成人自拍偷拍 | 日本在线色| 怡红院一区二区三区 | 九九视屏 | 久久婷婷丁香 | 无码人妻少妇色欲av一区二区 | 色欲久久久天天天综合网 | 992av| 亚洲天堂第一页 | 99精品欧美一区二区三区综合在线 | 久久99精品久久久久久国产越南 | 欧美私人情侣网站 | 狠狠干2022| 亚洲国产日韩欧美在线观看 | 亚洲欧美成人一区 | 日韩高清成人 | 密臀av在线 | 国产自产一区二区 | 天天干天天插 | 91精品欧美一区二区三区 | 小敏的受孕日记h | 美女诱惑一区 | 高柳家在线观看 | 久久久国产精品人人片 | 拔插拔插海外华人免费视频 | 香蕉在线观看 | 日韩欧美国产综合 | 爱情岛亚洲论坛入口 | 伊人久色 | 日韩一级一区 | 波多野结衣一区在线 | www.sesehu| 超碰伊人网| 三级av毛片| 中文字幕一区二区三区手机版 | 久久神马影院 | 天天干一干 | 精品国产乱码久久久久久预案 | 国产一区二区视频在线观看免费 | 污片视频在线观看 | 成人熟女一区二区 | 国产污污视频在线观看 | 国产山村乱淫老妇女视频 | 免费看欧美成人a片无码 | 中文字幕不卡在线观看 | 人妻巨大乳一二三区 | 亚洲欧美另类激情 | 亚洲性图第一页 | 亚洲视频一区二区三区在线观看 | 乌克兰毛片 |