在這篇文章中將分享12個有關於JavaScript的小技巧。這些小技巧可能在你的實際工作中或許能幫助你解決一些問題。
相關學習推薦:javascript影片教學
#使用!!
運算子轉換布林值
有時候我們需要對一個變數檢查是否存在或檢查值是否有一個有效值,如果存在就回傳true
值。為了做這樣的驗證,我們可以使用!!
操作符來實現是非常的方便與簡單。對於變數可以使用!!variable
做偵測,只要變數的值為:0
、null
、" "
、 undefined
或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); // true var emptyAccount = new Account(0); console.log(emptyAccount.cash); // 0 console.log(emptyAccount.hasMoney); // false
在這個範例中,只要account.cash
的值大於0
,那麼account.hasMoney
回傳的值就是true
。
使用
將字串轉換成數字
這個技巧非常有用,其非常簡單,可以交字串資料轉換成數字,不過其只適合用於字符串數據,否則將返回NaN
,例如下面的範例:
function toNumber(strNumber) { return +strNumber; } console.log(toNumber("1234")); // 1234 console.log(toNumber("ACB")); // NaN
這個也適用於Date
,在本例中,它將返回的是時間戳數字:
console.log(+new Date()) // 1461288164385
並條件符
如果你有一段這樣的程式碼:
if (conected) { login(); }
你也可以將變數簡寫,並且使用&&
和函數連接在一起,例如上面的範例,可以簡寫成這樣:
conected && login();
如果一些屬性或函數存在於一個物件中,你也可以這樣做檢測,如下面的程式碼所示:
user && user.login();
使用||
運算子
在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); // 27 var user2 = new User("Barry Allen", 25); console.log(user2.name); // Barry Allen console.log(user2.age); // 25
在迴圈中快取array.length
這個技巧很簡單,這個在處理一個很大的陣列循環時,對效能影響將是非常大的。基本上,大家都會寫一個這樣的同步迭代的數組:
for(var i = 0; i < array.length; i++) { console.log(array[i]); }
如果是一個小型數組,這樣做很好,如果你要處理的是一個大的數組,這段程式碼在每次迭代都會重新計算數組的大小,這將會導致一些延誤。為了避免這種現像出現,可以將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]); }
偵測物件中屬性
當你需要偵測一些屬性是否存在,避免執行未定義的函數或屬性時,這個小技巧就顯得很有用。如果你打算訂些一些跨相容的瀏覽器程式碼,你也可能會用到這個小技巧。例如,你想使用document.querySelector()
來選擇一個id
,並且讓它能相容於IE6瀏覽器,但是在IE6瀏覽器中這個函數是不存在的,那麼使用這個運算元來偵測這個函數是否存在就顯得非常的有用,如下面的範例:
if ('querySelector' in document) { document.querySelector("#id"); } else { document.getElementById("id"); }
在這個範例中,如果document
不存在querySelector
函數,那麼就會呼叫docuemnt.getElementById("id")
。
取得陣列中最後一個元素
Array.prototype.slice(begin,end)
用來取得begin
和end
之間的陣列元素。如果你不設定end
參數,你會將陣列的預設長度值當作end
值。但有些同學可能不知道這個函數還可以接受負值當參數。如果你設定一個負值作為begin
的值,那麼你可以取得陣列的最後一個元素。如:
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]
陣列截斷
這個小技巧主要用來鎖定陣列的大小,如果用於刪除陣列中的某些元素來說,是非常有用的。例如,你的陣列有10
個元素,但你只想只要前五個元素,那麼你可以透過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]
取代所有
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"
合併陣列
如果你要合併兩個數組,一般情況之下你都會使用Array.concat()
函數:
var array1 = [1,2,3]; var array2 = [4,5,6]; console.log(array1.concat(array2)); // [1,2,3,4,5,6];
然后这个函数并不适合用来合并两个大型的数组,因为其将消耗大量的内存来存储新创建的数组。在这种情况之个,可以使用Array.pus().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];
将NodeList
转换成数组
如果你运行document.querySelectorAll(“p”)
函数时,它可能返回DOM元素的数组,也就是NodeList
对象。但这个对象不具有数组的函数功能,比如sort()
、reduce()
、map()
、filter()
等。为了让这些原生的数组函数功能也能用于其上面,需要将节点列表转换成数组。可以使用[].slice.call(elements)
来实现:
var elements = document.querySelectorAll("p"); // NodeList var arrayElements = [].slice.call(elements); // Now the NodeList is an array var arrayElements = Array.from(elements); // This is another way of converting NodeList to Array
数组元素的洗牌
对于数组元素的洗牌,不需要使用任何外部的库,比如Lodash,只要这样做:
var list = [1,2,3]; console.log(list.sort(function() { Math.random() - 0.5 })); // [2,1,3]
总结
现在你学会了些有用的JavaScript小技巧。希望这些小技巧能在工作中帮助你解决一些麻烦,或者说这篇文章对你有所帮助。如果你有一些优秀的JavaScript小技巧,欢迎在评论中与我们一起分享。
以上是必備的12個JavaScript技巧的詳細內容。更多資訊請關注PHP中文網其他相關文章!

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

Python和JavaScript在社區、庫和資源方面的對比各有優劣。 1)Python社區友好,適合初學者,但前端開發資源不如JavaScript豐富。 2)Python在數據科學和機器學習庫方面強大,JavaScript則在前端開發庫和框架上更勝一籌。 3)兩者的學習資源都豐富,但Python適合從官方文檔開始,JavaScript則以MDNWebDocs為佳。選擇應基於項目需求和個人興趣。

從C/C 轉向JavaScript需要適應動態類型、垃圾回收和異步編程等特點。 1)C/C 是靜態類型語言,需手動管理內存,而JavaScript是動態類型,垃圾回收自動處理。 2)C/C 需編譯成機器碼,JavaScript則為解釋型語言。 3)JavaScript引入閉包、原型鍊和Promise等概念,增強了靈活性和異步編程能力。

不同JavaScript引擎在解析和執行JavaScript代碼時,效果會有所不同,因為每個引擎的實現原理和優化策略各有差異。 1.詞法分析:將源碼轉換為詞法單元。 2.語法分析:生成抽象語法樹。 3.優化和編譯:通過JIT編譯器生成機器碼。 4.執行:運行機器碼。 V8引擎通過即時編譯和隱藏類優化,SpiderMonkey使用類型推斷系統,導致在相同代碼上的性能表現不同。

JavaScript在現實世界中的應用包括服務器端編程、移動應用開發和物聯網控制:1.通過Node.js實現服務器端編程,適用於高並發請求處理。 2.通過ReactNative進行移動應用開發,支持跨平台部署。 3.通過Johnny-Five庫用於物聯網設備控制,適用於硬件交互。

我使用您的日常技術工具構建了功能性的多租戶SaaS應用程序(一個Edtech應用程序),您可以做同樣的事情。 首先,什麼是多租戶SaaS應用程序? 多租戶SaaS應用程序可讓您從唱歌中為多個客戶提供服務

本文展示了與許可證確保的後端的前端集成,並使用Next.js構建功能性Edtech SaaS應用程序。 前端獲取用戶權限以控制UI的可見性並確保API要求遵守角色庫

JavaScript是現代Web開發的核心語言,因其多樣性和靈活性而廣泛應用。 1)前端開發:通過DOM操作和現代框架(如React、Vue.js、Angular)構建動態網頁和單頁面應用。 2)服務器端開發:Node.js利用非阻塞I/O模型處理高並發和實時應用。 3)移動和桌面應用開發:通過ReactNative和Electron實現跨平台開發,提高開發效率。


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

Dreamweaver CS6
視覺化網頁開發工具

禪工作室 13.0.1
強大的PHP整合開發環境

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。