搜尋
首頁web前端js教程詳解JavaScript的另類寫法_javascript技巧

JavaScript 是屬於網路的腳本語言!

JavaScript 被數百萬計的網頁用來改進設計、驗證表單、偵測瀏覽器、建立cookies,以及更多的應用程式。

JavaScript 是因特網路上最受歡迎的腳本語言。

JavaScript 很容易使用!你一定會喜歡它的!

JavaScript一種解釋型的腳本語言,語法靈活,讓不同的人對同一個功能有很多種不同的寫法。怎樣組織JavaScript程式碼才能讓別人一眼看出你不簡單呢?是否很期待別人看完你的程式碼後感嘆一句「原來還可以這樣寫」呢?

匿名函數的N種寫法

Js的匿名函數是未申明函數名的自執行函數,格式如下:

(function(){})();

實際上在專案上我們常常在前面加上「;」:

;function(){}();

因為Js的語法是可以省略分號的,但是這種機制也會導致意外的錯誤。為了避免程式碼上線後合併壓縮成一個檔案造成語法錯誤,所以加上「;」可以避免未知錯誤。

但有時候我們看見別人的函式庫或是外掛裡面會這樣寫匿名函數:

+function(){}();

「+」在這裡是運算符,運算符具有極高的優先權,所以右邊的函數宣告加上括號的部分(其實就是函數執行的寫法)就直接執行了。其實不只前面可以是「+」號,「-」、「!」、「~」、「++」等運算子皆可。這裡只是做擴展介紹,具體用哪一種寫法看團隊統一規範。

拋棄Math.ceil()和Math.floor取整

也許在別的程式碼中看過這兩種符號~~和|0,直接看運行結果:

>> var a1 = 1.23
>> ~~a1
1
>> var a2 = 2.345
>> a2|0
2
>> var a3 = -3.45
>> ~~a3
-3
>> var a4 = -4.5
>> a4|0
-4

註明下,這種寫法不是原創,只是引用過來分析和說明下這種另類的寫法。簡單解釋,~是位元取反的運算符,可以將浮點數透過捨去小數點後面的所有位元來轉換為整數。正整數可轉換為無符號的十六進位值。然後再取反一次(~~)負負得正,就得到原來的整數。就是這麼任性不愛調方法,你說算不算也是一種優化。

注意:如果需要做嚴格的四捨五入運算就要慎用此方法,那就還是得用Math函數。

if和else也不是唯一

用if-else的條件判斷是很清晰的邏輯,在處理資料量不大情況下看起就不是很簡潔:

if (a===1) { //此处强烈建议用严格等于符号“===”,不会进行类型转换
a=2
} else if (a===3) {
a=4
} else {
a=5
}

看看用||和&&給程式碼瘦身後:

((a===1)&&(true,a=2))||((a===3)&&(true,a=4))||(a=5)

一行就搞定,瘦身成功。 ||和&&,很簡單的原理就不用說啦,裡面用到逗號運算符還不容易理解,可以繼續換成三元運算符:

(a===1 )? a=2:( (a===3) ? (a=4) : (a=5) )

這種寫法看起來結構是夠簡化,但別人看你的程式碼會有點吃力。

用toString取代煩人的字串拼接DOM結構

如果要動態產生一個dom結構一般我們是這樣實現的 :

var template = "<div>" 
+ "<h2 id="title">{title}</h2>"
+ "<div class='content' yAttr=''>{content}</div>"
+ "</div>"

如果再增加各種屬性和參數進去,大、小引號混亂很容易報錯。然而ES6提供了Template String幫我們解決了這個問題,你可以這樣寫:

var template = <div> 
<h2 id="title">{title}</h2> 
<div class='content' yAttr=''>{content}</div> 
</div>

 可問題是ES6現在還沒正式來啊…不怕,function.toString來解決我們青黃不接時的尷尬:

var rComment = /\/\*([\s\S]*&#63;)\*\//;
// multiply string 
function ms(fn){ 
return fn.toString().match(rComment)[1]
}; 
ms(function(){/* 
<div> 
<h2 id="title">{title}</h2> 
<div class='content' yAttr=''>{content}</div> 
</div> */
})

這裡的輸出和前面的字串輸出一樣一樣滴,前端程式猿們只需要專注在自己的dom結構上就好了。

新增AMD模組支持,提示代碼B格

給你寫的程式碼聲明一下AMD(非同步模組定義,Asynchronous Module Definition)模組規範,這樣別人就可以直接透過AMD的規範來載入你的模組了,如果別人沒有透過規範來載入你的模組,你也可以優雅地傳回一個常規的全域物件。來看看jQueryUI的寫法:

(function( factory ) { 
if ( typeof define === "function" && define.amd ) { 
// AMD模式。且依赖"jQuery"这个插件 
define( [ "jquery" ], factory ); } 
else { 
// 浏览器全局模式 
factory( jQuery ); 
} 
}(function( $ ) { 
// 这里放模块代码 
return $.widget; 
}));

改成AMD模組的結構,讓你的程式碼更適合瀏覽器端載入腳本依賴,按照這個格式來寫程式碼,保證別人一看程式碼就知道你是個專業的開發者。

繼承最優法

JavaScript的彈性,大大小小的繼承方式有十餘種之多。每種寫法優缺點各異,各家方法不一一列舉,舉個常用的繼承方法為例,原型繼承:

function Parent() {}
function Child() {}
Child.prototype = Parent.prototype
Child.prototype.constructor = Child ;

这种这种方法实际上是将Child.prototype和Parent.prototype中保存的指针指向了同一个对象,所以子对象原型中扩展一些属性以便之后继续继承的话,父对象的原型也会被改写。所以为了解决这个问题,尝试借用一个临时构造器的写法:

function Empty(){}
Empty.prototype = Parent.prototype;
Child.prototype = new Empty();
Child.prototype.constructor = Child;

这样父对象的自身属性和原型方法得到保护。“最优”有点夸大,但是是相比较而言的。相信每个人都有自己的写法,还有借用call和apply实现属性继承的优缺点,篇幅有限不一一介绍。

总结

上述所有的JavaScript的另类写法,一些是为了程序易懂或者效率提高的语法糖,这样的做法是比较可取的,比如前面所说的省略if-else的做法。一些是为了提升我们代码的兼容性和性能,比如AMD和继承的方式。……本人菜鸟一枚,上述内容肯定还有不全和没解释透彻的地方以后再补充。

以上内容是针对JavaScript的另类写法的相关介绍,希望对大家有所帮助!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
使用Next.js(後端集成)構建多租戶SaaS應用程序使用Next.js(後端集成)構建多租戶SaaS應用程序Apr 11, 2025 am 08:23 AM

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

如何使用Next.js(前端集成)構建多租戶SaaS應用程序如何使用Next.js(前端集成)構建多租戶SaaS應用程序Apr 11, 2025 am 08:22 AM

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

JavaScript:探索網絡語言的多功能性JavaScript:探索網絡語言的多功能性Apr 11, 2025 am 12:01 AM

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

JavaScript的演變:當前的趨勢和未來前景JavaScript的演變:當前的趨勢和未來前景Apr 10, 2025 am 09:33 AM

JavaScript的最新趨勢包括TypeScript的崛起、現代框架和庫的流行以及WebAssembly的應用。未來前景涵蓋更強大的類型系統、服務器端JavaScript的發展、人工智能和機器學習的擴展以及物聯網和邊緣計算的潛力。

神秘的JavaScript:它的作用以及為什麼重要神秘的JavaScript:它的作用以及為什麼重要Apr 09, 2025 am 12:07 AM

JavaScript是現代Web開發的基石,它的主要功能包括事件驅動編程、動態內容生成和異步編程。 1)事件驅動編程允許網頁根據用戶操作動態變化。 2)動態內容生成使得頁面內容可以根據條件調整。 3)異步編程確保用戶界面不被阻塞。 JavaScript廣泛應用於網頁交互、單頁面應用和服務器端開發,極大地提升了用戶體驗和跨平台開發的靈活性。

Python還是JavaScript更好?Python還是JavaScript更好?Apr 06, 2025 am 12:14 AM

Python更适合数据科学和机器学习,JavaScript更适合前端和全栈开发。1.Python以简洁语法和丰富库生态著称,适用于数据分析和Web开发。2.JavaScript是前端开发核心,Node.js支持服务器端编程,适用于全栈开发。

如何安裝JavaScript?如何安裝JavaScript?Apr 05, 2025 am 12:16 AM

JavaScript不需要安裝,因為它已內置於現代瀏覽器中。你只需文本編輯器和瀏覽器即可開始使用。 1)在瀏覽器環境中,通過標籤嵌入HTML文件中運行。 2)在Node.js環境中,下載並安裝Node.js後,通過命令行運行JavaScript文件。

在Quartz中如何在任務開始前發送通知?在Quartz中如何在任務開始前發送通知?Apr 04, 2025 pm 09:24 PM

如何在Quartz中提前發送任務通知在使用Quartz定時器進行任務調度時,任務的執行時間是由cron表達式設定的。現�...

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

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

SublimeText3 Mac版

SublimeText3 Mac版

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