茄子在线看片免费人成视频,午夜福利精品a在线观看,国产高清自产拍在线观看,久久综合久久狠狠综合

    <s id="ddbnn"></s>
  • <sub id="ddbnn"><ol id="ddbnn"></ol></sub>

  • <legend id="ddbnn"></legend><s id="ddbnn"></s>

    詳解JavaScript的另類寫法
    來源:易賢網(wǎng) 閱讀:914 次 日期:2016-07-08 13:54:34
    溫馨提示:易賢網(wǎng)小編為您整理了“詳解JavaScript的另類寫法”,方便廣大網(wǎng)友查閱!

    這篇文章主要介紹了詳解JavaScript的另類寫法的相關(guān)資料,需要的朋友可以參考下

    JavaScript 是屬于網(wǎng)絡(luò)的腳本語言!

    JavaScript 被數(shù)百萬計的網(wǎng)頁用來改進(jìn)設(shè)計、驗(yàn)證表單、檢測瀏覽器、創(chuàng)建cookies,以及更多的應(yīng)用。

    JavaScript 是因特網(wǎng)上最流行的腳本語言。

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

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

    匿名函數(shù)的N種寫法

    Js的匿名函數(shù)是未申明函數(shù)名的自執(zhí)行函數(shù),格式如下:

    (function(){})();

    實(shí)際在項(xiàng)目上我們經(jīng)常是在前面加上“;”:

    ;function(){}();

    因?yàn)镴s的語法是可以省略分號的,但是這種機(jī)制也會導(dǎo)致意外的錯誤。為了避免代碼上線后合并壓縮成一個文件造成語法錯誤,所以加上“;”可以避免未知錯誤。

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

    +function(){}();

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

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

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

    >> 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

    注明下,這種寫法不是原創(chuàng),只是引用過來分析和說明下這種另類的寫法。簡單解釋,~是按位取反的運(yùn)算符,可以將浮點(diǎn)數(shù)通過舍去小數(shù)點(diǎn)后面的所有位來轉(zhuǎn)換為整數(shù)。正整數(shù)可轉(zhuǎn)換為無符號的十六進(jìn)制值。然后再取反一次(~~)負(fù)負(fù)得正,就得到原來的整數(shù)。就是這么任性不愛調(diào)方法,你說算不算也是一種優(yōu)化呢。

    注意:如果需要做嚴(yán)格的四舍五入運(yùn)算就要慎用此方法,那就還是得用Math函數(shù)。

    if和else也不是唯一

    用if-else的條件判斷是很清晰的邏輯,在處理數(shù)據(jù)量不大情況下看起就不是很簡潔:

    if (a===1) { //此處強(qiáng)烈建議用嚴(yán)格等于符號“===”,不會進(jìn)行類型轉(zhuǎn)換

    a=2

    } else if (a===3) {

    a=4

    } else {

    a=5

    }

    看看用||和&&給代碼瘦身后:

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

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

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

    這種寫法看起來結(jié)構(gòu)是夠簡化,但是別人看你的代碼會有點(diǎn)吃力。

    用toString替代煩人的字符串拼接DOM結(jié)構(gòu)

    如果要動態(tài)生成一個dom結(jié)構(gòu)一般我們是這樣實(shí)現(xiàn)的 :

    var template = "<div>"

    + "<h2>{title}</h2>"

    + "<div class='content' yAttr=''>{content}</div>"

    + "</div>"

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

    var template = <div> 

    <h2>{title}</h2> 

    <div class='content' yAttr=''>{content}</div> 

    </div>

    可問題是ES6現(xiàn)在還未正式來啊…不怕,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> */

    })

    這里的輸出和前面的字符串輸出一樣一樣滴,前端程序猿們只需要關(guān)注自己的dom結(jié)構(gòu)就好了。

    添加AMD模塊支持,提示代碼B格

    給你寫的代碼聲明一下AMD(異步模塊定義,Asynchronous Module Definition)模塊規(guī)范,這樣別人就可以直接通過AMD的規(guī)范來加載你的模塊了,如果別人沒有通過規(guī)范來加載你的模塊,你也可以優(yōu)雅地返回一個常規(guī)的全局對象。來看看jQueryUI的寫法:

    (function( factory ) { 

    if ( typeof define === "function" && define.amd ) { 

    // AMD模式。且依賴"jQuery"這個插件 

    define( [ "jquery" ], factory ); } 

    else { 

    // 瀏覽器全局模式 

    factory( jQuery ); 

    }(function( $ ) { 

    // 這里放模塊代碼 

    return $.widget; 

    }));

    改成AMD模塊的結(jié)構(gòu),讓你的代碼更適于瀏覽器端加載腳本依賴,按照這種格式來寫代碼,保證別人一看代碼就知道你是個專業(yè)的開發(fā)者。

    繼承最優(yōu)法

    JavaScript的靈活性,大大小小的繼承方式有十余種之多。每種寫法優(yōu)缺點(diǎn)各異,各家方法不一一列舉,舉個常用的繼承方法為例,原型繼承:

    function Parent() {}

    function Child() {}

    Child.prototype = Parent.prototype

    Child.prototype.constructor = Child ;

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

    function Empty(){}

    Empty.prototype = Parent.prototype;

    Child.prototype = new Empty();

    Child.prototype.constructor = Child;

    這樣父對象的自身屬性和原型方法得到保護(hù)?!白顑?yōu)”有點(diǎn)夸大,但是是相比較而言的。相信每個人都有自己的寫法,還有借用call和apply實(shí)現(xiàn)屬性繼承的優(yōu)缺點(diǎn),篇幅有限不一一介紹。

    總結(jié)

    上述所有的JavaScript的另類寫法,一些是為了程序易懂或者效率提高的語法糖,這樣的做法是比較可取的,比如前面所說的省略if-else的做法。一些是為了提升我們代碼的兼容性和性能,比如AMD和繼承的方式。……本人菜鳥一枚,上述內(nèi)容肯定還有不全和沒解釋透徹的地方以后再補(bǔ)充。

    以上內(nèi)容是針對JavaScript的另類寫法的相關(guān)介紹,希望對大家有所幫助!

    更多信息請查看網(wǎng)絡(luò)編程
    易賢網(wǎng)手機(jī)網(wǎng)站地址:詳解JavaScript的另類寫法
    由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!

    2026上岸·考公考編培訓(xùn)報班

    • 報班類型
    • 姓名
    • 手機(jī)號
    • 驗(yàn)證碼
    關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機(jī)站點(diǎn) | 投訴建議
    工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網(wǎng)安備53010202001879號 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號
    云南網(wǎng)警備案專用圖標(biāo)
    聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號:hfpxwx
    咨詢QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)
    云南網(wǎng)警報警專用圖標(biāo)