整合營銷服務(wù)商

          電腦端+手機端+微信端=數(shù)據(jù)同步管理

          免費咨詢熱線:

          9 條非常強大的 JavaScript 技巧

          文講述了 9 條非常強大的 JavaScript 技巧。

          作者 | Klaus

          譯者 | 彎月,責(zé)編 | 屠敏

          以下為譯文:

          全部替換

          我們知道string.replace函數(shù)只會替換第一次出現(xiàn)的位置。在正則表達式末尾添加 /g 即可替換所有出現(xiàn)。

          var example = "potato potato";
          console.log(example.replace(/pot/, "tom"));
          // "tomato potato"
          console.log(example.replace(/pot/g, "tom"));
          // "tomato tomato"

          提取唯一值

          使用Set對象和spread操作符可以創(chuàng)建一個新的數(shù)組,僅包含唯一的值。

          var entries = [1, 2, 2, 3, 4, 5, 6, 6, 7, 7, 8, 4, 2, 1]
          var unique_entries = [...new Set(entries)];
          console.log(unique_entries);
          // [1, 2, 3, 4, 5, 6, 7, 8]

          數(shù)字轉(zhuǎn)為字符串

          只需要將其與空字符串連接。

          var converted_number = 5 + "";
          console.log(converted_number);
          // 5
          console.log(typeof converted_number);
          // string

          字符串轉(zhuǎn)為數(shù)字

          只需要使用 + 運算符。

          注意這個技巧只能在“字符串形式的數(shù)字”上使用。

          the_string = "123";
          console.log(+the_string);
          // 123

          the_string = "hello";
          console.log(+the_string);
          // NaN

          打亂數(shù)組的元素順序

          var my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9];
          console.log(my_list.sort(function {
          return Math.random - 0.5
          }));
          // [4, 8, 2, 9, 1, 3, 6, 5, 7]

          多維數(shù)組扁平化

          只需使用spread運算符。

          var entries = [1, [2, 5], [6, 7], 9];
          var flat_entries = .concat(...entries);
          // [1, 2, 5, 6, 7, 9]

          短路條件

          比如下面的例子:

          if (available) {
          addToCart;
          }

          只需將變量和函數(shù)寫到一起即可:

          available && addToCart

          動態(tài)屬性名

          原來我以為必須先定義一個對象才能指定動態(tài)屬性名,其實不需要:

          const dynamic = 'flavour';
          var item = {
          name: 'Coke',
          [dynamic]: 'Cherry'
          }
          console.log(item);
          // { name: "Coke", flavour: "Cherry" }

          使用length屬性來改變數(shù)組大小或清空數(shù)組

          只需要重寫數(shù)組的length即可。

          要想改變數(shù)組大小:

          var entries = [1, 2, 3, 4, 5, 6, 7]; 
          console.log(entries.length);
          // 7
          entries.length = 4;
          console.log(entries.length);
          // 4
          console.log(entries);
          // [1, 2, 3, 4]

          要想清空數(shù)組:

          var entries = [1, 2, 3, 4, 5, 6, 7]; 
          console.log(entries.length);
          // 7
          entries.length = 0;
          console.log(entries.length);
          // 0
          console.log(entries);
          //

          原文:https://dev.to/razgandeanu/9-extremely-powerful-javascript-hacks-4g3p

          本文為 CSDN 翻譯,轉(zhuǎn)載請注明來源出處。

          【End】

          語說的好,長江后浪推前浪。作為一名程序員,我一直很偏愛JavaScript,不為什么,就是因為強大。但是,TypeScript的出現(xiàn),與之形成對比,讓我不得不開始考慮TypeScript,下面我就為大家解析一下我為什么要開始用TypeScript。

          作者 | Jamie Morris

          譯者 | 蘇本如,責(zé)編 | 毛中政

          出品 | CSDN(ID:CSDNnews)

          以下為譯文

          JavaScript可能是一種事實上的現(xiàn)代Web開發(fā)語言,它也是我一直是我選擇用來編寫腳本的語言。用Python編寫代碼很有趣,但是如果我有一些東西要自動化,我會使用Node。

          在過去,我選擇的服務(wù)器端語言是C#,但現(xiàn)在我感覺它很笨拙,盡管它很強大。我曾經(jīng)天真地認為Node是服務(wù)器端語言的“神來之筆”,它滿足了我編寫代碼的一切需求。我甚至可以有很多種不同的方式使用JavaScript來編寫安卓(Android)和iOS應(yīng)用程序。

          我并不是說JavaScript對于編寫任何程序來說,是一個完美的工具,但是多年來它確實對我非常有用。

          我一直堅定地承認JavaScript在Web前臺的繁重的開發(fā)工作上的一些缺陷,這包括了Gary Bernhardt在他的戲謔性的 “Wat?” 閃電演講中令人一想起來就會發(fā)笑的例子。如果你從來沒有看過這個視頻,現(xiàn)在就停下你的閱讀,趕緊去找這個視頻看看。看完后你會感謝我的。

          Gary Bernhardt的這個閃電演講現(xiàn)在已經(jīng)成為我的推薦閱讀列表的一部分,和Jonathan Creamer所寫的“面向23世紀的JavaScript體系結(jié)構(gòu)”這篇文章一起呈現(xiàn)給未來的前端開發(fā)人員。

          雖然自從ES6出現(xiàn)以后,這篇文章中的一些內(nèi)容看起來是多余的,但是它對于解釋JavaScript需要從“普通編程語言”轉(zhuǎn)變思維的事情(如果有這樣的事情的話)有很大的幫助。這篇文章本身是我5年前開始自己的JavaScript之旅的一個重要原因。

          但是為什么我現(xiàn)在威脅說要再也不用回JavaScript呢?答案很簡單,因為TypeScript。

          TypeScript是什么?

          我猜你們已經(jīng)聽說過TypeScript,如果沒有的話,讓我試著總結(jié)一下:TypeScript是強類型的JavaScript語言。

          它添加了你們對強類型語言所期望的一些特性,并且需要一個編譯步驟(技術(shù)上這個步驟叫“Transpilation”)來將TypeScript轉(zhuǎn)換為JavaScript的代碼。這是因為瀏覽器不理解TypeScript。

          從技術(shù)上講,TypeScript不添加任何新的運行時特性,它只是為開發(fā)人員添加一些特性。

          我聽說有人把TypeScript說成是一種“不是愛它就是恨它”的開發(fā)語言,但是我還沒有見過一個用過TypeScript的人說恨它。但是我和很多不想嘗試它的人交流過。那是大約2016年中的事,其實我也是其中之一。

          我聽到的同行們對TypeScript的最壞批評是,它是一套需要額外學(xué)習(xí)的工具。不僅包括語言本身,還包括了構(gòu)建過程。然而,大多數(shù)現(xiàn)代Web應(yīng)用程序在其構(gòu)建鏈中至少有一個鏈接以Babel的形式保留給JavaScript,而Babel是一個允許較新JavaScript在較舊的瀏覽器上運行的工具。

          將TypeScript添加到這個鏈中不應(yīng)該是件高難度的事,特別是因為Babel從v7版本開始就支持TypeScript編譯。

          盡管TypeScript不應(yīng)該是一種高深的科學(xué),但有時它會讓人產(chǎn)生這種感覺。這就是為什么剛開始使用TypeScript的人有時會掙扎著回到JavaScript上的原因之一,因為JavaScript就在瀏覽器中運行。

          TypeScript帶來的好處

          正如我上面所說,我從未聽過有人使用TypeScript,這是件很遺憾的事。TypeScript帶來的好處遠遠大于它的困難,特別是在Angular CLI(Angular命令行接口)或Create- React-App(注:是一個官方支持的創(chuàng)建React單頁應(yīng)用程序的方法)大行其道的那個時代,這兩個工具都允許你在幾分鐘內(nèi)開始一個新的支持TypeScript的項目。

          我想你已經(jīng)知道這些好處是什么,但如果你不知道的話,請允許我總結(jié)一下:

          TypeScript的編譯步驟可以讓你及早發(fā)現(xiàn)問題,而不是等待運行時失敗。

          你的IDE現(xiàn)在甚至可以在編譯步驟之前提示你一些錯誤。想象一下,如果你的IDE能夠告訴你正在引用一個不存在的變量,或者正在使用錯誤的參數(shù)來調(diào)用一個函數(shù),那真是革命性的進步!(當(dāng)然,這里我是開玩笑的,因為“真正的”編程語言很多年前就有了這些功能)

          當(dāng)ECMAScript(驅(qū)動JavaScript語言的標準)中提出新的特性時,TypeScript能夠很早地采用它們,讓你一直保持在技術(shù)最前沿。

          但實際上,TypeScript的主要好處是,它可以讓你的代碼以JavaScript無法描述的方式進行自我描述。

          你可能認為,當(dāng)你是一個項目的唯一開發(fā)人員時,JavaScript并沒有那么糟糕,因為所有的東西都在你的腦子里,而且你有完美的記憶力,是這樣嗎?不,你錯了。即使作為一個項目的唯一開發(fā)人員,我在編寫代碼時也容易出現(xiàn)一陣陣健忘癥。

          現(xiàn)在,當(dāng)我編寫普通的JavaScript時,我討厭閱讀一個函數(shù)的定義來搞清楚如何使用它。我不知道它會返回什么(如果有返回值的話)或者它接受什么樣的參數(shù)。我可能知道參數(shù)名稱和個數(shù),但這并不總是足夠的(如下面代碼所示):

          1 Function doTheThing {

          2 let error = false;

          3

          4 // About a million lines of code that might cause an error

          5

          6 return error;

          7 }

          8

          9 function consumeTheThing {

          10 let error = doTheThing;

          11 if (error) {

          12 // What do I do with the error now?

          13 }

          14 }

          這就是我想要表達的。這里的“error”是一個布爾型的值嗎?當(dāng)我看到第2行時,它看起來確實是這樣的,但是從那里到結(jié)束的“doTheThing”行之間的一百萬行代碼中間的“error”呢?它可能是一個字符串,或者一個對象,或者天知道是什么。

          你可能會認為這種靈活性是一種資產(chǎn)。它可以是,但更多的時候,它是一個陷阱,引誘你進入一種容易出錯的方式,在你和你的同事之間制造很多小挫折。有沒有在進入別人的代碼中,感到自己像在迷宮里的感覺?

          這就是你的代碼在別人看來的樣子。你可以用JavaScript編寫“好”的代碼,但是很少有關(guān)于該語言的內(nèi)容鼓勵你這樣做。

          而這正是TypeScript的美妙所在。它不會強迫你成為一個好的開發(fā)人員。但它給了讓你成為好的開發(fā)人員的工具。

          TypeScript缺點

          TypeScript有缺點嗎?當(dāng)然有。

          更多的打字(指定類型),無論是從兩個方面的那一個來看都是這樣。你的鍵盤會磨損得更快(這可能是你們中使用蝴蝶鍵盤的人所擔(dān)心的),這沒什么大不了的。

          但是一些JavaScript開發(fā)人員討厭在每個新函數(shù)或變量中鍵入類型。你不必非這么做不可,但是如果你不使用類型,為什么要使用TypeScript呢?

          因為代碼必須編譯,因此每次更新和測試運行需要稍長一點時間。其實需要的只是多幾秒鐘而已,而使用TypeScript節(jié)省的時間遠遠超過編譯它所花費的時間。

          構(gòu)建一個項目的復(fù)雜性有時是非常痛苦的。這是真的。如果你不熟悉你的構(gòu)建工具,構(gòu)建一個新項目可能是一個令人沮喪的體驗。

          短期內(nèi)我的建議是找一個啟動項目讓你開始。至于長期的建議,我建議你花時間學(xué)習(xí)工具-tsc,Babel,WebPack和所有的有用的工具。

          我覺得我的論點有點傾向性。我并沒有把重點放在TypeScript的缺點上,而是放在更多地強調(diào)優(yōu)點上。我猜這也是我不會花太多時間論證每頓飯都吃麥當(dāng)勞的好處的原因,因為這樣做的好處是有限的(不用再做飯了……我想只是這樣)。

          關(guān)于TypeScript的統(tǒng)計

          像往常一樣,StackOverflow提供的數(shù)據(jù)會判斷我的看法是對還是錯。表面上的數(shù)據(jù)來看,我好像錯得太離譜了。

          根據(jù)StackOverflow 2019開發(fā)者調(diào)查報告,JavaScript已經(jīng)連續(xù)第七年成為StackOverflow上談?wù)撟疃嗟恼Z言,67.8%的受訪者都在使用它,而TypeScript在這個排名中名列第十,它正在被21.2%的受訪者使用。

          但是在2018年,TypeScript的這個統(tǒng)計數(shù)字只為17.4%,而再前一年僅為9.5%。2016年的時候,甚至只有0.47%的受訪者使用TypeScript。

          在這個角度來看,TypeScript這些年來有了驚人的增長,這主要歸功于Angular框架,它在早些時候放棄了對JavaScript的支持。

          當(dāng)你看到“最受歡迎”的語言排名時,TypeScript的表現(xiàn)更加搶眼了,它以73.1%的比分排名了第三位(位列Rust和Python之后)。而JavaScript以66.8%排在第11位。

          前景

          我不認為TypeScript會很快取代JavaScript,理解后者對于前者的工作至關(guān)重要。而且我們也不會看到TypeScript在任何瀏覽器中以本機方式運行。

          TypeScript是一個預(yù)處理器,就像之前的CoffeeScript一樣。TypeScript和CoffeeScript的區(qū)別在于后者是對構(gòu)建它的語言的根本性改變,而TypeScript是一種自然演變。這不僅僅使得學(xué)習(xí)它更容易,而且使得從JavaScript項目轉(zhuǎn)換為TypeScript的過程更為漸進。首先簡單地將所有以.js結(jié)尾的文件重命名為以.ts為結(jié)尾的文件,你就有了一個TypeScript項目!

          然后,你就可以一步一步地開始采用TypeScript的語言特性。我不能保證這個過程會很容易,但是它會告訴你一些JavaScript永遠無法做到的事情。當(dāng)你開始下一個項目時,TypeScript編譯器將會在那里等待你。

          所以,使用了TypeScript,我知道我再也不會用回JavaScript了。

          原文:https://medium.com/JavaScript-in-plain-english/ill-never-go-back-to-JavaScript-16370dc264a0

          本文為 CSDN 翻譯,轉(zhuǎn)載請注明來源出處。

          【End】

          于初學(xué)者,JavaScript 有哪些不為人知卻非常有用的技巧呢?在本文中,我們將一同為大家解密與分享。

          作者 | Duomly

          譯者 | 彎月,責(zé)編 | 屠敏

          出品 | CSDN(ID:CSDNnews)

          以下為譯文:

          數(shù)組是Javascript中最常見的概念,我們有很多辦法來處理數(shù)組中的數(shù)據(jù)。考慮到數(shù)組是Javascript中最基本的概念之一,是初學(xué)者剛剛接觸編程時就學(xué)習(xí)的概念,我想通過本文介紹一些不為人知卻非常有用的技巧。我們開始吧!

          從數(shù)組中刪除重復(fù)

          在有關(guān)Javascript數(shù)組的面試問題中,有一個問題很常見:怎樣從Javascript數(shù)組中提取不重復(fù)的值。我有一個快捷簡便的方法:只需使用new Set即可。實現(xiàn)的方法有兩種:一種使用.from,另一種使用擴展運算符(...):

          var fruits = [“banana”, “apple”, “orange”, “watermelon”, “apple”, “orange”, “grape”, “apple”];

          很容易,是不是?

          替換數(shù)組中指定的值

          在編程時,有時候需要替換某個特定的值,有個非常簡單的方法來實現(xiàn)這一點。只需使用.split(start, 要刪除的值,要添加的值),然后設(shè)置好三個參數(shù),指明希望從哪里修改、要修改幾個值,以及新的值是什么。

          var fruits = [“banana”, “apple”, “orange”, “watermelon”, “apple”, “orange”, “grape”, “apple”];
          fruits.splice(0, 2, “potato”, “tomato”);
          console.log(fruits); // returns [“potato”, “tomato”, “orange”, “watermelon”, “apple”, “orange”, “grape”, “apple”]

          不使用.map實現(xiàn)映射

          大概所有人都知道數(shù)組的.map方法,但還有另一個方法,可以用同樣簡潔的方式實現(xiàn)類似的效果。這種方法就是.from:

          var friends = [
          { name: ‘John’, age: 22 },
          { name: ‘Peter’, age: 23 },
          { name: ‘Mark’, age: 24 },
          { name: ‘Maria’, age: 22 },
          { name: ‘Monica’, age: 21 },
          { name: ‘Martha’, age: 19 },
          ]


          var friendsNames = Array.from(friends, ({name}) => name);
          console.log(friendsNames); // returns [“John”, “Peter”, “Mark”, “Maria”, “Monica”, “Martha”]

          清空數(shù)組

          如果想把一個數(shù)組清空,但不想一個個刪除其中的元素,該怎么辦?其實只需一行代碼即可:將length設(shè)置為0。

          var fruits = [“banana”, “apple”, “orange”, “watermelon”, “apple”, “orange”, “grape”, “apple”];


          fruits.length = 0;
          console.log(fruits); // returns

          將數(shù)組轉(zhuǎn)化為對象

          如果有一個數(shù)組,我們希望將其數(shù)據(jù)放到一個對象中,那么最快的方式就是使用擴展運算符(...):

          var fruits = [“banana”, “apple”, “orange”, “watermelon”];
          var fruitsObj = { …fruits };
          console.log(fruitsObj); // returns {0: “banana”, 1: “apple”, 2: “orange”, 3: “watermelon”, 4: “apple”, 5: “orange”, 6: “grape”, 7: “apple”}

          用數(shù)據(jù)填充數(shù)組

          有時候需要創(chuàng)建一個數(shù)組并用數(shù)據(jù)填充,或者需要一個所有值都相同的數(shù)組,此時可以使用.fill方法簡潔明快地實現(xiàn):

          var newArray = new Array(10).fill(“1”);
          console.log(newArray); // returns [“1”, “1”, “1”, “1”, “1”, “1”, “1”, “1”, “1”, “1”, “1”]

          合并數(shù)組

          你知道怎樣可以不使用.concat來合并數(shù)組嗎?最簡單的方法只需要一行代碼。你也許猜到了,那就是擴展運算符(...),它非常適合處理數(shù)組:

          var fruits = [“apple”, “banana”, “orange”];
          var meat = [“poultry”, “beef”, “fish”];
          var vegetables = [“potato”, “tomato”, “cucumber”];
          var food = […fruits, …meat, …vegetables];
          console.log(food); // [“apple”, “banana”, “orange”, “poultry”, “beef”, “fish”, “potato”, “tomato”, “cucumber”]

          求兩個數(shù)組的交集

          這也是Javascript面試中最常遇到的問題,因為它能展示出你是否會使用數(shù)組方法,以及邏輯如何。要找出兩個數(shù)組的交集,只需要使用之前使用的技巧,首先保證數(shù)組中的值不重復(fù),然后利用.filter和.includes方法即可。這樣就能找出同時出現(xiàn)在兩個數(shù)組中的元素。代碼如下:

          var numOne = [0, 2, 4, 6, 8, 8];
          var numTwo = [1, 2, 3, 4, 5, 6];
          var duplicatedValues = […new Set(numOne)].filter(item => numTwo.includes(item));
          console.log(duplicatedValues); // returns [2, 4, 6]

          從數(shù)組中刪除假值

          首先我們來定義假值。在Javascript中,假值包括false、0、''、、NaN、undefined。現(xiàn)在可以考慮怎樣從數(shù)組中刪除假值了。只需使用.filter方法即可實現(xiàn):

          var mixedArr = [0, “blue”, “”, NaN, 9, true, undefined, “white”, false];
          var trueArr = mixedArr.filter(Boolean);
          console.log(trueArr); // returns [“blue”, 9, true, “white”]

          從數(shù)組中獲取隨機值

          有時候需要從數(shù)組中隨機選擇一個值。簡單、快捷、簡短且干凈的方式就是在數(shù)組長度的范圍內(nèi)生成一個隨機的索引。代碼如下:

          var colors = [“blue”, “white”, “green”, “navy”, “pink”, “purple”, “orange”, “yellow”, “black”, “brown”];
          var randomColor = colors[(Math.floor(Math.random() * (colors.length)))]

          反轉(zhuǎn)數(shù)組

          需要反轉(zhuǎn)數(shù)組時,我們不需要使用復(fù)雜的循環(huán)和函數(shù)來重新創(chuàng)建數(shù)組,因為有一個簡單的數(shù)組方法可以為我們做這件事,只需一行代碼,就能反轉(zhuǎn)數(shù)組。代碼如下:

          var colors = [“blue”, “white”, “green”, “navy”, “pink”, “purple”, “orange”, “yellow”, “black”, “brown”];
          var reversedColors = colors.reverse;
          console.log(reversedColors); // returns [“brown”, “black”, “yellow”, “orange”, “purple”, “pink”, “navy”, “green”, “white”, “blue”]

          .lastIndexOf方法

          Javascript中有一個有趣的方法,可以讓我們找出指定元素最后出現(xiàn)的位置。例如,如果數(shù)組中有重復(fù)元素,那么可以找出該元素最后出現(xiàn)的位置。代碼如下:

          var nums = [1, 5, 2, 6, 3, 5, 2, 3, 6, 5, 2, 7];
          var lastIndex = nums.lastIndexOf(5);
          console.log(lastIndex); // returns 9

          對數(shù)組中的所有值求和

          另一個Javascript工程師面試中常見的問題就是對數(shù)組中的所有元素求和。這個完全不需要害怕,只需使用.reduce方法,一行代碼就可以實現(xiàn)。代碼如下:

          var nums = [1, 5, 2, 6];
          var sum = nums.reduce((x, y) => x + y);
          console.log(sum); // returns 14

          總結(jié)

          本文向你展示了13個編程技巧,可以保持代碼簡短整潔。同時別忘了,Javascript中還有許多不同的技巧值得探索,不僅是有關(guān)數(shù)組的技巧,也包括許多其他的數(shù)據(jù)類型。希望你喜歡本文的技巧,并能利用這些技巧改善開發(fā)流程。

          原文:https://dev.to/duomly/13-useful-javascript-array-tips-and-tricks-you-should-know-2jfo

          本文為 CSDN 翻譯,轉(zhuǎn)載請注明來源出處。

          【END】


          主站蜘蛛池模板: 性色av一区二区三区夜夜嗨 | 麻豆视传媒一区二区三区| 国产av天堂一区二区三区| 四虎永久在线精品免费一区二区 | 久久久精品人妻一区二区三区 | 99久久精品国产免看国产一区 | 国产高清视频一区二区| 91精品国产一区| 中文字幕亚洲一区二区三区| 亚洲欧洲专线一区| 最美女人体内射精一区二区| 精品一区二区三区免费| 精品无码成人片一区二区| 国产裸体舞一区二区三区| 亚洲日本va午夜中文字幕一区| 久久久精品人妻一区二区三区四| 狠狠做深爱婷婷综合一区| 国产一区视频在线免费观看| 色综合久久一区二区三区| 乱码人妻一区二区三区| 日本一区频道在线视频| 国产日本一区二区三区| 在线日韩麻豆一区| 国产激情一区二区三区在线观看 | 日韩视频在线观看一区二区| 一区二区三区在线播放视频| 一区二区三区在线看| 亚洲av午夜福利精品一区人妖| 国产AV午夜精品一区二区入口| 91video国产一区| 亚州AV综合色区无码一区| 白丝爆浆18禁一区二区三区| 一区 二区 三区 中文字幕| 久久国产精品一区免费下载| 亚洲综合一区国产精品| 国产成人精品无人区一区| 国产精品日本一区二区在线播放| 精品人妻系列无码一区二区三区| 国产萌白酱在线一区二区| 久久婷婷久久一区二区三区| 无码精品不卡一区二区三区|