MDN文档基础知识搜集
| 數(shù)組,一種允許你存儲(chǔ)多個(gè)值在一個(gè)引用里的結(jié)構(gòu)。 | var myVariable = [1,'Bob','Steve',10]; 引用數(shù)組的元素只需:myVariable[0],?myVariable[1], 等等. |
發(fā)布工具:?FTP?客戶(hù)端
你還需要一種將文件從本地硬盤(pán)上傳到遠(yuǎn)程Web服務(wù)器的方法。 為了做到這一點(diǎn),你必須使用FTP客戶(hù)端。
每個(gè)系統(tǒng)都包含一個(gè)FTP客戶(hù)端作為文件管理器的一部分。 Windows資源管理器,Nautilus(一個(gè)常見(jiàn)的Linux文件管理器)和Mac Finder都包含該功能。 然而,人們更經(jīng)常選擇專(zhuān)門(mén)的FTP客戶(hù)端,可以存儲(chǔ)密碼并且并行顯示本地和遠(yuǎn)程目錄。
如果你需要安裝一個(gè)FTP客戶(hù)端,這里有很多免費(fèi)的選擇:例如, 可以全平臺(tái)使用的?FileZilla?, windows上使用的WinSCP?, Mac和 windows上都能使用的?Cyberduck?,還有很多)。
注意:還有其他方法可以在遠(yuǎn)程服務(wù)器上發(fā)布內(nèi)容,如rsync和git,但并不像FTP那樣簡(jiǎn)單,我們不會(huì)在這里討論。(一定看git教程!!)
使用在線工具如 GitHub 或 Google App Engine
有一些工具能使你在線發(fā)布網(wǎng)站?:
- GitHub?是一個(gè)“社交編程”網(wǎng)站。它允許你上傳代碼庫(kù)并儲(chǔ)存在?Git?版本控制系統(tǒng)里。?然后你可以協(xié)作代碼項(xiàng)目,系統(tǒng)是默認(rèn)開(kāi)源的,意味著世界上任何人都可以找到你 GitHub 上的代碼。去使用 GitHub,從中學(xué)習(xí)并且提高自己吧!?你也可以對(duì)別人的代碼那樣做! 這是一個(gè)非常重要、有用的社區(qū),而且?Git/GitHub 是非常流行的?version control system?— 大部分科技公司在工作中使用它。?GitHub 有一個(gè)非常有用的特點(diǎn)叫?GitHub pages,允許你將網(wǎng)站代碼放在網(wǎng)上。
- Google App Engine
不像大部分其它主機(jī)服務(wù),這類(lèi)工具通常是免費(fèi)的,不過(guò)你只能使用有限的功能。
使用像 Thimble 的基于 Web 的集成開(kāi)發(fā)環(huán)境
有許多web應(yīng)用能夠仿真一個(gè)網(wǎng)站開(kāi)發(fā)環(huán)境,允許你輸入 HTML、CSS 和 JavaScript 然后顯示代碼的結(jié)果 —— 全部在一個(gè)標(biāo)簽頁(yè)里!通常這些工具都很簡(jiǎn)單,對(duì)學(xué)習(xí)很有幫助,而且是免費(fèi)的(基本功能),它們?cè)谝粋€(gè)獨(dú)特的地址顯示你提交的網(wǎng)頁(yè)。不過(guò),基礎(chǔ)功能是很有限的,而且這些應(yīng)用通常不提供如圖像的內(nèi)容的主機(jī)空間。
使用一下以下幾種工具,看看你最喜歡哪一個(gè):
- JSFiddle
- Thimble
- JSBin
- CodePen
?通過(guò)GitHub發(fā)布簡(jiǎn)單。
現(xiàn)在,讓我們通過(guò)Github頁(yè)面告訴你公布的你的代碼是如此的
提示: 確保你的文件夾有一個(gè)?index.html?文件.
現(xiàn)在將你的瀏覽器轉(zhuǎn)到?username.github.io 來(lái)在線查看你的網(wǎng)站。比如,如果用戶(hù)名為chrisdavidmills, 請(qǐng)轉(zhuǎn)到?chrisdavidmills.github.io。
提示: 你的網(wǎng)站可能需要幾分鐘的時(shí)間才能投入使用。 如果它不能立即工作,你可能需要等待幾分鐘,然后再試一次。
想要了解更多,請(qǐng)看?GitHub Pages Help.
關(guān)于變量命名的規(guī)則
你可以給你的變量賦任何你喜歡的名字,但有一些限制。 一般你應(yīng)當(dāng)堅(jiān)持使用拉丁字符(0-9,a-z,A-Z)和下劃線字符。
- 你不應(yīng)當(dāng)使用規(guī)則之外的其他字符,因?yàn)樗鼈兛赡芤l(fā)錯(cuò)誤,或?qū)?guó)際用戶(hù)來(lái)說(shuō)難以理解。
- 變量名不要以下劃線開(kāi)頭——?以下劃線開(kāi)頭的被某些JavaScript設(shè)計(jì)為特殊的含義,因此可能讓人迷惑。
- 變量名不要以數(shù)字開(kāi)頭。這種行為是不被允許的,并且將引發(fā)一個(gè)錯(cuò)誤。
- 一個(gè)可靠的命名約定叫做?"小寫(xiě)駝峰命名法",用來(lái)將多個(gè)單詞組在一起,小寫(xiě)整個(gè)命名的第一個(gè)字母然后大寫(xiě)剩下單詞的首字符。我們已經(jīng)在文章中使用了這種命名方法。
- 讓變量名直觀,它們描述了所包含的數(shù)據(jù)。不要只使用單一的字母/數(shù)字,或者長(zhǎng)句。
- 變量名大小寫(xiě)敏感——因此myage與myAge是2個(gè)不同的變量。
- 最后也是最重要的一點(diǎn)—— 你應(yīng)當(dāng)避免使用JavaScript的保留字給變量命名。保留字,即是組成JavaScript的實(shí)際語(yǔ)法的單詞!因此諸如?var,?function,?let和?for等,都不能被作為變量名使用。瀏覽器將把它們識(shí)別為不同的代碼項(xiàng),因此你將得到錯(cuò)誤。
Note: 你能從詞匯語(yǔ)法—關(guān)鍵字找到一個(gè)相當(dāng)完整的保留關(guān)鍵字列表來(lái)避免使用關(guān)鍵字當(dāng)作變量。
好的命名示例:
age myAge init initialColor finalOutputValue audio1 audio2差的命名示例:
1 a _12 myage MYAGE var Document skjfndskjfnbdskjfb thisisareallylongstupidvariablenameman現(xiàn)在嘗試創(chuàng)建更多的變量,請(qǐng)將上面的指導(dǎo)泯記于心。
有用的字符串方法(記住,字符串本值是不可變的!,你要另外把變化后的值賦給新的變量)
數(shù)組(數(shù)組可變)
事件介紹
JavaScript事件代理
JavaScript 事件委托 以及jQuery對(duì)事件委托的支持
Event delegation
適合初學(xué)者的JavaScript面向?qū)ο?/p>
對(duì)象原型
JavaScript 中的繼承
使用JSON?
客戶(hù)端 Web API(未完!,翻譯!)
從服務(wù)器獲取數(shù)據(jù)
語(yǔ)法和數(shù)據(jù)類(lèi)型
流程控制與錯(cuò)誤處理
函數(shù)
箭頭函數(shù)
delete
delete操作符,刪除一個(gè)對(duì)象或一個(gè)對(duì)象的屬性或者一個(gè)數(shù)組中某一個(gè)鍵值。語(yǔ)法如下:
delete objectName; delete objectName.property; delete objectName[index]; delete property; // legal only within a with statementobjectName是一個(gè)對(duì)象名,property?是一個(gè)已經(jīng)存在的屬性,index是數(shù)組中的一個(gè)已經(jīng)存在的鍵值的索引值。
第四行的形式只在with聲明的狀態(tài)下是合法的, 從對(duì)象中刪除一個(gè)屬性。
你能使用?delete?刪除各種各樣的隱式聲明, 但是被var聲明的除外。
如果?delete?操作成功,屬性或者元素會(huì)變成?undefined。如果?delete可行會(huì)返回true,如果不成功返回false。
x = 42; var y = 43; myobj = new Number(); myobj.h = 4; // create property h delete x; // returns true (can delete if declared implicitly) delete y; // returns false (cannot delete if declared with var) delete Math.PI; // returns false (cannot delete predefined properties) delete myobj.h; // returns true (can delete user-defined properties) delete myobj; // returns true (can delete if declared implicitly)?
void
void 運(yùn)算符運(yùn)用方法如下:
void (expression) void expressionvoid運(yùn)算符,表明一個(gè)運(yùn)算沒(méi)有返回值。expression是javaScript表達(dá)式,括號(hào)中的表達(dá)式是一個(gè)可選項(xiàng),當(dāng)然使用該方式是一種好的形式。
你可以使用void運(yùn)算符指明一個(gè)超文本鏈接。該表達(dá)式是有效的,但是并不會(huì)在當(dāng)前文檔中進(jìn)行加載。
如下創(chuàng)建了一個(gè)超鏈接文本,當(dāng)用戶(hù)單擊該文本時(shí),不會(huì)有任何效果。
<a href="javascript:void(0)">Click here to do nothing</a>下面的代碼創(chuàng)建了一個(gè)超鏈接,當(dāng)用戶(hù)單擊它時(shí),提交一個(gè)表單。
<a href="javascript:void(document.form.submit())"> Click here to submit</a>?
in
in操作符,如果所指定的屬性確實(shí)存在于所指定的對(duì)象中,則會(huì)返回true,語(yǔ)法如下:
propNameOrNumber in objectName在這里?propNameOrNumber可以是一個(gè)代表著屬性名的字符串或者是一個(gè)代表著數(shù)組索引的數(shù)值表達(dá)式,而objectName則是一個(gè)對(duì)象名。
下面的例子是?in?操作的常見(jiàn)用法。
// Arrays var trees = new Array("redwood", "bay", "cedar", "oak", "maple"); 0 in trees; // returns true 3 in trees; // returns true 6 in trees; // returns false "bay" in trees; // returns false (you must specify the index number,// not the value at that index) "length" in trees; // returns true (length is an Array property)// Predefined objects "PI" in Math; // returns true var myString = new String("coral"); "length" in myString; // returns true// Custom objects var mycar = {make: "Honda", model: "Accord", year: 1998}; "make" in mycar; // returns true "model" in mycar; // returns true?
左值表達(dá)式
左值可以作為賦值的目標(biāo)。
new
你可以使用new?operator?創(chuàng)建一個(gè)自定義類(lèi)型或者是預(yù)置類(lèi)型的對(duì)象實(shí)例。用法如下:
var objectName = new objectType([param1, param2, ..., paramN]);super
super?關(guān)鍵字可以用來(lái)調(diào)用一個(gè)對(duì)象父類(lèi)的函數(shù),它在用來(lái)調(diào)用一個(gè)類(lèi)的父類(lèi)的構(gòu)造函數(shù)時(shí)非常有用,比如:
super([arguments]); // calls the parent constructor. super.functionOnParent([arguments]);?
擴(kuò)展語(yǔ)句
擴(kuò)展語(yǔ)句符允許一個(gè)表達(dá)式在原地展開(kāi), 當(dāng)需要多個(gè)參數(shù) (比如函數(shù)調(diào)用時(shí)) 或者多個(gè)值(比如字面量數(shù)組) 。
例如:現(xiàn)在你有一個(gè)數(shù)組,你想創(chuàng)建一個(gè)新數(shù)組,并將剛才那個(gè)作為它的一部分,用array的字面語(yǔ)法是不夠的,你不得不寫(xiě)一些代碼實(shí)現(xiàn)它,比如用些push,?splice,?concat等等。但是用spread syntax就沒(méi)問(wèn)題了:
var parts = ['shoulder', 'knees']; var lyrics = ['head', ...parts, 'and', 'toes'];類(lèi)似的,擴(kuò)展語(yǔ)句也可以用在函數(shù)調(diào)用的時(shí)候:
function f(x, y, z) { } var args = [0, 1, 2]; f(...args);數(shù)字對(duì)象
內(nèi)置的Number對(duì)象有一些有關(guān)數(shù)字的常量屬性,如最大值、不是一個(gè)數(shù)字和無(wú)窮大的。你不能改變這些屬性,但可以按下邊的方式使用它們:
<span style="color:#333333"><code class="language-html">var biggestNum = Number.MAX_VALUE; var smallestNum = Number.MIN_VALUE; var infiniteNum = Number.POSITIVE_INFINITY; var negInfiniteNum = Number.NEGATIVE_INFINITY; var notANum = Number.NaN;</code></span>你永遠(yuǎn)只用從Number對(duì)象引用上邊顯示的屬性,而不是你自己創(chuàng)建的Number對(duì)象的屬性。
下面的表格匯總了數(shù)字對(duì)象的屬性:
數(shù)字的屬性
| Number.MAX_VALUE | 可表示的最大值 |
| Number.MIN_VALUE | 可表示的最小值 |
| Number.NaN | 特指”非數(shù)字“ |
| Number.NEGATIVE_INFINITY | 特指“負(fù)無(wú)窮”;在溢出時(shí)返回 |
| Number.POSITIVE_INFINITY | 特指“正無(wú)窮”;在溢出時(shí)返回 |
| Number.EPSILON | 表示1和比最接近1且大于1的最小Number之間的差別 |
| Number.MIN_SAFE_INTEGER | JavaScript最小安全整數(shù). |
| Number.MAX_SAFE_INTEGER | JavaScript最大安全整數(shù). |
| Number.parseFloat() | 把字符串參數(shù)解析成浮點(diǎn)數(shù), 和全局方法?parseFloat()?作用一致. |
| Number.parseInt() | 把字符串解析成特定基數(shù)對(duì)應(yīng)的整型數(shù)字,和全局方法?parseInt()?作用一致. |
| Number.isFinite() | 判斷傳遞的值是否為有限數(shù)字。 |
| Number.isInteger() | 判斷傳遞的值是否為整數(shù)。 |
| Number.isNaN() | 判斷傳遞的值是否為?NaN. More robust version of the original global?isNaN(). |
| Number.isSafeInteger() | 判斷傳遞的值是否為安全整數(shù)。 |
數(shù)字的類(lèi)型提供了不同格式的方法以從數(shù)字對(duì)象中檢索信息。以下表格總結(jié)了?數(shù)字類(lèi)型原型上的方法。
| toExponential() | 返回一個(gè)數(shù)字的指數(shù)形式的字符串,形如:1.23e+2 |
| toFixed() | 返回指定小數(shù)位數(shù)的表示形式, var a=123,b=a.toFixed(2)//b="123.00" |
| toPrecision() | 返回一個(gè)指定精度的數(shù)字。如下例子中,a=123中,3會(huì)由于精度限制消失 var a=123,b=a.toPrecision(2)//b="1.2e+2" |
Math的方法
| abs() | 絕對(duì)值 |
| sin(),?cos(),?tan() | 標(biāo)準(zhǔn)三角函數(shù);參數(shù)為弧度 |
| asin(),?acos(),?atan(),?atan2() | 反三角函數(shù); 返回值為弧度 |
| sinh(),?cosh(),?tanh() | 雙曲三角函數(shù); 返回值為弧度. |
| asinh(),?acosh(),?atanh() | 反雙曲三角函數(shù);返回值為弧度. |
| pow(),?exp(),?expm1(),?log10(),?log1p(),?log2() | 指數(shù)與對(duì)數(shù)函數(shù) |
| floor(),?ceil() | 返回最大/最小整數(shù)小于/大于或等于參數(shù) |
| min(),?max() | ? 返回一個(gè)以逗號(hào)間隔的數(shù)字參數(shù)列表中的較小或較大值(分別地) |
| random() | 返回0和1之間的隨機(jī)數(shù)。 |
| round(),?fround(),?trunc(), | 四舍五入和截?cái)嗪瘮?shù) |
| sqrt(),?cbrt(),?hypot() | 平方根,立方根,平方參數(shù)的和的平方根? 兩個(gè)參數(shù)平方和的平方根 |
| sign() | 數(shù)字的符號(hào), 說(shuō)明數(shù)字是否為正、負(fù)、零。 |
| clz32(), imul() | 在32位2進(jìn)制表示中,開(kāi)頭的0的數(shù)量. 返回傳入的兩個(gè)參數(shù)相乘結(jié)果的類(lèi)C的32位表現(xiàn)形式 |
和其他對(duì)象不同,你不能夠創(chuàng)建一個(gè)自己的Math對(duì)象。你只能使用內(nèi)置的Math對(duì)象。
?
日期對(duì)象
JavaScript沒(méi)有日期數(shù)據(jù)類(lèi)型。但是你可以在你的程序里使用?Date?對(duì)象和其方法來(lái)處理日期和時(shí)間。Date對(duì)象有大量的設(shè)置、獲取和操作日期的方法。?它并不含有任何屬性。
JavaScript 處理日期數(shù)據(jù)類(lèi)似于Java。這兩種語(yǔ)言有許多一樣的處理日期的方法,也都是以1970年1月1日00:00:00以來(lái)的毫秒數(shù)來(lái)儲(chǔ)存數(shù)據(jù)類(lèi)型的。
Date?對(duì)象的范圍是相對(duì)距離 UTC 1970年1月1日 的前后 100,000,000 天。
創(chuàng)建一個(gè)日期對(duì)象:
<span style="color:#333333"><code class="language-html">var dateObjectName = new Date([parameters]);</code></span>這里的 dateObjectName 對(duì)象是所創(chuàng)建的Date對(duì)象的一個(gè)名字,它可以成為一個(gè)新的對(duì)象或者已存在的其他對(duì)象的一個(gè)屬性。
不使用?new?關(guān)鍵字來(lái)調(diào)用Date對(duì)象將返回當(dāng)前時(shí)間和日期的字符串
前邊的語(yǔ)法中的參數(shù)(parameters)可以是一下任何一種:
- 無(wú)參數(shù) : 創(chuàng)建今天的日期和時(shí)間,例如:?today = new Date();.
- 一個(gè)符合以下格式的表示日期的字符串: "月 日, 年?時(shí):分:秒." 例如:?var Xmas95 = new Date("December 25, 1995 13:30:00")。如果你省略時(shí)、分、秒,那么他們的值將被設(shè)置為0。
- 一個(gè)年,月,日的整型值的集合,例如:?var Xmas95 = new Date(1995, 11, 25)。
- 一個(gè)年,月,日,時(shí),分,秒的集合,例如:?var Xmas95 = new Date(1995, 11, 25, 9, 30, 0);.
Date對(duì)象的方法
處理日期時(shí)間的Date對(duì)象方法可分為以下幾類(lèi):
- "set" 方法, 用于設(shè)置Date對(duì)象的日期和時(shí)間的值。
- "get" 方法,用于獲取Date對(duì)象的日期和時(shí)間的值。
- "to" 方法,用于返回Date對(duì)象的字符串格式的值。
- parse 和UTC 方法, 用于解析Date字符串。
通過(guò)“get”和“set”方法,你可以分別設(shè)置和獲取秒,分,時(shí),日,星期,月份,年。這里有個(gè)getDay方法可以返回星期,但是沒(méi)有相應(yīng)的setDay方法用來(lái)設(shè)置星期,因?yàn)樾瞧谑亲詣?dòng)設(shè)置的。這些方法用整數(shù)來(lái)代表以下這些值:
- 秒,分:?0 至?59
- 時(shí):?0 至?23
- 星期:?0 (周日) 至?6 (周六)
- 日期:1 至?31?
- 月份:?0 (一月) to 11 (十二月)
- 年份:?從1900開(kāi)始的年數(shù)
例如, 假設(shè)你定義了如下日期:
var Xmas95 = new Date("December 25, 1995");Then?Xmas95.getMonth()?返回 11, and?Xmas95.getFullYear()?返回 1995.
getTime?和?setTime?方法對(duì)于比較日期是非常有用的。getTime方法返回從1970年1月1日00:00:00的毫秒數(shù)。
例如,以下代碼展示了今年剩下的天數(shù):
var today = new Date(); var endYear = new Date(1995, 11, 31, 23, 59, 59, 999); // 設(shè)置日和月,注意,月份是0-11 endYear.setFullYear(today.getFullYear()); // 把年設(shè)置為今年 var msPerDay = 24 * 60 * 60 * 1000; // 每天的毫秒數(shù) var daysLeft = (endYear.getTime() - today.getTime()) / msPerDay; var daysLeft = Math.round(daysLeft); //返回今年剩下的天數(shù)這個(gè)例子中,創(chuàng)建了一個(gè)包含今天的日期的Date對(duì)象,并命名為today,然后創(chuàng)建了一個(gè)名為endYear的Date對(duì)象,并把年份設(shè)置為當(dāng)前年份,接著使用每天的毫秒數(shù)和getTime分別獲取今天和年底的毫秒數(shù),計(jì)算出了今天到年底的天數(shù),最后四舍五入得到今年剩下的天數(shù)。
parse方法對(duì)于從日期字符串賦值給現(xiàn)有的Date對(duì)象很有用,例如:以下代碼使用parse和setTime分配了一個(gè)日期值給IPOdate對(duì)象:
var IPOdate = new Date(); IPOdate.setTime(Date.parse("Aug 9, 1995"));例子:
在下邊的例子中,JSClock()函數(shù)返回了用數(shù)字時(shí)鐘格式的時(shí)間:
function JSClock() {var time = new Date();var hour = time.getHours();var minute = time.getMinutes();var second = time.getSeconds();var temp = "" + ((hour > 12) ? hour - 12 : hour);if (hour == 0)temp = "12";temp += ((minute < 10) ? ":0" : ":") + minute;temp += ((second < 10) ? ":0" : ":") + second;temp += (hour >= 12) ? " P.M." : " A.M.";return temp; }JSClock函數(shù)首先創(chuàng)建了一個(gè)叫做time的新的Date對(duì)象,因?yàn)闆](méi)有參數(shù),所以time代表了當(dāng)前日期和時(shí)間。然后調(diào)用了getHours,?getMinutes以及getSeconds方法把當(dāng)前的時(shí)分秒分別賦值給了hour,?minute,second。
接下來(lái)的4句在time的基礎(chǔ)上創(chuàng)建了一個(gè)字符串,第一句創(chuàng)建了一個(gè)變量temp,并通過(guò)一個(gè)條件表達(dá)式進(jìn)行了賦值,如果小時(shí)大于12,就為?(hour - 12), 其他情況就為 hour, 除非 hour 為?0, 這種情況下,它會(huì)變成 12.
接下來(lái)的語(yǔ)句拼接了minute的值到temp后。如果minute小于10,條件表達(dá)式就會(huì)在minute前邊加個(gè)0,其他情況下加一個(gè)分號(hào)。然后按同樣的方式在temp后拼接上了秒。
最后,如果hour是12或者更大,條件表達(dá)式會(huì)在temp后拼接"P.M.",否則拼接"A.M." 。
?
國(guó)際化轉(zhuǎn)換時(shí)間及日期(Intl.DateTimeFormat是根據(jù)語(yǔ)言來(lái)格式化日期和時(shí)間的對(duì)象的構(gòu)造器)
國(guó)際化數(shù)字轉(zhuǎn)換(Intl.NumberFormat是對(duì)語(yǔ)言敏感的格式化數(shù)字類(lèi)的構(gòu)造器類(lèi))
字符串
String對(duì)象方法
方法 描述 charAt,?charCodeAt,?codePointAt 返回字符串指定位置的字符或者字符編碼。 indexOf,?lastIndexOf 分別返回字符串中指定子串的位置或最后位置。 startsWith,?endsWith,?includes 返回字符串是否以指定字符串開(kāi)始、結(jié)束或包含指定字符串。 concat 連接兩個(gè)字符串并返回新的字符串。 fromCharCode,?fromCodePoint 從指定的Unicode值序列構(gòu)造一個(gè)字符串。這是一個(gè)String類(lèi)方法,不是實(shí)例方法。 split 通過(guò)將字符串分離成一個(gè)個(gè)子串來(lái)把一個(gè)String對(duì)象分裂到一個(gè)字符串?dāng)?shù)組中。 slice 從一個(gè)字符串提取片段并作為新字符串返回。 substring,?substr 分別通過(guò)指定起始和結(jié)束位置,起始位置和長(zhǎng)度來(lái)返回字符串的指定子集。 match,?replace,?search 通過(guò)正則表達(dá)式來(lái)工作. toLowerCase,?toUpperCase
分別返回字符串的小寫(xiě)表示和大寫(xiě)表示。
normalize 按照指定的一種 Unicode 正規(guī)形式將當(dāng)前字符串正規(guī)化。 repeat 將字符串內(nèi)容重復(fù)指定次數(shù)后返回。 trim 去掉字符串開(kāi)頭和結(jié)尾的空白字符。
多行模板字符串
模板字符串是一種允許內(nèi)嵌表達(dá)式的String字面值. 可以用它實(shí)現(xiàn)多行字符串或者字符串內(nèi)插等特性.
模板字符串使用反勾號(hào) (` `) (grave accent) 包裹內(nèi)容而不是單引號(hào)或雙引號(hào). 模板字符串可以包含占位符. 占位符用美元符號(hào)和花括號(hào)標(biāo)識(shí) (${expression}).
多行
源代碼中插入的任何新行開(kāi)始字符都作為模板字符串的內(nèi)容. 使用一般的字符串時(shí), 為了創(chuàng)建多行的字符串不得不用如下語(yǔ)法:
console.log("string text line 1\n\ string text line 2"); // "string text line 1 // string text line 2"為了實(shí)現(xiàn)同樣效果的多行字符串, 現(xiàn)在可以寫(xiě)成如下形式:
console.log(`string text line 1 string text line 2`); // "string text line 1 // string text line 2"嵌入表達(dá)式
為了在一般的字符串中嵌入表達(dá)式, 需要使用如下語(yǔ)法:
var a = 5; var b = 10; console.log("Fifteen is " + (a + b) + " and\nnot " + (2 * a + b) + "."); // "Fifteen is 15 and // not 20."現(xiàn)在, 使用模板字符串, 可以使用語(yǔ)法糖讓類(lèi)似功能的實(shí)現(xiàn)代碼更具可讀性:
var a = 5; var b = 10; console.log(`Fifteen is ${a + b} and\nnot ${2 * a + b}.`); // "Fifteen is 15 and // not 20."更多信息, 請(qǐng)閱讀?JavaScript reference?中的?Template strings。
索引集合類(lèi) (Indexed collections)
?
數(shù)組的方法(array methods)
Array?對(duì)象具有下列方法:
concat()?連接兩個(gè)數(shù)組并返回一個(gè)新的數(shù)組。
var myArray = new Array("1", "2", "3"); myArray = myArray.concat("a", "b", "c"); // myArray is now ["1", "2", "3", "a", "b", "c"]join(deliminator = ',')?將數(shù)組的所有元素連接成一個(gè)字符串。
var myArray = new Array("Wind", "Rain", "Fire"); var list = myArray.join(" - "); // list is "Wind - Rain - Fire"push()?在數(shù)組末尾添加一個(gè)或多個(gè)元素,并返回?cái)?shù)組操作后的長(zhǎng)度。
var myArray = new Array("1", "2"); myArray.push("3"); // myArray is now ["1", "2", "3"]pop()?從數(shù)組移出最后一個(gè)元素,并返回該元素。
var myArray = new Array("1", "2", "3"); var last = myArray.pop(); // myArray is now ["1", "2"], last = "3"shift()?從數(shù)組移出第一個(gè)元素,并返回該元素。
var myArray = new Array ("1", "2", "3"); var first = myArray.shift(); // myArray is now ["2", "3"], first is "1"unshift()?在數(shù)組開(kāi)頭添加一個(gè)或多個(gè)元素,并返回?cái)?shù)組的新長(zhǎng)度。
var myArray = new Array ("1", "2", "3"); myArray.unshift("4", "5"); // myArray becomes ["4", "5", "1", "2", "3"]slice(start_index, upto_index)?從數(shù)組提取一個(gè)片段,并作為一個(gè)新數(shù)組返回。
var myArray = new Array ("a", "b", "c", "d", "e"); myArray = myArray.slice(1, 4); // starts at index 1 and extracts all elements// until index 3, returning [ "b", "c", "d"]splice(index, count_to_remove, addElement1, addElement2, ...)從數(shù)組移出一些元素,(可選)并替換它們。
var myArray = new Array ("1", "2", "3", "4", "5"); myArray.splice(1, 3, "a", "b", "c", "d"); // myArray is now ["1", "a", "b", "c", "d", "5"] // This code started at index one (or where the "2" was), // removed 3 elements there, and then inserted all consecutive // elements in its place.reverse()?顛倒數(shù)組元素的順序:第一個(gè)變成最后一個(gè),最后一個(gè)變成第一個(gè)。
var myArray = new Array ("1", "2", "3"); myArray.reverse(); // transposes the array so that myArray = [ "3", "2", "1" ]sort()?給數(shù)組元素排序。
var myArray = new Array("Wind", "Rain", "Fire"); myArray.sort(); // sorts the array so that myArray = [ "Fire", "Rain", "Wind" ]sort()?也可以帶一個(gè)回調(diào)函數(shù)來(lái)決定怎么比較數(shù)組元素。這個(gè)回調(diào)函數(shù)比較兩個(gè)值,并返回3個(gè)值中的一個(gè):
例如,下面的代碼通過(guò)字符串的最后一個(gè)字母進(jìn)行排序:
var sortFn = function(a, b){if (a[a.length - 1] < b[b.length - 1]) return -1;if (a[a.length - 1] > b[b.length - 1]) return 1;if (a[a.length - 1] == b[b.length - 1]) return 0; } myArray.sort(sortFn); // sorts the array so that myArray = ["Wind","Fire","Rain"]- 如果 a 小于 b ,返回 -1(或任何負(fù)數(shù))
- 如果?a?大于?b?,返回 1 (或任何正數(shù))
- 如果?a?和?b?相等,返回?0。
indexOf(searchElement[, fromIndex])?在數(shù)組中搜索searchElement?并返回第一個(gè)匹配的索引。
var a = ['a', 'b', 'a', 'b', 'a']; console.log(a.indexOf('b')); // logs 1 // Now try again, starting from after the last match console.log(a.indexOf('b', 2)); // logs 3 console.log(a.indexOf('z')); // logs -1, because 'z' was not foundlastIndexOf(searchElement[, fromIndex])?和?indexOf 差不多,但這是從結(jié)尾開(kāi)始,并且是反向搜索。
var a = ['a', 'b', 'c', 'd', 'a', 'b']; console.log(a.lastIndexOf('b')); // logs 5 // Now try again, starting from before the last match console.log(a.lastIndexOf('b', 4)); // logs 1 console.log(a.lastIndexOf('z')); // logs -1forEach(callback[, thisObject])?在數(shù)組每個(gè)元素項(xiàng)上執(zhí)行callback。
var a = ['a', 'b', 'c']; a.forEach(function(element) { console.log(element);} ); // logs each item in turnmap(callback[, thisObject])?在數(shù)組的每個(gè)單元項(xiàng)上執(zhí)行callback函數(shù),并把返回包含回調(diào)函數(shù)返回值的新數(shù)組(譯者注:也就是遍歷數(shù)組,并通過(guò)callback對(duì)數(shù)組元素進(jìn)行操作,并將所有操作結(jié)果放入數(shù)組中并返回該數(shù)組)。
var a1 = ['a', 'b', 'c']; var a2 = a1.map(function(item) { return item.toUpperCase(); }); console.log(a2); // logs A,B,Cfilter(callback[, thisObject])?返回一個(gè)包含所有在回調(diào)函數(shù)上返回為true的元素的新數(shù)組(譯者注:callback在這里擔(dān)任的是過(guò)濾器的角色,當(dāng)元素符合條件,過(guò)濾器就返回true,而filter則會(huì)返回所有符合過(guò)濾條件的元素)。
var a1 = ['a', 10, 'b', 20, 'c', 30]; var a2 = a1.filter(function(item) { return typeof item == 'number'; }); console.log(a2); // logs 10,20,30every(callback[, thisObject])?當(dāng)數(shù)組中每一個(gè)元素在callback上被返回true時(shí)就返回true(譯者注:同上,every其實(shí)類(lèi)似filter,只不過(guò)它的功能是判斷是不是數(shù)組中的所有元素都符合條件,并且返回的是布爾值)。
function isNumber(value){return typeof value == 'number'; } var a1 = [1, 2, 3]; console.log(a1.every(isNumber)); // logs true var a2 = [1, '2', 3]; console.log(a2.every(isNumber)); // logs falsesome(callback[, thisObject])?只要數(shù)組中有一項(xiàng)在callback上被返回true,就返回true(譯者注:同上,類(lèi)似every,不過(guò)前者要求都符合篩選條件才返回true,后者只要有符合條件的就返回true)。
function isNumber(value){return typeof value == 'number'; } var a1 = [1, 2, 3]; console.log(a1.some(isNumber)); // logs true var a2 = [1, '2', 3]; console.log(a2.some(isNumber)); // logs true var a3 = ['1', '2', '3']; console.log(a3.some(isNumber)); // logs false以上方法都帶一個(gè)被稱(chēng)為迭代方法的的回調(diào)函數(shù),因?yàn)樗麄円阅撤N方式迭代整個(gè)數(shù)組。都有一個(gè)可選的第二參數(shù)?thisObject,如果提供了這個(gè)參數(shù),thisObject?變成回調(diào)函數(shù)內(nèi)部的 this 關(guān)鍵字的值。如果沒(méi)有提供,例如函數(shù)在一個(gè)顯示的對(duì)象上下文外被調(diào)用時(shí),this 將引用全局對(duì)象(window).
實(shí)際上在調(diào)用回調(diào)函數(shù)時(shí)傳入了3個(gè)參數(shù)。第一個(gè)是當(dāng)前元素項(xiàng)的值,第二個(gè)是它在數(shù)組中的索引,第三個(gè)是數(shù)組本身的一個(gè)引用。?JavaScript 函數(shù)忽略任何沒(méi)有在參數(shù)列表中命名的參數(shù),因此提供一個(gè)只有一個(gè)參數(shù)的回調(diào)函數(shù)是安全的,例如?alert?。
reduce(callback[, initialValue])?使用回調(diào)函數(shù)?callback(firstValue, secondValue)?把數(shù)組列表計(jì)算成一個(gè)單一值(譯者注:他數(shù)組元素兩兩遞歸處理的方式把數(shù)組計(jì)算成一個(gè)值)
var a = [10, 20, 30]; var total = a.reduce(function(first, second) { return first + second; }, 0); console.log(total) // Prints 60reduceRight(callback[, initalvalue])?和?reduce()相似,但這從最后一個(gè)元素開(kāi)始的。
reduce?和?reduceRight?是迭代數(shù)組方法中最不被人熟知的兩個(gè)函數(shù).。他們應(yīng)該使用在那些需要把數(shù)組的元素兩兩遞歸處理,并最終計(jì)算成一個(gè)單一結(jié)果的算法。
使用類(lèi)數(shù)組對(duì)象(array-like objects)
一些 JavaScript 對(duì)象, 例如?document.getElementsByTagName()?返回的?NodeList?或者函數(shù)內(nèi)部可用的?arguments?對(duì)象,他們表面上看起來(lái),外觀和行為像數(shù)組,但是不共享他們所有的方法。arguments?對(duì)象提供一個(gè)?length?屬性,但是不實(shí)現(xiàn)?forEach()?方法, 例如:
Array的原生(prototype)方法可以用來(lái)處理類(lèi)似數(shù)組行為的對(duì)象,例如: :
function printArguments() {Array.prototype.forEach.call(arguments, function(item) {console.log(item);}); }Array的常規(guī)方法也可以用于處理字符串,因?yàn)樗峁┝诵蛄性L問(wèn)字符轉(zhuǎn)為數(shù)組的簡(jiǎn)單方法:
Array.prototype.forEach.call("a string", function(chr) {console.log(chr); });數(shù)組和正則表達(dá)式
當(dāng)一個(gè)數(shù)組作為字符串和正則表達(dá)式的匹配結(jié)果時(shí),該數(shù)組將會(huì)返回相關(guān)匹配信息的屬性和元素。?RegExp.exec(),?String.match()?和?String.split()?的返回值是一個(gè)數(shù)組。?使用數(shù)組和正則表達(dá)式的的更多信息, 請(qǐng)看?Regular Expressions.
帶鍵的集合
使用對(duì)象
對(duì)象模型的細(xì)節(jié)
繼承與原型鏈
總結(jié)
以上是生活随笔為你收集整理的MDN文档基础知识搜集的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: java线程interrupt用法_Ja
- 下一篇: 无规则弹窗自动点击插件_vscode 插