最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解JavaScript的另類寫法

 更新時間:2016年04月11日 11:36:37   作者:IT程序獅  
這篇文章主要介紹了詳解JavaScript的另類寫法的相關(guān)資料,需要的朋友可以參考下

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

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

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

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

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

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

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

(function(){})();

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

;function(){}();

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

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

+function(){}();

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

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

也許在別的代碼中看到過這兩種符號~~和|0,直接看運行結(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),只是引用過來分析和說明下這種另類的寫法。簡單解釋,~是按位取反的運算符,可以將浮點數(shù)通過舍去小數(shù)點后面的所有位來轉(zhuǎn)換為整數(shù)。正整數(shù)可轉(zhuǎn)換為無符號的十六進制值。然后再取反一次(~~)負負得正,就得到原來的整數(shù)。就是這么任性不愛調(diào)方法,你說算不算也是一種優(yōu)化呢。

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

if和else也不是唯一

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

if (a===1) { //此處強烈建議用嚴格等于符號“===”,不會進行類型轉(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)

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

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

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

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

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

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

如果再添加各種屬性和參數(shù)進去,大、小引號混亂很容易報錯。然而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)缺點各異,各家方法不一一列舉,舉個常用的繼承方法為例,原型繼承:

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

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

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

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

總結(jié)

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

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

相關(guān)文章

  • JavaScript面向?qū)ο髮崿F(xiàn)放大鏡案例

    JavaScript面向?qū)ο髮崿F(xiàn)放大鏡案例

    這篇文章主要為大家詳細介紹了JavaScript面向?qū)ο髮崿F(xiàn)放大鏡案例,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • JS實現(xiàn)萬億數(shù)字轉(zhuǎn)中文的代碼詳解

    JS實現(xiàn)萬億數(shù)字轉(zhuǎn)中文的代碼詳解

    在軟件開發(fā)中,尤其是在中文處理的場景中,數(shù)字與語言的轉(zhuǎn)換是一個常見且具有挑戰(zhàn)性的任務,在一些業(yè)務系統(tǒng)中,可能需要將阿拉伯數(shù)字轉(zhuǎn)換為中文數(shù)字,本文將介紹如何使用 JavaScript 將數(shù)字轉(zhuǎn)換成中文,幫助開發(fā)者為相關(guān)的需求提供實現(xiàn)思路,需要的朋友可以參考下
    2024-12-12
  • js將json格式的對象拼接成復雜的url參數(shù)方法

    js將json格式的對象拼接成復雜的url參數(shù)方法

    下面小編就為大家?guī)硪黄猨s將json格式的對象拼接成復雜的url參數(shù)方法。小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-05-05
  • 關(guān)于JS中的apply,call,bind的深入解析

    關(guān)于JS中的apply,call,bind的深入解析

    下面小編就為大家?guī)硪黄P(guān)于JS中的apply,call,bind的深入解析。小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-04-04
  • js 排序動畫模擬 冒泡排序

    js 排序動畫模擬 冒泡排序

    在js中,想讓線程sleep一下確實不是一件簡單的事情,過多的使用定時器或者回調(diào)函數(shù),會讓復雜,凌亂,這時,可以考慮能否使用隊列來做一些簡
    2012-07-07
  • webpack自動引入打包資源HtmlWebpackPlugin的實現(xiàn)

    webpack自動引入打包資源HtmlWebpackPlugin的實現(xiàn)

    本文主要介紹了webpack自動引入打包資源HtmlWebpackPlugin的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-07-07
  • H5基于iScroll實現(xiàn)下拉刷新和上拉加載更多

    H5基于iScroll實現(xiàn)下拉刷新和上拉加載更多

    這篇文章主要為大家詳細介紹了H5基于iScroll實現(xiàn)下拉刷新和上拉加載更多效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • JavaScript阻止回車提交表單的方法

    JavaScript阻止回車提交表單的方法

    如何防止回車(enter)鍵提交表單,其實很簡單,就一句話。onkeydown="if(event.keyCode==13)return false;"把這句寫在from標簽里面就好了
    2015-12-12
  • 新發(fā)現(xiàn)一個騙鏈接的方法(js讀取cookies)

    新發(fā)現(xiàn)一個騙鏈接的方法(js讀取cookies)

    新發(fā)現(xiàn)一個騙鏈接的方法(js讀取cookies),需要的朋友可以參考下。
    2012-01-01
  • 如何用JS WebSocket實現(xiàn)簡單聊天

    如何用JS WebSocket實現(xiàn)簡單聊天

    這篇文章主要介紹了如何用JS WebSocket實現(xiàn)簡單聊天,對websocket感興趣的同學,可以參考下
    2021-05-05

最新評論

伊宁市| 巍山| 曲阜市| 海丰县| 融水| 炉霍县| 双柏县| 荔波县| 蛟河市| 泽普县| 蓝田县| 贵德县| 林芝县| 富源县| 长宁县| 陈巴尔虎旗| 富源县| 阿鲁科尔沁旗| 自治县| 通化市| 巴东县| 田阳县| 乌恰县| 普兰县| 方正县| 黄骅市| 高碑店市| 井研县| 绥阳县| 合川市| 茶陵县| 栖霞市| 永丰县| 凤台县| 通道| 镇雄县| 如皋市| 霍城县| 微山县| 阿克陶县| 黄龙县|