亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

詳解JavaScript的另類寫法

2019-11-20 10:16:42
字體:
來源:轉載
供稿:網友

JavaScript 是屬于網絡的腳本語言!

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

JavaScript 是因特網上最流行的腳本語言。

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

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

匿名函數的N種寫法

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

(function(){})();

實際在項目上我們經常是在前面加上“;”:

;function(){}();

因為Js的語法是可以省略分號的,但是這種機制也會導致意外的錯誤。為了避免代碼上線后合并壓縮成一個文件造成語法錯誤,所以加上“;”可以避免未知錯誤。

但有時我們看見別人的庫或是插件里面會這樣寫匿名函數:

+function(){}();

“+”在這里是運算符,運算符具有極高的優先級,所以右邊的函數聲明加上括號的部分(實際上就是函數執行的寫法)就直接執行了。其實不止前面可以是“+”號,“-”、“!”、“~”、“++”等運算符均可。這里只是做擴展介紹,具體用哪種寫法看團隊統一規范。

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

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

>> var a1 = 1.23>> ~~a11>> var a2 = 2.345>> a2|02>> 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>{title}</h2>"+ "<div class='content' yAttr=''>{content}</div>"+ "</div>"

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

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

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

var rComment = ////*([/s/S]*?)/*///;// multiply string function ms(fn){ return fn.toString().match(rComment)[1]}; ms(function(){/* <div> <h2>{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.prototypeChild.prototype.constructor = Child ;

這種這種方法實際上是將Child.prototype和Parent.prototype中保存的指針指向了同一個對象,所以子對象原型中擴展一些屬性以便之后繼續繼承的話,父對象的原型也會被改寫。所以為了解決這個問題,嘗試借用一個臨時構造器的寫法:

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

這樣父對象的自身屬性和原型方法得到保護?!白顑灐庇悬c夸大,但是是相比較而言的。相信每個人都有自己的寫法,還有借用call和apply實現屬性繼承的優缺點,篇幅有限不一一介紹。

總結

上述所有的JavaScript的另類寫法,一些是為了程序易懂或者效率提高的語法糖,這樣的做法是比較可取的,比如前面所說的省略if-else的做法。一些是為了提升我們代碼的兼容性和性能,比如AMD和繼承的方式?!救瞬锁B一枚,上述內容肯定還有不全和沒解釋透徹的地方以后再補充。

以上內容是針對JavaScript的另類寫法的相關介紹,希望對大家有所幫助!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩色av导航| 国产欧美日韩精品丝袜高跟鞋| 九九热这里只有精品免费看| 亚洲高清色综合| 中文字幕久精品免费视频| 亚洲色图校园春色| 国产福利精品在线| 欧美午夜xxx| 欧美性xxxxx| 久久91精品国产91久久久| 成人h片在线播放免费网站| 国产日韩欧美中文在线播放| 国产z一区二区三区| 91精品国产免费久久久久久| yw.139尤物在线精品视频| 国产日韩欧美黄色| 不卡中文字幕av| 在线看片第一页欧美| 欧美激情精品久久久久| 亚洲国产精品成人va在线观看| 国产一区二区三区丝袜| 亚洲欧美精品中文字幕在线| 欧美情侣性视频| 一区二区欧美激情| 国产午夜精品全部视频播放| 久久久精品久久久| 欧美激情视频网址| 亚洲自拍偷拍福利| 国产精品视频免费观看www| 美女久久久久久久久久久| 亚洲在线第一页| 欧美在线激情视频| 91精品国产自产在线| 国产专区精品视频| 久久国产精品影视| 亚洲国产精品久久久久久| 亚洲理论电影网| 国产精品扒开腿做爽爽爽的视频| 久久亚洲成人精品| 狠狠躁夜夜躁久久躁别揉| 国产丝袜高跟一区| 欧洲美女免费图片一区| 欧美高清在线播放| 亚洲黄色免费三级| 国产91精品久| 久久久久久久网站| 亚洲人成电影网站色www| 日本精品在线视频| 精品成人乱色一区二区| 国产精品大片wwwwww| 国产精品久久在线观看| 久久夜色精品国产| 亚洲欧美一区二区三区在线| 最近2019年中文视频免费在线观看| 国产成人小视频在线观看| 国产香蕉97碰碰久久人人| 久久亚洲精品网站| 久国内精品在线| 欧美在线激情视频| 亚洲精品欧美日韩| 亚洲精品在线91| 亚洲福利视频免费观看| 高跟丝袜一区二区三区| 精品视频在线播放色网色视频| 国模视频一区二区三区| 欧美精品在线网站| 日韩在线视频网| 亚洲午夜久久久久久久| 欧美激情啊啊啊| 孩xxxx性bbbb欧美| 91久久久久久久久久| 久久99精品久久久久久琪琪| 国产精品国产自产拍高清av水多| 久久精品国产免费观看| 亚洲精品第一页| 欧美一级大片视频| 欧美精品久久久久久久久久| 国产精品一区二区三区在线播放| 欧美怡红院视频一区二区三区| 91精品国产综合久久香蕉922| 国产在线视频不卡| 日韩精品亚洲视频| 欧美日韩国产综合视频在线观看中文| 日本电影亚洲天堂| 久久亚洲精品成人| 欧美与黑人午夜性猛交久久久| 久久精品这里热有精品| 精品无人区乱码1区2区3区在线| 中文字幕欧美在线| 国产精品一区二区三区成人| 亚洲综合大片69999| 欧美巨大黑人极品精男| 日韩高清免费在线| 在线午夜精品自拍| 欧美成人午夜激情| 亚洲国产精品人人爽夜夜爽| 久久久久久国产精品三级玉女聊斋| 一二美女精品欧洲| 久久精彩免费视频| 理论片在线不卡免费观看| 亚洲变态欧美另类捆绑| 成人福利在线视频| 欧美一级成年大片在线观看| 91精品国产91久久久久久吃药| 久久五月天色综合| 成人黄色免费网站在线观看| 国内精品久久久| 精品国产拍在线观看| 国产欧美亚洲精品| 亚洲xxxx3d| 亚洲免费高清视频| 亚洲xxxx在线| 久久免费国产精品1| 午夜精品视频在线| 精品国产依人香蕉在线精品| 国产成人拍精品视频午夜网站| 国产成人精品免高潮费视频| 91美女片黄在线观看游戏| 日韩一区av在线| 日韩av第一页| 全球成人中文在线| 另类图片亚洲另类| 欧美成年人视频| 亚洲国产成人精品一区二区| 国产精品久久久亚洲| 欧亚精品中文字幕| 91久久久在线| 欧美性极品xxxx做受| 欧美日韩福利在线观看| 中文字幕视频在线免费欧美日韩综合在线看| 欧美精品性视频| y97精品国产97久久久久久| 亚洲乱码av中文一区二区| 精品中文字幕在线观看| 粉嫩老牛aⅴ一区二区三区| 成人亚洲欧美一区二区三区| 懂色aⅴ精品一区二区三区蜜月| 亚洲精品ady| 日韩精品极品在线观看| 国产成人激情视频| 久久久午夜视频| 国产在线999| 秋霞成人午夜鲁丝一区二区三区| 日韩a**站在线观看| 日韩国产在线看| 亚洲欧美日韩网| 欧美另类高清videos| 国产精自产拍久久久久久| 欧美夜福利tv在线| 欧美综合在线第二页| 久久久99免费视频| 欧美重口另类videos人妖| 欧美激情在线视频二区| 欧美成人全部免费| 国产亚洲xxx| 日韩av色在线| 国产丝袜视频一区| 亚洲第一精品夜夜躁人人躁| 国产精品午夜国产小视频| 一区二区三区精品99久久| 亚洲a区在线视频| 精品国产一区二区三区久久狼黑人| 日韩国产精品视频| 精品高清美女精品国产区|