摘要:構(gòu)造函數(shù)很多教程都告訴我們,不要直接用內(nèi)置對(duì)象的構(gòu)造函數(shù)來創(chuàng)建基本變量,例如的寫法就應(yīng)該用的寫法來取代。但是,構(gòu)造函數(shù)注意是大寫的有點(diǎn)特別。構(gòu)造函數(shù)接受的參數(shù)中,第一個(gè)是要傳入的參數(shù)名,第二個(gè)是函數(shù)內(nèi)的代碼用字符串來表示。
如何寫JavaScript才能逼格更高呢?怎樣才能組織JavaScript才能讓別人一眼看出你不簡單呢?是否很期待別人在看完你的代碼之后感嘆一句“原來還可以這樣寫”呢?下面列出一些在JavaScript時(shí)的裝逼技巧。
1. 匿名函數(shù)的N種寫法你知道“茴”的四種寫法嗎?ε=(?д?`*)??… 扯淡,但你或許不知道匿名函數(shù)的好幾種寫法。一般情況下寫匿名函數(shù)是這樣的:
(function(){})();
但下面幾種寫法也是可以的:
!function(){}();
+function(){}();
-function(){}();
~function(){}();
~(function(){})();
void function(){}();
(function(){}());
當(dāng)然,這樣的寫法,沒有什么區(qū)別,純粹看裝逼程度。
2. 另外一種undefined從來不需要聲明一個(gè)變量的值是undefined,因?yàn)镴avaScript會(huì)自動(dòng)把一個(gè)未賦值的變量置為undefined。所有如果你在代碼里這么寫,會(huì)被鄙視的:
var data = undefined;
但是如果你就是強(qiáng)迫癥發(fā)作,一定要再聲明一個(gè)暫時(shí)沒有值的變量的時(shí)候賦上一個(gè)undefined。那你可以考慮這么做:
var data = void 0; // undefined
void在JavaScript中是一個(gè)操作符,對(duì)傳入的操作不執(zhí)行并且返回undefined。void后面可以跟()來用,例如void(0),看起來是不是很熟悉?沒錯(cuò),在HTML里阻止帶href的默認(rèn)點(diǎn)擊操作時(shí),都喜歡把href寫成javascript:void(0),實(shí)際上也是依靠void操作不執(zhí)行的意思。
當(dāng)然,除了出于裝逼的原因外,實(shí)際用途上不太贊成使用void,因?yàn)関oid的出現(xiàn)是為了兼容早起ECMAScript標(biāo)準(zhǔn)中沒有undefined屬性。void 0的寫法讓代碼晦澀難懂。
3. 拋棄你的if和else當(dāng)JS代碼里有大量的條件邏輯判斷時(shí),那代碼看起來多可怕:
if () { // ... } else if () { // ... } else if () { // ... } else { // ... }
不用我說你都猜到用什么語法來簡化if-else了。沒錯(cuò),用||和&&,很簡單的原理就不用說啦。值得一提的是,有時(shí)候用!!操作符也能簡化if-else模式。例如這樣:
// 普通的if-else模式 var isValid = false; if (value && value !== "error") { isValid = true; } // 使用!!符號(hào) var isValid = !!(value && value !== "error");
“!”是取反操作,兩個(gè)“!”自然是負(fù)負(fù)得正了。
4. 不加分號(hào)關(guān)于JavaScript要不要加分號(hào)的爭論已經(jīng)吵了好幾年。Google的JavaScript語法指南告訴我們要加分號(hào),很多JavaScript語法書籍也告訴我們加上分號(hào)更安全。然而,分號(hào)加不加,全靠個(gè)人對(duì)代碼的寫法,你確信寫得足夠安全的話,不加分號(hào)顯得更加高大上。
5. 趕上ES6的早班車ES6即將在年底正式發(fā)布,趕時(shí)髦的開發(fā)者們,趕快在自己的代碼里用起來。用上module聲明,寫寫class,搗鼓一下Map,這些都會(huì)讓你的代碼逼格更高。神馬?你都不會(huì)用?那也好歹在代碼頭部加上一個(gè)ES5的"use strict";呀。
6. 添加AMD模塊支持給你寫的代碼聲明一下AMD模塊規(guī)范,這樣別人就可以直接通過AMD的規(guī)范來加載你的模塊了,如果別人沒有通過規(guī)范來加載你的模塊,你也可以優(yōu)雅地返回一個(gè)常規(guī)的全局對(duì)象。來看看jQueryUI的寫法:
(function( factory ) { if ( typeof define === "function" && define.amd ) { // AMD. Register as an anonymous module. define( [ "jquery" ], factory ); } else { // Browser globals factory( jQuery ); } }(function( $ ) { // 這里放模塊代碼 return $.widget; }));
就用它來包裹你的實(shí)際代碼吧,保證別人一看代碼就知道你是個(gè)專業(yè)的開發(fā)者。
7. Function構(gòu)造函數(shù)很多JavaScript教程都告訴我們,不要直接用內(nèi)置對(duì)象的構(gòu)造函數(shù)來創(chuàng)建基本變量,例如var arr = new Array(2); 的寫法就應(yīng)該用var arr = [1, 2];的寫法來取代。但是,F(xiàn)unction構(gòu)造函數(shù)(注意是大寫的Function)有點(diǎn)特別。Function構(gòu)造函數(shù)接受的參數(shù)中,第一個(gè)是要傳入的參數(shù)名,第二個(gè)是函數(shù)內(nèi)的代碼(用字符串來表示)。
var f = new Function("a", "alert(a)"); f("test"); // 將會(huì)彈出窗口顯示test
或許大家疑惑了,你這樣繞著寫,跟function f(a) {alert(a);}比有什么好處呢?
事實(shí)上在某種情況下是有好處的,比如不能用eval的時(shí)候,你需要傳入字符串內(nèi)容來創(chuàng)建一個(gè)函數(shù)的時(shí)候。在一些JavaScript模板語言的解析,和字符串轉(zhuǎn)換json對(duì)象的時(shí)候比較實(shí)用。
一個(gè)傲嬌的前端工程師是不需要jQuery的,前提是你經(jīng)得起折騰。實(shí)際上,幾乎所有的jQuery方法都可以用同樣的Dom原生接口來實(shí)現(xiàn),因?yàn)檫@貨本來就是用原生接口實(shí)現(xiàn)的嘛,哈哈。怎樣做到不用jQuery(也叫jQuery-free)呢?阮老師的博文《如何做到 jQuery-free?》 給我們很好的講解了做法。依賴于querySelector和querySelectorAll這兩個(gè)現(xiàn)代瀏覽器的接口,可以實(shí)現(xiàn)跟jQuery同樣方便和同樣效率的Dom查找,而且其他的類似Ajax和CSS的接口同樣也可以把原生方法做一些兼容方面的包裝即可做到j(luò)Query-free。
總結(jié)上述所有的JavaScript裝逼寫法,一些是為了程序易懂或者效率提高的語法糖,這樣的做法是比較可取的,比如前面所說的省略if-else的做法;而有些寫法則容易造成代碼晦澀難懂或者效率偏低,例如上面說的void 0的寫法,實(shí)際上不可取。JavaScript語法上靈活,讓大家對(duì)同一個(gè)功能有很多種不同的寫法,寫法上的優(yōu)化是對(duì)程序結(jié)構(gòu)和代碼維護(hù)有很大幫助的。所以,裝逼得裝得好看。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/78118.html
摘要:實(shí)用價(jià)值在于可以防止全局污染。別忘了有判定的當(dāng)然,很明顯,這只是基礎(chǔ),并不能更裝逼一點(diǎn)。祝愿大家越玩越牛逼從一行代碼里面學(xué)點(diǎn)深入淺出高級(jí)程序設(shè)計(jì)設(shè)計(jì)模式與開發(fā)實(shí)踐原文裝逼指南順便求實(shí)習(xí) Summary 本文秉承著 你看不懂是你sb,我寫的代碼就是牛逼 的理念來介紹一些js的裝逼技巧。 下面的技巧,后三個(gè),請(qǐng)謹(jǐn)慎用于團(tuán)隊(duì)項(xiàng)目中(主要考慮到可讀性的原因),不然,leader 可能請(qǐng)你喝茶。...
摘要:但是,構(gòu)造函數(shù)注意是大寫的有點(diǎn)特別。構(gòu)造函數(shù)接受的參數(shù)中,第一個(gè)是要傳入的參數(shù)名,第二個(gè)是函數(shù)內(nèi)的代碼用字符串來表示。 Javascript是一門很吊的語言,我可能學(xué)了假的JavaScript,哈哈,大家還有什么推薦的,補(bǔ)充送那啥邀請(qǐng)碼。 本文秉承著:你看不懂是你SB,我寫的代碼就要牛逼。 1、單行寫一個(gè)評(píng)級(jí)組件 ★★★★★☆☆☆☆☆.slice(5 - rate, 10 - rate...
摘要:但是,構(gòu)造函數(shù)注意是大寫的有點(diǎn)特別。構(gòu)造函數(shù)接受的參數(shù)中,第一個(gè)是要傳入的參數(shù)名,第二個(gè)是函數(shù)內(nèi)的代碼用字符串來表示。 Javascript是一門很吊的語言,我可能學(xué)了假的JavaScript,哈哈,大家還有什么推薦的,補(bǔ)充送那啥邀請(qǐng)碼。 本文秉承著:你看不懂是你SB,我寫的代碼就要牛逼。 1、單行寫一個(gè)評(píng)級(jí)組件 ★★★★★☆☆☆☆☆.slice(5 - rate, 10 - rate...
摘要:但是,構(gòu)造函數(shù)注意是大寫的有點(diǎn)特別。構(gòu)造函數(shù)接受的參數(shù)中,第一個(gè)是要傳入的參數(shù)名,第二個(gè)是函數(shù)內(nèi)的代碼用字符串來表示。 Javascript是一門很吊的語言,我可能學(xué)了假的JavaScript,哈哈,大家還有什么推薦的,補(bǔ)充送那啥邀請(qǐng)碼。 本文秉承著:你看不懂是你SB,我寫的代碼就要牛逼。 1、單行寫一個(gè)評(píng)級(jí)組件 ★★★★★☆☆☆☆☆.slice(5 - rate, 10 - rate...
閱讀 2332·2021-11-23 09:51
閱讀 1109·2021-11-18 10:02
閱讀 3512·2021-10-13 09:49
閱讀 1359·2021-09-22 14:57
閱讀 12262·2021-08-18 10:20
閱讀 1249·2019-08-30 15:55
閱讀 2301·2019-08-29 16:06
閱讀 3318·2019-08-29 11:14