當前位置:首頁 » 網頁前端 » web中的if語句反選
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

web中的if語句反選

發布時間: 2022-09-25 06:07:15

㈠ if (element.src.match("bulbon")) 這邊的「bulbon」是什麼意思

element.src.match("bulbon")意思是 Src路徑里有bulbon匹配則為true。

如果一開始的圖片是/i/eg_bulbon.gif,那麼就會匹配到bulbon,if語句為ture,執行if語句,圖片轉換為/i/eg_bulboff.gif。

如果沒匹配到bulbon,執行else語句,圖片轉換為/i/eg_bulbon.gif。這樣就實現了用js對html圖片的改變。

(1)web中的if語句反選擴展閱讀:

JavaScript腳本語言具有以下特點:

(1)腳本語言。JavaScript是一種解釋型的腳本語言,C、C++等語言先編譯後執行,而JavaScript是在程序的運行過程中逐行進行解釋。

(2)基於對象。JavaScript是一種基於對象的腳本語言,它不僅可以創建對象,也能使用現有的對象。

(3)簡單。JavaScript語言中採用的是弱類型的變數類型,對使用的數據類型未做出嚴格的要求,是基於Java基本語句和控制的腳本語言,其設計簡單緊湊。

(4)動態性。JavaScript是一種採用事件驅動的腳本語言,它不需要經過Web伺服器就可以對用戶的輸入做出響應。在訪問一個網頁時,滑鼠在網頁中進行滑鼠點擊或上下移、窗口移動等操作JavaScript都可直接對這些事件給出相應的響應。

(5)跨平台性。JavaScript腳本語言不依賴於操作系統,僅需要瀏覽器的支持。因此一個JavaScript腳本在編寫後可以帶到任意機器上使用,前提上機器上的瀏覽器支 持JavaScript腳本語言,目前JavaScript已被大多數的瀏覽器所支持。

㈡ Web前端工程師要知道的常見錯誤

今天小編要跟大家分享的文章是關於Web前端工程師要知道的常見錯誤。熟悉web前端開發工作的小夥伴們都知道web開發中會有很多錯誤的做法,以及如何避免這些錯誤。幫助你在開發工作中,輕松避開那些不必要的坑!下面來和小編一起看一看吧!

一、寫一些過時的HTML


錯誤:早期的互聯網比起我們現在,標記的選擇要少得多。然而,舊習難改,現在很多開發人員寫的HTML就好像還身處20世紀一樣。舉例來說,我們使用

元素用於布局,當其他特定語義標簽更適合的時候使用
元素,在當前HTML標准不受支持的時候使用
標簽,在頁面上間隔項目,如果有大量_址堤宓幕啊


影響:遵從這種過時的HTML規則可能會導致標記過於復雜,結果是在不同的瀏覽器中發生不同的行為。而且沒有了改進瀏覽器的動力,因為沒有必要更新到最新的瀏覽器,如Microsoft
Edge,哪怕是InternetExplorer版本(11、10、9)也變得沒有必要。


如何避免:停止使用
元素用於內容布局,限制使用
元素來顯示表格數據。例如可以去#了解當前可用的標記選項。使用HTML去描述內容是什麼,而不是說明內容如何展現。


二、「明明在我的瀏覽器中是可行的......」


錯誤:開發人員往往會偏愛某一個特定的瀏覽器,或者特別討厭某一個,可能主要是因為對測試網頁視圖有所偏見。也有可能是因為從網上找到的代碼示例不能保證會如何呈現在其他瀏覽器中。此外,一些瀏覽器對風格有不同的默認值。


影響:以某一個瀏覽器為中心寫的網站,在其他瀏覽器中顯示時,其質量將會很差。如何避免:在開發過程中,在所有瀏覽器和版本中測試網頁是不切實際的。不過,每隔一段時間,在多個瀏覽器中檢查網站的樣子不失為一個好方法。現在,不管你偏好的是什麼平台,總有免費的工具可用:免費的虛擬機、網站掃描儀。Visual
Studio等工具還可以調用多個瀏覽器,來顯示你正在工作的單一頁面。


三、不好的格式


錯誤:提示用戶提供信息(特別是在輸入文本欄位的時候),並假設數據會如預期接收。


影響:很多事情會(或者很有可能將會)出錯,當我們信任用戶輸入的時候。如果無法提供所需的數據,或接收到的數據不能與下面的數據模式兼容,頁面可能會失敗。更為嚴重的是,有的用戶可能會故意違背網站的資料庫,例如可以通過注入式攻擊(見OWASP:Top
102013-A1-Injections)。


如何避免:你首先要做的事是確保用戶清楚你需要什麼類型的數據。比如說,如果你只說要地址,那用戶不知道指的是單位,家庭還是電子郵件的地址!除了要具體,還要充分利用現在的HTML提供的數據驗證技術。不管數據在瀏覽器端是如何驗證的,確保它始終也在伺服器端驗證。不要讓一個串接的T-SQL語句使用來自於用戶輸入的,各個欄位的類型沒有經過確認的數據。


四、臃腫的響應結果


錯誤:頁面充滿了許多高品質的圖形和/或圖片,這些圖形和/或圖片藉助img元素的高度和寬度屬性按比例縮小。來自於頁面鏈接的文件,如CSS和JavaScript,很大。源HTML標記也可能是不必要的復雜和全面。


影響:完全渲染頁面的時間是如此之久,以致於一些用戶放棄了,或者甚至於直接不耐煩地重新請求整個頁面。在某些情況下,如果頁面處理等待太久,會出現錯誤。如何避免:不要抱有現在互聯網接入越來越快的僥幸心態——從而允許臃腫的場景。相反,要將從瀏覽器到你的網站的來回當為一種成本。圖像是網頁臃腫的主要罪犯。為了最大限度地減少圖像成本,減輕頁面載入的壓力,可以試試以下三個技巧:


§問問你自己:「這些圖形真的有必要嗎?」刪除不需要的圖片。


§使用例如ShrinkO』Matic或RIOT的工具來減少圖像文件大小。


§預載入圖像。這不會提高初始下載的成本,但可以讓網站其他頁面圖像載入速度更快。


另一種減少成本的方式是壓縮CSS和JavaScript鏈接文件。有很多的工具,如MinifyCSS和MinifyJS都能幫你做到。


五、創建所謂「應該能行」的代碼


錯誤:無論是JavaScript,還是在伺服器上運行的代碼,開發人員都需要測試並確認它是否可以正常工作,而不是在部署了之後,就認為它應該就能從一而終地運行。


影響:不經過適當錯誤檢查的網站就是對最終用戶耍流氓。不僅會極大地影響用戶體驗,而且其錯誤消息內容的類型可能會給黑客線索來滲透這個站點。


如何避免:是人都會犯錯,這個哲理同樣適用於編碼。使用JavaScript,一定要實施好的技術來防止並抓住錯誤。雖然這篇文章描繪了用JavaScript編碼Windows應用程序,但是大部分的內容也適用於web開發,許多提示都很不錯!另一種能讓代碼變得可靠又能在未來變化中存活下來的方法是單元測試。


如果我們夠仔細,那麼就能捕捉到伺服器端的代碼失敗,而不被用戶發現。只顯示必要的信息,並且一定要確保設置友好的錯誤頁面,如HTTP404s。


六、寫分叉代碼


錯誤:本著支持所有瀏覽器和版本的崇高理念,開發人員立志創建可對任意可能情況作出回應的代碼。代碼中if語句成堆,所有方向都有分叉。


影響:隨著瀏覽器新版本的更新,代碼文件會變得越來越笨拙和難以管理。


如何避免:實現代碼的功能檢測和瀏覽器/版本檢測。功能檢測技術不僅可以顯著減少代碼量,還更易於閱讀和管理。不妨考慮使用如Modernizr這樣的庫,不僅有助於功能檢測,還能自動幫助提供不能跟上HTML5和CSS3速度的舊版瀏覽器的反饋支持。


七、非響應式設計


錯誤:假設開發/設計人員在相同尺寸的顯示器上開發網站。


影響:當在移動設備或在非常大的屏幕查看網站時,用戶體驗要麼很難看到頁面的重要方面,要麼甚至要時刻注意著不導航至其他網頁。


如何避免:響應式的思維方式。在網站中使用響應式設計。這里有一些關於這方面的實用教程,包括響應式圖片,還有一個非常受歡迎的庫,那就是Bootstrap。


八、製作無意義的頁面


錯誤:製作面向公眾內容的網頁才是有用的,絕不能不提供關於搜索引擎的任何線索。沒有實現可訪問性功能。


影響:如果不能讓搜索引擎發現網頁,那麼,可能會只有少量或根本沒有訪問。


如何避免:使用SEO(搜索引擎優化)和HTML的支持可訪問性。關於SEO,一定要添加標簽以提供有意義的網頁關鍵字和描述。About
Tech就寫得很好,可以借鑒。為了能有更好的可訪問性功能體驗,請對每一個img和area標簽提供一個alt="yourimagedescription"
屬性。更多建議請見AboutTech。你也可以在CynthiaSays測試公共網頁,看它是否兼容Section508。


九、網站過多刷新


錯誤:創建的網站需要為每一個互動而全面刷新頁面。


影響:類似於頁面臃腫(參見#4),頁面載入時間的性能會受到影響。用戶體驗缺乏流暢性,並且每次互動都可能導致網頁短暫(或長時間)的復位。


如何避免:快速避免這種情況的一個方法就是,通過測定回發到伺服器的內容是否是真正需要的。例如,當不依賴伺服器端資源的時候,客戶端腳本可用於提供直接結果。你也可以應用AJAX技術或進一步使用單頁的應用程序「SPA」方法。流行的JavaScript庫/框架,如JQuery、KnockoutJS和AngularJS,能讓這些方法的採用變得容易得多。


十、做了太多的無用功


錯誤:開發人員花了很長的時間來創建web內容。大量的時間花在了重復的任務上,或者自己敲代碼寫了很多。


影響:初始網站的發布和後續的更新時間過於冗長。如果其他開發人員也在在做同樣的工作,卻用了更少的時間和精力,那麼你的開發價值顯然就低了。手動勞動很容易出現錯誤,而排除故障錯誤需要更多的時間。


如何避免:探索你的選擇。在開發的每一個階段考慮使用新的工具和新的流程技術。例如,你目前使用的代碼編輯器相比SublimeText和Visual
Studio,如何?不管你使用的是什麼樣的代碼編輯器,你最近有好好鑽研它的功能嗎?也許只投入稍稍一點時間去仔細閱讀文檔,就可以發現做事的新方法,為今後節省一個又一個小時的時間。例如,在這篇文章中,擴展Visual
Studio可以為web開發人員提高生產效率。


不要錯過網上可用的幫助工具!例如,檢查在dev.modern.ie上的工具以簡化測試(跨多個平台和設備)以及排除故障。


你也可以通過實現流程自動化以減少時間和錯誤。這方面的例子是使用Grunt工具,例如它的自動化功能可以減小文件(見第4點)。另一個例子是Bower,可以協助管理庫/框架(參見第9點)。


至於web伺服器本身?在例如MicrosoftAzureWeb
Apps的幫助下,你可以快速創建一個網站,幾乎所有的開發場景都可以很輕輕鬆鬆地規模化到你的業務中!


總結:


通過識別這些常見的錯誤,web開發人員可以避免很多讓其他人飽受煎熬的挫折。我們不僅需要承認錯誤,還應該清楚錯誤的影響,並採取措施避免錯誤,這樣才能有更好的開發表現——並有信心完成任務!


以上就是小編今天為大家分享的關於Web前端工程師要知道的常見錯誤的文章,希望本篇文章能夠對正在從事web前端工作的小夥伴們有所幫助,想要了解更多web前端相關知識記得關注北大青鳥web培訓官網,最後祝願小夥伴們工作順利,成為一名優秀的web前端工程師!


譯文鏈接:#/article/10-mistakes-web-developer-make.html


英文原文:


翻譯作者:碼農網_小峰


㈢ Web前端初學者要知道的JavaScript技巧

今天小編要跟大家分享的文章是關於Web前端初學者要知道的JavaScript技巧。本篇文章小編為大家准備了一些JavaScript的編程技巧。熟悉Web前端工作的小夥伴都知道JavaScript的重要性。這篇文章是為初學者准備的,但我希望即使是中級JavaScript開發人員也能在這個列表中找到一些新的東西。下面我們一起來看一看吧!

1、...過濾唯一值


Set對象類型是在ES6中引入的,配合展開操作...一起,我們可以使用它來創建一個新數組,該數組只有唯一的值。constarray=[1,1,2,3,5,5,1]

constuniqueArray=[...newSet(array)];

console.log(uniqueArray);//Result:[1,2,3,5]

在ES6之前,隔離惟一值將涉及比這多得多的代碼。


此技巧適用於包含基本類型的數組:undefined,null,boolean,string和number。
(如果你有一個包含對象,函數或其他數組的數組,你需要一個不同的方法!)


2、與或運算


三元運算符是編寫簡單(有時不那麼簡單)條件語句的快速方法,如下所示:x>100?'Above100':'Below100'

x>100?(x>200?'Above200':'Between100-200'):'Below100'

但有時使用三元運算符處理也會很復雜。相反,我們可以使用'與'&&和'或'||邏輯運算符以更簡潔的方式書寫表達式。
這通常被稱為「短路」或「短路運算」。


它是怎麼工作的


假設我們只想返回兩個或多個選項中的一個。


使用&&將返回第一個條件為假的值。如果每個操作數的計算值都為true,則返回最後一個計算過的表達式。letone=1,two=2,three=3;

console.log(one&&two&&three);//Result:3

console.log(0&&null);//Result:0

使用||將返回第一個條件為真的值。如果每個操作數的計算結果都為false,則返回最後一個計算過的表達式。letone=1,two=2,three=3;

console.log(one||two||three);//Result:1

console.log(0||null);//Result:null

例一


假設我們想返回一個變數的長度,但是我們不知道變數的類型。


我們可以使用if/else語句來檢查foo是可接受的類型,但是這可能會變得非常冗長。或運行可以幫助我們簡化操作:


return(foo||[]).length


如果變數foo是true,它將被返回。否則,將返回空數組的長度:0。


例二


你是否遇到過訪問嵌套對象屬性的問題?你可能不知道對象或其中一個子屬性是否存在,這可能會導致令人沮喪的錯誤。


假設我們想在this.state中訪問一個名為data的屬性,但是在我們的程序成功返回一個獲取請求之前,data是未定義的。


根據我們使用它的位置,調用this.state.data可能會阻止我們的應用程序運行。為了解決這個問題,我們可以將其做進一步的判斷:if(this.state.data){

returnthis.state.data;

}else{return'FetchingData'

}

但這似乎很重復。'或'運算符提供了更簡潔的解決方案:


return(this.state.data||'FetchingData');


一個新特性:OptionalChaining


過去在Object屬性鏈的調用中,很容易因為某個屬性不存在而導致之後出現Cannotreadpropertyxxx
ofundefined的錯誤。


那optionalchaining就是添加了?.這么個操作符,它會先判斷前面的值,如果是null或undefined,就結束調用、返回
undefined。


例如,我們可以將上面的示例重構為this.state.data?.()。或者,如果我們主要關注state是否已定義,我們可以返回
this.state?.data。


該提案目前處於第1階段,作為一項實驗性功能。你可以在這里閱讀它,你現在可以通過Babel使用你的JavaScript,將
@babel/plugin-proposal-optional-chaining添加到你的.babelrc文件中。


3、轉換為布爾值


除了常規的布爾值true和false之外,JavaScript還將所有其他值視為『truthy』或『falsy』。


除非另有定義,否則JavaScript中的所有值都是'truthy',除了0,「」,null,undefined,NaN,當然還有
false,這些都是'falsy'


我們可以通過使用負算運算符輕松地在true和false之間切換。它也會將類型轉換為「boolean」。constisTrue=!0;

constisFalse=!1;

constalsoFalse=!!0;

console.log(isTrue);//Result:true

console.log(typeoftrue);//Result:"boolean"

4、轉換為字元串


要快速地將數字轉換為字元串,我們可以使用連接運算符+後跟一組空引號""。

constval=1+"";

console.log(val);//Result:"1"

console.log(typeofval);//Result:"string"

5、轉換為數字


使用加法運算符+可以快速實現相反的效果。

letint="15";int=+int;

console.log(int);//Result:15

console.log(typeofint);Result:"number"

這也可以用於將布爾值轉換為數字,如下所示

console.log(+true);//Return:1

console.log(+false);//Return:0

在某些上下文中,+將被解釋為連接操作符,而不是加法操作符。當這種情況發生時(你希望返回一個整數,而不是浮點數),您可以使用兩個波浪號:
~~。


連續使用兩個波浪有效地否定了操作,因為—_(_—_n_—_1)_—_1=n+1_—_1=n。換句話說,~—16等於15。

constint=~~"15"console.log(int);//Result:15

console.log(typeofint);

Result:"number"

雖然我想不出很多用例,但是按位NOT運算符也可以用在布爾值上:~true=-2和~false=-1。


6、性能更好的運算


從ES7開始,可以使用指數運算符**作為冪的簡寫,這比編寫Math.pow(2,3)更快。
這是很簡單的東西,但它之所以出現在列表中,是因為沒有多少教程更新過這個操作符。


console.log(2**3);//Result:8


這不應該與通常用於表示指數的^符號相混淆,但在JavaScript中它是按位異或運算符。


在ES7之前,只有以2為基數的冪才存在簡寫,使用按位左移操作符<<


Math.pow(2,n);


2<<(n-1);2**n;


例如,2<<3=16等於2**4=16。


7、快速浮點數轉整數


如果希望將浮點數轉換為整數,可以使用Math.floor()、Math.ceil()或Math.round()。但是還有一種更快的方法可以使用
|(位或運算符)將浮點數截斷為整數。

console.log(23.9|0);//Result:23

console.log(-23.9|0);//Result:-23

|的行為取決於處理的是正數還是負數,所以最好只在確定的情況下使用這個快捷方式。


如果n為正,則n|0有效地向下舍入。如果n為負數,則有效地向上舍入。
更准確地說,此操作將刪除小數點後面的任何內容,將浮點數截斷為整數。


你可以使用
~~來獲得相同的舍入效果,如上所述,實際上任何位操作符都會強制浮點數為整數。這些特殊操作之所以有效,是因為一旦強制為整數,值就保持不變。


刪除最後一個數字


按位或運算符還可以用於從整數的末尾刪除任意數量的數字。這意味著我們不需要使用這樣的代碼來在類型之間進行轉換。

letstr="1553";

Number(str.substring(0,str.length-1));

相反,按位或運算符可以這樣寫:

console.log(1553/10|0)//Result:155

console.log(1553/100|0)//Result:15

console.log(1553/1000|0)//Result:1

8、類中的自動綁定


我們可以在類方法中使用ES6箭頭表示法,並且通過這樣做可以隱含綁定。這通常會在我們的類構造函數中保存幾行代碼,我們可以愉快地告別重復的表達式,例如
this.myMethod=this.myMethod.bind(this)

importReact,{Component}fromReact;

{

constructor(props){

super(props);

this.state={};

}

myMethod=()=>{

//Thismethodisboundimplicitly!}

render(){

return(

<>



{this.myMethod()}

㈣ javascript中 if(!-[1,])是什麼意思呀

這是一個判斷IE瀏覽器版本的精簡腳本

IE瀏覽器不管是什麼版本,總是跟Web標准有些不太兼容。對於代碼工作者來說,自然是苦不堪言,為了考慮IE的兼容問題,不管是寫 CSS 還是 JS,往往都要對 IE 特別對待,這就少不了做些判斷。本文不討論如何區分 IE 的樣式,僅是 JS 判定 IE 瀏覽器。
這個目前世界上最短的 Javascript 判定 IE 瀏覽器的方法來自俄羅斯!它已經在各版本的 IE 以及目前其他流行的瀏覽器上經過測試,基於 IE 的 Bug,微軟雖然已經意識到,但是從來沒有糾正過。
<script type=』text/javascript』>
var ie = !-[1,];
alert(ie);
</script>
以上代碼運行結果:IE 下返回true,其他標准瀏覽器返回false。!-[1,],僅僅只有 6 bytes!
不過如果反過來判斷,標准瀏覽器返回 true 而 IE 返回 false的話,則可以再縮短一個byte。
<script type=』text/javascript』>
notIe = -[1,];
if(-[1,]){
// 標准瀏覽器代碼
}else{
// IE Only的代碼
}
</script>
看完了這些,你們是不是很好奇這些是怎麼運行的?請繼續看下文。
這個 Bug 產生的原因是 IE 會添加一個空數組元素到數組元素的總數里。
[1,]. Length標准瀏覽器會返回 1 (基於標準的 ECMAscript ,在數組最後的逗號」,」會被忽略,這是為了方便在一列里顯示以及自動生成等),但是 IE 會返回 2。當你列印這個數組的時候 IE 將會返回 「1, 「,也就是兩個元素,而其他標准瀏覽器將會返回 「1″。
這很容易驗證,比如在 IE 和 FF中運行以下代碼:
<script type=』text/javascript』>
alert([,]==』,』);
//這是8個字元判定IE
</script>
[1,]實際上瀏覽器的操作是toString()轉換成字元串的操作,-[1,]是將字元串強制轉換為數字。而 IE 將會返回 NaN,但是遺憾的是 NaN 並不是一個數字,因為[1,]轉換成字元串後的」1,」裡面帶有逗號。而其他標准瀏覽器會返回 -1,這是一個非 0 的數字。
你知道,NaN 轉換成 Boolean 型將返回 false,所以-[1,]在 IE 下將返回 false。而任何非 0 的數字轉換成 Boolean 型(例如-1),在 標准瀏覽器下都將返回 true。所以我們得到了一個判定結果,!-[1,]在 IE 下返回true,而在其他標准瀏覽器下返回 false。也就達到了區分判定 IE 瀏覽器的目的。
當然,如前文所說,這個 Bug 其實微軟很早就已經知道,但是卻一直沒有去修復它,所以在未來的 > IE8 的 IE 瀏覽器也就不確定是否依舊可以,不過基本上這么多代的 IE 都沒有修復,未來的 IE 也不太會去修復的樣子。
以下是其他的一些區分判定 IE 瀏覽器的代碼,也可以參考下:
<script type=』text/javascript』>
// Option from Dean Edwards:
var ie = /*@cc_on!@*/false;
// Use the commented line:
var ie//@cc_on=1;
// Variation (shorter variable):
var ie = 』\v』==』v』;
/ / Option to Gareth Hayes (former record-holder):
var ie = !+"\v1";
</ script>

㈤ Web前端初學者要避免的常見錯誤有哪些

今天小編要跟大家分享的文章是關於Web前端初學者要避免的常見錯誤有哪些?相信對於剛剛接觸Web前端的初學者,會遇到很多問題,在學習的過程中也會有各種各樣的挫折。雖然有些錯誤與某一個具體的行為相關,但有些錯誤卻是所有Web開發人員都需要面對的挑戰。

今天小編為大家准備了這篇關於Web初學者常見的錯誤的文章,希望能夠對小夥伴們有所幫助。下面來和小編一起看一看吧!


錯誤一:所謂「應該能行」的代碼


錯誤:無論是JavaScript,還是在伺服器上運行的代碼,開發人員都需要測試並確認它是否可以正常工作,而不是在部署了之後,就認為它應該就能從一而終地運行。


影響:不經過適當錯誤檢查的網站就是對最終用戶耍流氓。不僅會極大地影響用戶體驗,而且其錯誤消息內容的類型可能會給黑客線索來滲透這個站點。


如何避免:是人都會犯錯,這個哲理同樣適用於編碼。使用JavaScript,一定要實施好的技術來防止並抓住錯誤。雖然這篇文章描繪了用JavaScript編碼WindoWs應用程序,但是大部分的內容也適用於Web開發,許多提示都很不錯!另一種能讓代碼變得可靠又能在未來變化中存活下來的方法是單元測試。


如果我們夠仔細,那麼就能捕捉到伺服器端的代碼失敗,而不被用戶發現。只顯示必要的信息,並且一定要確保設置友好的錯誤頁面,如HTTP404s。


錯誤二:寫分叉代碼


錯誤:本著支持所有瀏覽器和版本的崇高理念,開發人員立志創建可對任意可能情況作出回應的代碼。代碼中if語句成堆,所有方向都有分叉。


影響:隨著瀏覽器新版本的更新,代碼文件會變得越來越笨拙和難以管理。


如何避免:實現代碼的功能檢測和瀏覽器/版本檢測。功能檢測技術不僅可以顯著減少代碼量,還更易於閱讀和管理。不妨考慮使用如Modernizr這樣的庫,不僅有助於功能檢測,還能自動幫助提供不能跟上HTML5和CSS3速度的舊版瀏覽器的反饋支持。


錯誤三:非響應式設計


錯誤:假設開發/設計人員在相同尺寸的顯示器上開發網站。


影響:當在移動設備或在非常大的屏幕查看網站時,用戶體驗要麼很難看到頁面的重要方面,要麼甚至要時刻注意著不導航至其他網頁。


如何避免:響應式的思維方式。在網站中使用響應式設計。這里有一些關於這方面的實用教程,包括響應式圖片,還有一個非常受歡迎的庫,那就是Bootstrap。


錯誤四:網站過多刷新


錯誤:創建的網站需要為每一個互動而全面刷新頁面。


影響:類似於頁面臃腫,頁面載入時間的性能會受到影響。用戶體驗缺乏流暢性,並且每次互動都可能導致網頁短暫(或長時間)的復位。


如何避免:快速避免這種情況的一個方法就是,通過測定回發到伺服器的內容是否是真正需要的。例如,當不依賴伺服器端資源的時候,客戶端腳本可用於提供直接結果。你也可以應用AJAX技術或進一步使用單頁的應用程序「SPA」方法。流行的JavaScript庫/框架,如JQuery、KnockoutJS和AngularJS,能讓這些方法的採用變得容易得多。


錯誤五:做了太多的無用功


錯誤:開發人員花了很長的時間來創建Web內容。大量的時間花在了重復的任務上,或者自己敲代碼寫了很多。


影響:初始網站的發布和後續的更新時間過於冗長。如果其他開發人員也在做同樣的工作,卻用了更少的時間和精力,那麼你的開發價值顯然就低了。手動勞動很容易出現錯誤,而排除故障錯誤需要更多的時間。


如何避免:探索你的選擇。在開發的每一個階段考慮使用新的工具和新的流程技術。例如,你目前使用的代碼編輯器相比SublimeText和Visual
Studio,如何?不管你使用的是什麼樣的代碼編輯器,你最近有好好鑽研它的功能嗎?也許只投入稍稍一點時間去仔細閱讀文檔,就可以發現做事的新方法,為今後節省一個又一個小時的時間。


例如,在這篇文章中,擴展Visual
Studio可以為Web開發人員提高生產效率。不要錯過網上可用的幫助工具!例如,檢查在dev.modern.ie上的工具以簡化測試(跨多個平台和設備)以及排除故障。


結語


通過識別這些常見的錯誤,Web開發人員可以避免很多讓其他人飽受煎熬的挫折。我們不僅需要承認錯誤,還應該清楚錯誤的影響,並採取措施避免錯誤,這樣才能有更好的開發表現——並有信心完成任務!


以上就是小編今天為大家分享的關於Web前端初學者要避免的常見錯誤有哪些的文章,希望本篇文章能夠對正在從事web前端工作的小夥伴們有所幫助,想要了解更多web前端知識記得關注北大青鳥web培訓官網,最後祝願小夥伴們工作順利,成為一名優秀的web前端工程師。


㈥ html5的CSS3選擇器中的反選偽類選擇器怎麼選

#div:not(':last-child')
選擇id=div的除了最後一個子元素以外的所有子元素
#div:not(p) 選擇id=div的元素下所有不是p元素的子元素

㈦ if (person!=null && person!="")WEB前端這個表示什麼,能分解一下嗎

1.這個if判斷代碼可能起到的作用與要達到的實際效果:

------>

person可能代表表單標簽中某個input輸入框的內容,

不管用戶做了什麼(比如什麼也不輸入就直接提交或者輸入又清空了後提交.....),

只要最後的輸入為空,就不能提交,並給出相應的提示,

這一點,我們應該有所體會了,尤其是我們在網站注冊用戶時經常遇到)


這里涉及網頁解釋執行的順序和緩存機制:

(幾乎所有的瀏覽器都支持javaScript,不支持的少數,幾乎可以排除,不使用)

網頁中的javaScript腳本代碼

往往需要在文檔載入完成後才能夠去執行,

否則可能導致無法獲取對象的情況,為了避免這種情況的發生,改變執行的先後順序,可以使用以下兩種方式:
一.將腳本代碼放在網頁的底端,這樣在運行腳本代碼的時候,可以確保要操作的對象已經載入完成。(但實際我們還是按照常規,不採用這種方式,一般為了開發效率,使用js框架,

script標簽放在head標簽內,位於正文body的前面)
二.通過原始的window.onload來執行腳本代碼(當然這是比較保險的做法)。(但實際也不採用,因為大多數都用js框架來封裝這個window.onload,使用的也是封裝後的window.onload,這也可能涉及兼容性問題)


以上2種方式都不採用,實際開發中使用js等框架,仍可能存在無法獲取對象(對象=null)問題

使用js框架往往有瀏覽器兼容性問題,不同瀏覽器有的支持,有的不支持

如果支持就能按照代碼的設想去執行,也就是框架可以使用封裝的onload改變腳本的執行順序

(當然,這是理想的情況,沒有考慮潛在兼容性問題)

如果不支持,那可能就不生效了,按照原始的從上到下的順序依次執行


這樣的情況下:

(使用js框架,script標簽放在head標簽內,位於正文body的前面,那麼)

if判斷的位置在產生person實例(body)之前,

第1次載入時:

if語句先於產生person實例執行,瀏覽器當前頁面的緩存為空,

有可能person為null的問題

(即使使用js框架去改變載入執行順序,有的瀏覽器可以做到person不為null,但這樣的改變潛在兼容性問題,有的可能不生效),

,執行if後才產生person實例,出現在瀏覽器緩存

第2次及以後的載入,瀏覽器讀取上一次時的person緩存,person不再為null

也就是,

if(person!=null),可以判斷網頁是否已經載入過person了(不再是第1次載入)

如果已經載入過了(person!=null條件成立,那麼再判斷輸入是否空輸入,""表示空輸入,輸入為空就不能提交了


關於&&邏輯操作符:

只有&&左邊的條件(person!=null)成立才會進行右邊的判斷(person!=""),否則不判斷,直接忽略這個if語句,不再執行if之後的語句體{...}


因此可以得到判斷這么寫的原因:

(不管載入執行順序如何)

只要不為null的情況下判斷輸入為空才有意義,反過來是沒有意義的

(判斷輸入為空的先決條件是person!=null)


補充:對於輸入的tips:

person!=null && person!=""

的判斷順序是不能調換的,

不能寫成 person!=""&&person!=null,

person!=""&&person!=null,

判斷順序不能調換的原因:無論person=null或者person!=null都滿足左邊的條件,雖然person=null不滿足右邊的條件,不會執行if的語句體,但person!=""沒有發揮應有的作用,因為沒有滿足person!=""判斷的先決條件

㈧ Java web中,定義函數max(),反回所有參數中的最大值!!

你這個函數既然要進行返回所有參數的最大值,首先你應該對你的參數格式進行檢查,我就舉個例子吧
function max(var a,var b,var c){
//其中isNaN是判斷參數是否為數字類型,是則返回false

if(!a.isNaN&&!b.isNaN&&!c.isNaN){
//進行排序

var array = [a,b,c];
var max = 0,
result = 0;

for(var i=0;i<array.length;i++){
result += array[i];
if(array[i] > max){
max = array[i];
}
//返回最大值
return max;

}
}

}

希望能夠採納,謝謝

㈨ Web前端工程師要掌握的JavaScript簡寫方法

今天小編要跟大家分享的文章是關於Web前端工程師要掌握的JavaScript簡寫方法。由於前端開發的火熱和一些IT巨頭公司對
web前端開發人員的需求旺盛,讓越來越多的人轉入前端。前端開發領域是IT技術語言領域唯一一個男女老少都可以快速入門並快速提升興趣的領域,今天就來聊聊前端的一些技巧,下面我們一起來看一看吧!

1.三元操作符


當想寫if...else語句時,使用三元操作符來代替。


1.constx=20;


2.letanswer;


3.if(x>10){


4.answer='isgreater'


5.}else{


6.answer='islesser'


7.}


簡寫:


1.constanswer=x>10?'isgreater':'islesser'


也可以嵌套if語句:


1.constbig=x>10?"greater10":x


2.短路求值簡寫方式


當給一個變數分配另一個值時,想確定源始值不是null,undefined或空值。可以寫撰寫一個多重條件的if語句。


1.if(variable1!==null||variable1!==undefined||variable1!=='')
{


2.letvariable2=variable1;


3.}


或者可以使用短路求值方法:


1.constvariable2=variable1||'new'


3.聲明變數簡寫方法


1.letx;


2.lety;


3.letz=3;


簡寫方法:


1.letx,y,z=3;


4.if存在條件簡寫方法


1.if(likeJavaScript===true)


簡寫:


1.if(likeJavaScript)


只有likeJavaScript是真值時,二者語句才相等。


如果判斷值不是真值,則可以這樣:


1.leta;


2.if(a!==true){


3.//dosomething...


4.}


簡寫:


1.leta;


2.if(!a){


3.//dosomething...


4.}


5.JavaScript循環簡寫方法


1.for(leti=0;i

簡寫:for(letindexinallImgs)也可以使用Array.forEach:


1.functionlogArrayElements(element,index,array){


2.console.log("a["+index+"]="+element);


3.}


4.[2,5,9].forEach(logArrayElements);


5.//logs:


6.//a[0]=2


7.//a[1]=5


8.//a[2]=9


6.短路評價


給一個變數分配的值是通過判斷其值是否為null或undefined,則可以:


1.letdbHost;


2.if(process.env.DB_HOST){


3.dbHost=process.env.DB_HOST;


4.}else{


5.dbHost='localhost'


6.}


簡寫:


1.constdbHost=process.env.DB_HOST||'localhost'


7.十進制指數


當需要寫數字帶有很多零時(如10000000),可以採用指數(1e7)來代替這個數字:for(leti=0;i<10000;i++){}簡寫:


1.for(leti=0;i<1e7;i++){}


2.


3.//下面都是返回true


4.1e0===1;


5.1e1===10;


6.1e2===100;


7.1e3===1000;


8.1e4===10000;


9.1e5===100000;


8.對象屬性簡寫


如果屬性名與key名相同,則可以採用ES6的方法:


1.constobj={x:x,y:y};


簡寫:


1.constobj={x,y};


9.箭頭函數簡寫


傳統函數編寫方法很容易讓人理解和編寫,但是當嵌套在另一個函數中,則這些優勢就盪然無存。


1.functionsayHello(name){


2.console.log('Hello',name);


3.}


4.


5.setTimeout(function(){


6.console.log('Loaded')


7.},2000);


8.


9.list.forEach(function(item){


10.console.log(item);


11.});


簡寫:


1.sayHello=name=>console.log('Hello',name);


2.


3.setTimeout(()=>console.log('Loaded'),2000);


4.


5.list.forEach(item=>console.log(item));


10.隱式返回值簡寫


經常使用return語句來返回函數最終結果,一個單獨語句的箭頭函數能隱式返回其值(函數必須省略{}為了省略return關鍵字)


為返回多行語句(例如對象字面表達式),則需要使用()包圍函數體。


1.functioncalcCircumference(diameter){


2.returnMath.PI*diameter


3.}


4.


5.varfunc=functionfunc(){


6.return{foo:1};


7.};


簡寫:


1.calcCircumference=diameter=>(


2.Math.PI*diameter;


3.)


4.


5.varfunc=()=>({foo:1});


11.默認參數值


為了給函數中參數傳遞默認值,通常使用if語句來編寫,但是使用ES6定義默認值,則會很簡潔:


1.functionvolume(l,w,h){


2.if(w===undefined)


3.w=3;


4.if(h===undefined)


5.h=4;


6.returnl*w*h;


7.}


簡寫:


1.volume=(l,w=3,h=4)=>(l*w*h);


2.


3.volume(2)//output:24


12.模板字元串


傳統的JavaScript語言,輸出模板通常是這樣寫的。


1.constwelcome='Youhaveloggedinas'+first+''+last+'.'


2.


3.constdb='http://'+host+':'+port+'/'+database;


ES6可以使用反引號和${}簡寫:


1.constwelcome=`Youhaveloggedinas${first}${last}`;


2.


3.constdb=`http://${host}:${port}/${database}`;


13.解構賦值簡寫方法


在web框架中,經常需要從組件和API之間來回傳遞數組或對象字面形式的數據,然後需要解構它。


1.constobservable=require('mobx/observable');


2.constaction=require('mobx/action');


3.construnInAction=require('mobx/runInAction');


4.


5.conststore=#;


6.constform=this.props.form;


7.constloading=this.props.loading;


8.consterrors=this.props.errors;


9.constentity=this.props.entity;


簡寫:


1.import{observable,action,runInAction}from'mobx'


2.


3.const{store,form,loading,errors,entity}=this.props;


也可以分配變數名:


1.const{store,form,loading,errors,entity:contact}=this.props;


2.//最後一個變數名為contact


14.多行字元串簡寫


需要輸出多行字元串,需要使用+來拼接:


1.constlorem='Loremipsumdolorsitamet,consectetur '


2.+'adipisicingelit,seddoeiusmodtemporincidint '


3.+'utlaboreetdoloremagnaaliqua.Utenimadminim '


4.+'veniam, '


5.+'.Duisaute '


6.+'. '


使用反引號,則可以達到簡寫作用:


1.constlorem=`Loremipsumdolorsitamet,consectetur


2.adipisicingelit,seddoeiusmodtemporincidint


3.utlaboreetdoloremagnaaliqua.Utenimadminim


4.veniam,


5..Duisaute


6..`


15.擴展運算符簡寫


擴展運算符有幾種用例讓JavaScript代碼更加有效使用,可以用來代替某個數組函數。


1.//joiningarrays


2.constodd=[1,3,5];


3.constnums=[2,4,6].concat(odd);


4.


5.//cloningarrays


6.constarr=[1,2,3,4];


7.constarr2=arr.slice()


簡寫:


1.//joiningarrays


2.constodd=[1,3,5];


3.constnums=[2,4,6,...odd];


4.console.log(nums);//[2,4,6,1,3,5]


5.


6.//cloningarrays


7.constarr=[1,2,3,4];


8.constarr2=[...arr];


不像concat()函數,可以使用擴展運算符來在一個數組中任意處插入另一個數組。


1.constodd=[1,3,5];


2.constnums=[2,...odd,4,6];


也可以使用擴展運算符解構:


1.const{a,b,...z}={a:1,b:2,c:3,d:4};


2.console.log(a)//1


3.console.log(b)//2


4.console.log(z)//{c:3,d:4}


16.強制參數簡寫


JavaScript中如果沒有向函數參數傳遞值,則參數為undefined。為了增強參數賦值,可以使用if語句來拋出異常,或使用強制參數簡寫方法。


1.functionfoo(bar){


2.if(bar===undefined){


3.thrownewError('Missingparameter!');


4.}


5.returnbar;


6.}


簡寫:


1.mandatory=()=>{


2.thrownewError('Missingparameter!');


3.}


4.


5.foo=(bar=mandatory())=>{


6.returnbar;


7.}


17.Array.find簡寫


想從數組中查找某個值,則需要循環。在ES6中,find()函數能實現同樣效果。


1.constpets=[


2.{type:'Dog',name:'Max'},


3.{type:'Cat',name:'Karl'},


4.{type:'Dog',name:'Tommy'},


5.]


6.


7.functionfindDog(name){


8.for(leti=0;i

9.if(pets[i].type==='Dog'&&pets[i].name===name){


10.returnpets[i];


11.}


12.}


13.}


簡寫:


1.pet=pets.find(pet=>pet.type==='Dog'&&pet.name===
'Tommy');


2.console.log(pet);//{type:'Dog',name:'Tommy'}


18.Object[key]簡寫


考慮一個驗證函數:


1.functionvalidate(values){


2.if(!values.first)


3.returnfalse;


4.if(!values.last)


5.returnfalse;


6.returntrue;


7.}


8.


9.console.log(validate({first:'Bruce',last:'Wayne'}));//true


假設當需要不同域和規則來驗證,能否編寫一個通用函數在運行時確認?


1.//對象驗證規則


2.constschema={


3.first:{


4.required:true


5.},


6.last:{


7.required:true


8.}


9.}


10.


11.//通用驗證函數


12.constvalidate=(schema,values)=>{


13.for(fieldinschema){


14.if(schema[field].required){


15.if(!values[field]){


16.returnfalse;


17.}


18.}


19.}


20.returntrue;


21.}


22.


23.console.log(validate(schema,{first:'Bruce'}));//false


24.console.log(validate(schema,{first:'Bruce',last:'Wayne'}));//
true


現在可以有適用於各種情況的驗證函數,不需要為了每個而編寫自定義驗證函數了


19.雙重非位運算簡寫


有一個有效用例用於雙重非運算操作符。可以用來代替Math.floor(),其優勢在於運行更快,可以閱讀此文章了解更多位運算。


1.Math.floor(4.9)===4//true


簡寫:


1.~~4.9===4//true


以上就是小編今天為大家分享的關於Web前端工程師要掌握的JavaScript
簡寫方法的文章,希望本篇文章能夠對正在從事web前端工作的小夥伴們有所幫助,想要了解更多web前端知識記得關注北大青鳥web培訓官網。最後祝願小伙

㈩ Web前端工程師提升JavaScript技能的技巧

今天小編要跟大家分享的文章是關於Web前端工程師提升JavaScript技能的技巧。在使用JavaScript
時,我們常常要寫不少的條件語句。這里有五個小技巧,可以讓你寫出更干凈、漂亮的條件語句。下面來和小編一起看一看吧!

1.使用Array.includes來處理多重條件


舉個栗子:


//條件語句


functiontest(fruit){


if(fruit=='apple'||fruit=='strawberry'){


console.log('red');


}


}


乍一看,這么寫似乎沒什麼大問題。然而,如果我們想要匹配更多的紅色水果呢,比方說『櫻桃』和『蔓越莓』?我們是不是得用更多的||
來擴展這條語句?


我們可以使用Array.includes(Array.includes)重寫以上條件句。


functiontest(fruit){


//把條件提取到數組中


constredFruits=['apple','strawberry','cherry','cranberries'];


if(redFruits.includes(fruit)){


console.log('red');


}


}


我們把紅色的水果(條件)都提取到一個數組中,這使得我們的代碼看起來更加整潔。


2.少寫嵌套,盡早返回


讓我們為之前的例子添加兩個條件:


如果沒有提供水果,拋出錯誤。


如果該水果的數量大於10,將其列印出來。


functiontest(fruit,quantity){


constredFruits=['apple','strawberry','cherry','cranberries'];


//條件1:fruit必須有值


if(fruit){


//條件2:必須為紅色


if(redFruits.includes(fruit)){


console.log('red');


//條件3:必須是大量存在


if(quantity>10){


console.log('bigquantity');


}


}


}else{


thrownewError('Nofruit!');


}


}


//測試結果


test(null);//報錯:Nofruits


test('apple');//列印:red


test('apple',20);//列印:red,bigquantity


讓我們來仔細看看上面的代碼,我們有:


1個if/else語句來篩選無效的條件


3層if語句嵌套(條件1,2&3)


就我個人而言,我遵循的一個總的規則是當發現無效條件時盡早返回。


/_當發現無效條件時盡早返回_/


functiontest(fruit,quantity){


constredFruits=['apple','strawberry','cherry','cranberries'];


//條件1:盡早拋出錯誤


if(!fruit)thrownewError('Nofruit!');


//條件2:必須為紅色


if(redFruits.includes(fruit)){


console.log('red');


//條件3:必須是大量存在


if(quantity>10){


console.log('bigquantity');


}


}


}


如此一來,我們就少寫了一層嵌套。這是種很好的代碼風格,尤其是在if語句很長的時候(試想一下,你得滾動到底部才能知道那兒還有個else
語句,是不是有點不爽)。


如果反轉一下條件,我們還可以進一步地減少嵌套層級。注意觀察下面的條件2語句,看看是如何做到這點的:


/_當發現無效條件時盡早返回_/


functiontest(fruit,quantity){


constredFruits=['apple','strawberry','cherry','cranberries'];


if(!fruit)thrownewError('Nofruit!');//條件1:盡早拋出錯誤


if(!redFruits.includes(fruit))return;//條件2:當fruit不是紅色的時候,直接返回


console.log('red');


//條件3:必須是大量存在


if(quantity>10){


console.log('bigquantity');


}


}


通過反轉條件2
的條件,現在我們的代碼已經沒有嵌套了。當我們代碼的邏輯鏈很長,並且希望當某個條件不滿足時不再執行之後流程時,這個技巧會很好用。


然而,並沒有任何硬性規則要求你這么做。這取決於你自己,對你而言,這個版本的代碼(沒有嵌套)是否要比之前那個版本(條件2
有嵌套)的更好、可讀性更強?


是我的話,我會選擇前一個版本(條件2有嵌套)。原因在於:


這樣的代碼比較簡短和直白,一個嵌套的if使得結構更加清晰。


條件反轉會導致更多的思考過程(增加認知負擔)。


因此,始終追求更少的嵌套,更早地返回,但是不要過度。感興趣的話,這里有篇關於這個問題的文章以及StackOverflow上的討論:


AvoidElse,ReturnEarlybyTimOxley


StackOverflowdiscussiononif/elsecodingstyle


3.使用函數默認參數和解構


我猜你也許很熟悉以下的代碼,在JavaScript中我們經常需要檢查null/undefined並賦予默認值:


functiontest(fruit,quantity){


if(!fruit)return;


constq=quantity||1;//如果沒有提供quantity,默認為1


console.log(`Wehave${q}${fruit}!`);


}


//測試結果


test('banana');//Wehave1banana!


test('apple',2);//Wehave2apple!


事實上,我們可以通過函數的默認參數來去掉變數q。


functiontest(fruit,quantity=1){//如果沒有提供quantity,默認為1


if(!fruit)return;


console.log(`Wehave${quantity}${fruit}!`);


}


//測試結果


test('banana');//Wehave1banana!


test('apple',2);//Wehave2apple!


是不是更加簡單、直白了?請注意,所有的函數參數都可以有其默認值。舉例來說,我們同樣可以為fruit賦予一個默認值:function
test(fruit='unknown',quantity=1)。


那麼如果fruit是一個對象(Object)呢?我們還可以使用默認參數嗎?


functiontest(fruit){


//如果有值,則列印出來


if(fruit&&fruit.name){


console.log(fruit.name);


}else{


console.log('unknown');


}


}


//測試結果


test(undefined);//unknown


test({});//unknown


test({name:'apple',color:'red'});//apple


觀察上面的例子,當水果名稱屬性存在時,我們希望將其列印出來,否則列印『unknown』。我們可以通過默認參數和解構賦值的方法來避免寫出fruit
&&fruit.name這種條件。


//解構——只得到name屬性


//默認參數為空對象{}


functiontest({name}={}){


console.log(name||'unknown');


}


//測試結果


test(undefined);//unknown


test({});//unknown


test({name:'apple',color:'red'});//apple


既然我們只需要fruit的name屬性,我們可以使用{name}來將其解構出來,之後我們就可以在代碼中使用name變數來取代
fruit.name。


我們還使用{}作為其默認值。如果我們不這么做的話,在執行test(undefined)時,你會得到一個錯誤Cannot
destructurepropertynameof'undefined'or'null'.,因為undefined上並沒有name
屬性。(譯者註:這里不太准確,其實因為解構只適用於對象(Object),而不是因為undefined上並沒有name屬性(空對象上也沒有)。參考解構賦值
-MDN)


如果你不介意使用第三方庫的話,有一些方法可以幫助減少空值(null)檢查:


使用Lodashget函數


使用Facebook開源的idx庫(需搭配Babeljs)


這里有一個使用Lodash的例子:


//使用lodash庫提供的_方法


functiontest(fruit){


console.log(_.get(fruit,'name','unknown');//獲取屬性name的值,如果沒有,設為默認值
unknown


}


//測試結果


test(undefined);//unknown


test({});//unknown


test({name:'apple',color:'red'});//apple


你可以在這里運行演示代碼。另外,如果你偏愛函數式編程(FP),你可以選擇使用Lodashfp——函數式版本的Lodash(方法名變為get或
getOr)。


4.相較於switch,Map/Object也許是更好的選擇


讓我們看下面的例子,我們想要根據顏色列印出各種水果:


functiontest(color){


//使用switchcase來找到對應顏色的水果


switch(color){


case'red':


return['apple','strawberry'];


case'yellow':


return['banana','pineapple'];


case'purple':


return['grape','plum'];


default:


return[];


}


}


//測試結果


test(null);//[]


test('yellow');//['banana','pineapple']


上面的代碼看上去並沒有錯,但是就我個人而言,它看上去很冗長。同樣的結果可以通過對象字面量來實現,語法也更加簡潔:


//使用對象字面量來找到對應顏色的水果


constfruitColor={


red:['apple','strawberry'],


yellow:['banana','pineapple'],


purple:['grape','plum']


};


functiontest(color){


returnfruitColor[color]||[];


}


或者,你也可以使用Map來實現同樣的效果:


//使用Map來找到對應顏色的水果


constfruitColor=newMap()


.set('red',['apple','strawberry'])


.set('yellow',['banana','pineapple'])


.set('purple',['grape','plum']);


functiontest(color){


returnfruitColor.get(color)||[];


}


Map是ES2015引入的新的對象類型,允許你存放鍵值對。


那是不是說我們應該禁止使用switch語句?別把自己限制住。我自己會在任何可能的時候使用對象字面量,但是這並不是說我就不用
switch,這得視場景而定。


ToddMotto有一篇文章深入討論了switch語句和對象字面量,你也許會想看看。


懶人版:重構語法


就以上的例子,事實上我們可以通過重構我們的代碼,使用Array.filter實現同樣的效果。


constfruits=[


{name:'apple',color:'red'},


{name:'strawberry',color:'red'},


{name:'banana',color:'yellow'},


{name:'pineapple',color:'yellow'},


{name:'grape',color:'purple'},


{name:'plum',color:'purple'}


];


functiontest(color){


//使用Arrayfilter來找到對應顏色的水果


returnfruits.filter(f=>f.color==color);


}


解決問題的方法永遠不只一種。對於這個例子我們展示了四種實現方法。Codingisfun!


5.使用Array.every和Array.some來處理全部/部分滿足條件


最後一個小技巧更多地是關於使用新的(也不是很新了)JavaScript
數組函數來減少代碼行數。觀察以下的代碼,我們想要檢查是否所有的水果都是紅色的:


constfruits=[


{name:'apple',color:'red'},


{name:'banana',color:'yellow'},


{name:'grape',color:'purple'}


];


functiontest(){


letisAllRed=true;


//條件:所有的水果都必須是紅色


for(letfoffruits){


if(!isAllRed)break;


isAllRed=(f.color=='red');


}


console.log(isAllRed);//false


}


這段代碼也太長了!我們可以通過Array.every來縮減代碼:


constfruits=[


{name:'apple',color:'red'},


{name:'banana',color:'yellow'},


{name:'grape',color:'purple'}


];


functiontest(){


//條件:(簡短形式)所有的水果都必須是紅色


constisAllRed=fruits.every(f=>f.color=='red');


console.log(isAllRed);//false


}


清晰多了對吧?類似的,如果我們想要檢查是否有至少一個水果是紅色的,我們可以使用Array.some僅用一行代碼就實現出來。


constfruits=[


{name:'apple',color:'red'},


{name:'banana',color:'yellow'},


{name:'grape',color:'purple'}


];


functiontest(){


//條件:至少一個水果是紅色的


constisAnyRed=fruits.some(f=>f.color=='red');


console.log(isAnyRed);//true


}


以上就是小編今天為大家分享的關於Web前端工程師提升JavaScript
技能的技巧的文章,希望本篇文章能夠對正在從事web前端工作的小夥伴們有所幫助,想要了解更多web前端相關知識記得關注北大青鳥web培訓官網。最後祝願小夥伴們工作順利!


來源:掘金,譯者:Hopsken,作者:@JecelynYeen


原文:#/tutorials/5-tips-to-write-better-conditionals-in-javascri