JavaScriptNotes

JavaScript


一.什么是JavaScript

JavaScript是一種計(jì)算機(jī)編程語言:

通過給計(jì)算機(jī)處理問題的邏輯指令從而得到相應(yīng)結(jié)果的一種人機(jī)交互語言

HTML是標(biāo)記語言,CSS是層疊樣式表, 都不能算作編程語言, 因?yàn)椴痪邆?b>圖靈完備性(一切可計(jì)算的問題都能計(jì)算,--圖靈機(jī))

JavaScript與Java往往會(huì)被人誤解,其實(shí)兩者毫無關(guān)系。


二.JavaScript能做什么掌眠?

1.Web前端 html? css? JavaScript

2.node.js ?后端

3.Hybrid App(混合app) 淘寶 微信 京東..

Native App是一種基于智能手機(jī)本地操作系統(tǒng)如iOS、Android、WP并使用原生編寫運(yùn)行的第三方應(yīng)用程序,也叫本地app

Hybrid App(混合模式移動(dòng)應(yīng)用)是指介于web-app仁连、native-app這兩者之間的app,兼具“Native App良好用戶交互體驗(yàn)的優(yōu)勢”和“Web App跨平臺(tái)開發(fā)的優(yōu)勢”阱穗。

比如街旁網(wǎng)最開始的應(yīng)用就是包了個(gè)客戶端的殼饭冬,其實(shí)里面是HTML5的網(wǎng)頁,后來才推出真正的原生應(yīng)用

Hybrid總體特性更接近Native App但是和Web App區(qū)別較大揪阶。只是因?yàn)橥瑫r(shí)使用了網(wǎng)頁語言編碼昌抠,所以開發(fā)成本和難度比Native App要小很多。

4.桌面應(yīng)用

5.游戲cocos2d-js? unity3D? 白鷺

6.阿特伍德定律 ?

any application that can be written in JavaScript, will eventually be written in JavaScript.

---Jeff Atwood


三.計(jì)算機(jī)語言分類

1.機(jī)器語言??00101010101011011

2.匯編語言????計(jì)算機(jī)只能讀懂機(jī)器指令鲁僚,程序員用匯編語言寫出的源程序炊苫,再用匯編編譯器將其編譯為機(jī)器碼,再由計(jì)算機(jī)執(zhí)行冰沙。--符號語言,不同的計(jì)算機(jī)有不同的匯編語言侨艾。

3.高級語言

高級語言又被稱之為編譯性語言,在編譯性語言的基礎(chǔ)上分支出了解釋性語言拓挥;

編譯性語言(C,C++....)的特點(diǎn):開發(fā)速度慢唠梨,執(zhí)行效率高;

解釋性語言(JavaScript,Python,php,Perl等)的特點(diǎn):開發(fā)速度快侥啤,執(zhí)行效率稍慢当叭。


四.JavaScript的由來

1992年底,美國國家超級電腦應(yīng)用中心(NCSA)開始開發(fā)一個(gè)獨(dú)立的瀏覽器盖灸,叫做Mosaic蚁鳖。

1994年10月,NCSA的一個(gè)主要程序員Marc Andreessen聯(lián)合風(fēng)險(xiǎn)投資家Jim Clark赁炎,成立了Mosaic通信公司才睹,不久后改名為Netscape(網(wǎng)景)。

1994年12月甘邀,Netscape發(fā)布瀏覽器Navigator1.0琅攘,市場份額一舉超過90%。

1995年 Netscape 程序員 Brendan Eich 設(shè)計(jì)出了LiveScript1.0后來改名JavaScript

1996年3月松邪,Navigator 2.0瀏覽器正式內(nèi)置了JavaScript腳本語言坞琴。

1996年8月,微軟模仿JavaScript開發(fā)了一種相近的語言逗抑,取名為JScript, 內(nèi)置于IE3.0

1996年11月剧辐,網(wǎng)景公司決定將JavaScript提交給歐洲計(jì)算機(jī)制造聯(lián)合會(huì)ECMA寒亥,希望JavaScript能夠成為國際標(biāo)準(zhǔn),以此抵抗微軟。

1997年7月魏颓,ECMA組織發(fā)布262號標(biāo)準(zhǔn)文件(ECMA-262)的第一版吁朦,規(guī)定了瀏覽器腳本語言的標(biāo)準(zhǔn),并將這種語言稱為ECMAScript加勤。這個(gè)版本就是ECMAScript 1.0版。

2009年12月同波,ECMAScript 5.0版正式發(fā)布鳄梅。

2011年6月,ECMAscript 5.1版發(fā)布未檩,并且成為ISO國際標(biāo)準(zhǔn)

2015年6月17日戴尸,ECMAScript 6發(fā)布正式版本,即ECMAScript 2015


五.JavaScript語言及其特點(diǎn)

JavaScript是一種基于對象(Object)和事件驅(qū)動(dòng)(EventDriven)并具有安全性能的腳本語言冤狡。使用它的目的是與HTML超文本標(biāo)記語言孙蒙、Java腳本語言(Java小程序)一起實(shí)現(xiàn)在一個(gè)Web頁面中連接多個(gè)對象,與Web客戶交互作用悲雳。從而可以開發(fā)客戶端的應(yīng)用程序等马篮。它是通過嵌入或調(diào)入到標(biāo)準(zhǔn)的HTML語言中實(shí)現(xiàn)的。它的出現(xiàn)彌補(bǔ)了HTML語言的缺陷怜奖,它是Java與HTML折衷的選擇浑测,具有以下幾個(gè)基本JavaScript特點(diǎn):

1、JavaScript是一種腳本編寫語言

JavaScript是一種腳本語言歪玲,它采用小程序段的方式實(shí)現(xiàn)編程迁央。像其它腳本語言一樣,JavaScript同樣已是一種解釋性語言,它提供了一個(gè)易的開發(fā)過程。它的基本結(jié)構(gòu)形式與C滥崩、C++岖圈、VB、Delphi十分類似钙皮。但它不像這些語言一樣蜂科,需要先編譯,而是在程序運(yùn)行過程中被逐行地解釋短条。它與HTML標(biāo)識結(jié)合在一起导匣,從而方便用戶的使用操作。

2茸时、基于對象的語言贡定。

JavaScript是一種基于對象的語言,同時(shí)以可以看作一種面向?qū)ο蟮目啥肌_@意味著它能運(yùn)用自己已經(jīng)創(chuàng)建的對象缓待。因此蚓耽,許多功能可以來自于腳本環(huán)境中對象的方法與腳本的相互作用。

3旋炒、簡單性

JavaScript的簡單性主要體現(xiàn)在:首先它是一種基于Java基本語句和控制流之上的簡單而緊湊的設(shè)計(jì),從而對于學(xué)習(xí)Java是一種非常好的過渡步悠。其次它的變量類型是采用弱類型,并未使用嚴(yán)格的數(shù)據(jù)類型瘫镇。

4鼎兽、安全性

JavaScript特點(diǎn)之一它是一種安全性語言,它不允許訪問本地的硬盤汇四,并不能將數(shù)據(jù)存入到服務(wù)器上,不允許對網(wǎng)絡(luò)文檔進(jìn)行修改和刪除踢涌,只能通過瀏覽器實(shí)現(xiàn)信息瀏覽或動(dòng)態(tài)交互通孽。從而有效地防止數(shù)據(jù)的丟失。

5睁壁、動(dòng)態(tài)性的

JavaScript特點(diǎn)之一它是動(dòng)態(tài)的背苦,它可以直接對用戶或客戶輸入做出響應(yīng),無須經(jīng)過Web服務(wù)程序潘明。它對用戶的反映響應(yīng)行剂,是采用以事件驅(qū)動(dòng)的方式進(jìn)行的。所謂事件驅(qū)動(dòng)钳降,就是指在主頁(HomePage)中執(zhí)行了某種操作所產(chǎn)生的動(dòng)作厚宰,就稱為“事件”(Event)。比如按下鼠標(biāo)遂填、移動(dòng)窗口铲觉、選擇菜單等都可以視為事件。當(dāng)事件發(fā)生后吓坚,可能會(huì)引起相應(yīng)的事件響應(yīng)撵幽。

6、跨平臺(tái)性

JavaScript是依賴于瀏覽器本身礁击,與操作環(huán)境無關(guān)盐杂,只要能運(yùn)行瀏覽器的計(jì)算機(jī),并支持JavaScript的瀏覽器就可正確執(zhí)行哆窿。從而實(shí)現(xiàn)了“編寫一次,走遍天下”的夢想链烈。實(shí)際上JavaScript最杰出之處在于可以用很小的程序做大量的事。無須有高性能的電腦挚躯,軟件僅需一個(gè)字處理軟件及一瀏覽器测垛,無須WEB服務(wù)器通道,通過自己的電腦即可完成所有的事情秧均。

綜合所述JavaScript是一種新的描述語言食侮,它可以被嵌入到HTML的文件之中号涯。JavaScript語言可以做到回應(yīng)使用者的需求事件(如:form的輸入),而不用任何的網(wǎng)路來回傳輸資料锯七,所以當(dāng)一位使用者輸入一項(xiàng)資料時(shí)链快,它不用經(jīng)過傳給伺服端(server)處理,再傳回來的過程眉尸,而直接可以被客戶端(client)的應(yīng)用程式所處理域蜗。


六.JavaScript 的局限性

1.瀏覽器的兼容;針對不同瀏覽器有可能會(huì)存在兼容性問題噪猾。

2.執(zhí)行效率的問題--------分布式計(jì)算霉祸。


七.JavaScript 的運(yùn)行和開發(fā)環(huán)境

1.瀏覽器上運(yùn)行:chrome firefox opera safari IE 360

2.編譯器:?????sublime notepad++??webstrom 記事本

3.JavaScript程序是用Unicode字符集編寫的(utf = Unicode transformation formats)

4.嚴(yán)格區(qū)分大小寫 (html不區(qū)分大小寫)

在ECMAScript中的一切(變量、函數(shù)名袱蜡、操作符)都是區(qū)分大小寫的


八.JavaScript 在html中的使用

1.在<script>標(biāo)簽中寫js代碼標(biāo)簽中寫js代碼標(biāo)簽中寫js代碼

例如:

使用<script>標(biāo)簽

2.導(dǎo)入外部的JavaScript腳本文件(CSS在前丝蹭,JS在后)

例如:

導(dǎo)入外部Js文件

3.通過事件屬性定義在元素的內(nèi)部

例如:

在標(biāo)簽內(nèi)作事件屬性


九.JavaScript 的注釋

1.單行注釋:??//

2.多行注釋:??/* */


十.Script(指令) 語句結(jié)束符

1.;(英文的分號)

2.換行(直接回車換行)

十一.JavaScript在頁面中輸出內(nèi)容

1.document.write(); 輸出到文檔流

2.console.log();?????輸出到控制臺(tái)

3..innerHTML='';

十二.JavaScript三個(gè)基本的彈框

1.alert();??(提示框,警告框);

2.confirm();??(確認(rèn)框) 有返回值 true||false;

3.prompt();??(輸入框); 可以有兩個(gè)參數(shù)??參數(shù)一:返回用戶輸入的內(nèi)容坪蚁,參數(shù)二奔穿;默認(rèn)值。

十三.第一個(gè)JavaScript的應(yīng)用

1.獲取html中的dom元素??: document.getElementById()敏晤;

2.元素的應(yīng)用:?????????????得到元素的屬性

3.事件的應(yīng)用:????????????????觸發(fā)了事件再執(zhí)行某段代碼

4.函數(shù)的簡單調(diào)用:????????????把好多代碼作為一個(gè)整體贱田,調(diào)用的時(shí)候執(zhí)行

5.簡單運(yùn)算符的應(yīng)用:???????+???-??*???/???%??=

十四.變量和直接量

1.直接量?????程序中直接使用的數(shù)據(jù)值???-- 關(guān)鍵字(保留字)不能直接使用

2.變量????????數(shù)據(jù)臨時(shí)存儲(chǔ)的容器

長久存儲(chǔ)使用數(shù)據(jù)庫,臨時(shí)存儲(chǔ)使用變量

變量使用前必須先聲明使用var 關(guān)鍵字聲明 不聲明嘴脾,直接使用變量男摧,會(huì)報(bào)錯(cuò)。變量在聲明之前調(diào)用译打,返回undefined彩倚。

3.不使用var定義變量,在嚴(yán)格模式(use strict)下會(huì)報(bào)錯(cuò)扶平,局部變量會(huì)變成全局變量帆离,會(huì)造成全局變量污染。

十五.變量聲明

1.聲明一個(gè)變量??var 變量名=值结澄;(聲明的同時(shí)賦值)

2.聲明多個(gè)變量??var 變量1=值哥谷,var 變量2 = 值,var 變量3 = 值(一次聲明多個(gè)使用,分割)

-- 沒有賦值的變量初始值為undefined

3.動(dòng)態(tài)類(弱類型)語言:在運(yùn)行期間才去做數(shù)據(jù)類型檢查的語言麻献,編程時(shí)不用給任何變量指定數(shù)據(jù)類型们妥。如: Python??PHP??Ruby JavaScript

4.靜態(tài)類(強(qiáng)類型)語言:數(shù)據(jù)類型是在編譯期間檢查,在寫程序時(shí)勉吻,要先聲明所有變量的數(shù)據(jù)類型监婶。如:c??c++??c#??java

-- 給沒有聲明的變量賦值,嚴(yán)格模式下會(huì)報(bào)錯(cuò)。(‘use strict’)

5.命名規(guī)則

數(shù)字??字母???_??$ 組成

但是不能以數(shù)字開頭

不能與系統(tǒng)關(guān)鍵字保留字沖突

十六.數(shù)據(jù)類型

1.原始類型
? ? ? ? ? ? ? ? ? ?數(shù)字 ? ? ? ? ? Number

? ? ? ? ? ? ? ? ? 字符串 ? ? ? ?String

? ? ? ? ? ? ? ? ? ?布爾值???????Boolean

? ? ? ? ? ? ? ? ? ? 空 ? ? ? ? ? ? ?null

? ? ? ? ? ? ? ? ? ? 未定義???????undefind

2.對象類型

? ? ? ? ? ? ? ? ? ? ?數(shù)組 ? ? ? ? ? Array

? ? ? ? ? ? ? ? ? ? ? 函數(shù) ? ? ? ? ?Function

? ? ? ? ? ? ? ? ? ? ? ?正則 ? ? ? ? RegExp

? ? ? ? ? ? ? ? ? ? ? ?錯(cuò)誤 ? ? ? ? ?Error?

? ? ? ? ? ? ? ? ? ? ? ?日期 ? ? ? ? ?Date

3.檢測數(shù)據(jù)類型的方法??typeof()

數(shù)值Number

一.整型直接量

1.可以使用八進(jìn)制(不推薦使用)??十進(jìn)制 十六進(jìn)制

八進(jìn)制以 0 開頭(0123 --部分瀏覽器的javascript不支持8進(jìn)制 嚴(yán)格模式下同樣不支持惑惶,不推薦使用

十六進(jìn)制???以0x開頭

2.浮點(diǎn)型直接量? 小數(shù)? ? 科學(xué)計(jì)數(shù)法e? 浮點(diǎn)的精度問題(避免使用浮點(diǎn)進(jìn)行邏輯判斷)煮盼。

3.JavaScript 數(shù)值范圍???5e324 ~ 1.7976931348623157e-308

正無窮??Infinity???負(fù)無窮??-Infinity

0 -0(負(fù)零不常用)? ? ? 相等

100/0 ==??正無窮大???100/-0 ==??負(fù)無窮大??0/-0 = NaN

負(fù)零不常用

4.簡單的數(shù)值運(yùn)算符??+??-?????*?????/??????%

5.非數(shù)字?jǐn)?shù)值NaN???類型是number,但不是數(shù)字带污。(not a number)

NaN的產(chǎn)生

1.0/-0? 得到NaN

2. 字符串參與運(yùn)算? (字符串: 不能轉(zhuǎn)換成數(shù)字的字符串)

特點(diǎn):和任何值都不相等???與任何值運(yùn)算還是NaN

字符串參與運(yùn)算會(huì)得到NaN.不能通過x==NaN來判斷,需通過函數(shù)isNaN()來判斷是否是NaN僵控。

6.isFinite?????????是否有窮 (除了Infinity -Infinity NaN都返回true)

7.isNaN????????????是否是NaN??(在運(yùn)算時(shí)作為判斷)

二.字符串String-----由unicode字符組成的有序序列

定義字符串:

1.單引號 不能嵌套單引號 如果需要嵌套可以使用 \ 進(jìn)行轉(zhuǎn)義。

2.雙引號 不能嵌套雙引號 如果需要嵌套可以使用 \ 進(jìn)行轉(zhuǎn)義鱼冀。

轉(zhuǎn)義字符:(在字符串中有特殊意義的字符需要轉(zhuǎn)義的)

\n 換行

\r 回車(需要原樣輸出document.write('<pre>'))

\t tab

\’??\”??\\???單引號 雙引號 反斜線

Unicode字符 (Unicode 轉(zhuǎn)換)(\u50bb) (\u903c)(js可以解析漢字unicode編碼)

字符串連接符 +(字符串不能換行)

三.布爾值Boolean

定義:布爾值表示 真或假??開或關(guān)???是否

值??true ( 1 )| false (0)

如何得到布爾值:簡單的比較運(yùn)算符 > >= < <=? == !=? ===? !==

===? 恒等? 不但值相等而且數(shù)據(jù)類型也相等

四.Null 和 undefined

Null 為空(可以通過給一個(gè)變量賦null值來清除變量的內(nèi)容)

alert(typeof null) 返回object 創(chuàng)建js時(shí)候的錯(cuò)誤延續(xù)

undefined 表示“缺少值”报破。變量聲明,但未定義值千绪。(變量的初始化)

1.出現(xiàn)在 變量定義了充易,但是在前面調(diào)用 返回undefined

2.訪問對象的屬性,如果沒有這個(gè)屬性 返回undefined

3.函數(shù)形參沒有傳值 但是函數(shù)內(nèi)使用 返回undefined

五.數(shù)據(jù)類型的轉(zhuǎn)換

1.顯示類型轉(zhuǎn)換??(強(qiáng)制轉(zhuǎn)換)

? ? ? ? ? ? ? ? ? ? ? ?Number()????轉(zhuǎn)換為數(shù)字

? ? ? ? ? ? ? ? ? ? ? ?String() ? ? ? ?轉(zhuǎn)換為字符串

? ? ? ? ? ? ? ? ? ? ? ?Boolean() ? ? 轉(zhuǎn)換為布爾

? ? ? ? ? ? ? ? ? ? ? ? Object() ? ? ? ?轉(zhuǎn)換為對象

2.自動(dòng)數(shù)據(jù)轉(zhuǎn)換

自動(dòng)轉(zhuǎn)換數(shù)值????????????有數(shù)學(xué)運(yùn)算的時(shí)候

自動(dòng)轉(zhuǎn)換為字符串???????帶連接符的時(shí)候

自動(dòng)轉(zhuǎn)換為Boolean?????布爾值的運(yùn)算環(huán)境中

JavaScript 表達(dá)式

1.表達(dá)式是JavaScript中的短語荸型。

2.程序中的常量是最簡單的表達(dá)式盹靴。(var index = 120;)

3.復(fù)雜表達(dá)式(語句)就是由簡單表達(dá)式組成的。 --組成復(fù)雜表達(dá)式的常用方法是使用運(yùn)算符

一.運(yùn)算符

按照操作數(shù)分:(一元運(yùn)算符)(二元運(yùn)算符)(三元運(yùn)算符 帆疟?:)

算術(shù)運(yùn)算符

【+(加)】【-(減)】【*(乘)】【/(除)】【%(取余)】【-(負(fù)號)】

++(自增1)? ? --(自減1)

Tip:++在前 先加在運(yùn)算 --在前 先減在運(yùn)算;++在后 先運(yùn)算再加 --在后 先運(yùn)算再減

關(guān)系運(yùn)算符

==

===

!=

!==

<

>

<=

>=

邏輯運(yùn)算符

&& 與(兩端都為真才為真)

||? ? 或(一端為真即為真)

鹉究!? 非(真變假 假變真)

位運(yùn)算符

& ? ? 按位與(兩端都是1才為1)

|? ? ? 按位或(兩端一個(gè)為1就是1)

^ ? ? 按位異或 (兩端不一樣才是1)

~?????位非 (需要補(bǔ)碼) 取反-1

<< 左移

>> 右移

賦值運(yùn)算符

=

+=

-=

/=

%=

<<=

>>=

&=

|=

^=

例如:交換兩個(gè)變量的值

1. 通過中間變量轉(zhuǎn)換

var x=1;var y=2; var z=y;y=x;x=z;console.log(x,y);?

2. 不同過中間變量轉(zhuǎn)換

var a=1;var b=2;a=a+b;b=a-b;a=a-b;console.log(a,b);

其他運(yùn)算符:

三元運(yùn)算符 宇立?:((boolean)?true的時(shí)候執(zhí)行的代碼:false的時(shí)候執(zhí)行的代碼)

如i=0,j=1,k=2; ==> i=0;j=1;k=2;

for(var i =0,j=10;i

typeof 返回表示數(shù)據(jù)類型的一個(gè)字符串

delete 刪除對象屬性或數(shù)組元素

在嚴(yán)格模式下踪宠,刪除非法操作數(shù)(變量,函數(shù))會(huì)報(bào)語法錯(cuò)誤

void -- 不常用 我是超鏈接取消自帶js效果

運(yùn)算符的優(yōu)先級 可使用()改變優(yōu)先級

流程控制

流程控制指令是指會(huì)改變程序運(yùn)行順序的指令

程序執(zhí)行順序

由上往下執(zhí)行(順序執(zhí)行)

單向分支結(jié)構(gòu)

if(){}

雙向分支結(jié)構(gòu)

if(){}else{}

多向分支結(jié)構(gòu)

1.if(){}else if(){}else{}

2.switch case???開關(guān)???注意:參數(shù)的數(shù)據(jù)類型

邏輯運(yùn)算符的特殊用法

var str = true && ‘123’; -- 特殊用法

或運(yùn)算的短路

(boolean)|| (); 通道的應(yīng)用

循環(huán)語句(循環(huán)結(jié)構(gòu))

while語句

var i = 0; while(i<10){document.write(i);i++;}

do while

var i = 0;do{document.write(i);i++}while(i<10); 兩種方式的區(qū)別

for

for(var i=0;i<10;i++){document.write(i)}

跳轉(zhuǎn)語句

break---結(jié)束整個(gè)循環(huán)妈嘹。

default: break;介紹

continue---結(jié)束當(dāng)前循環(huán)

函數(shù)

函數(shù)是一段在一起柳琢,可以做某件事的程序。

優(yōu)點(diǎn):控制程序設(shè)計(jì)的復(fù)雜性

>1. 提高軟件的開發(fā)可靠性

>2. 提高軟件的開發(fā)效率

>3. 提高軟件的可維護(hù)性

>4. 提高程序的重用性

JavaScript定義函數(shù)的方式

>1. function 關(guān)鍵字??function demo(){ code..}

>2. 匿名函數(shù)??var demo = function(){}

>3. Function 構(gòu)造函數(shù)???(不推薦使用)

var demo = new Function(‘a(chǎn)’,’b’,”console.log(a+b)”);

調(diào)用方式區(qū)別

>1. 函數(shù)聲明的提前

>2. 匿名函數(shù)無法提前使用

函數(shù)名

函數(shù)名可由開發(fā)者自行定義

與變量命名規(guī)則相同(描述性強(qiáng)润脸,簡潔)柬脸。

函數(shù)參數(shù)

>1. 多個(gè)參數(shù)使用,分割

>2. 形參

>3. 實(shí)參

參數(shù)特點(diǎn)

>1. 當(dāng)實(shí)參數(shù)量>形參數(shù)量(省略)

>2. 當(dāng)實(shí)參數(shù)量<形參數(shù)量(undefined)

>3. 通過if(n1 === undefined){}設(shè)置參數(shù)的默認(rèn)值

>4. 通過實(shí)參對象arguments將獲取的參數(shù)組成一個(gè)數(shù)組(arguments在嚴(yán)格模式下是一個(gè)關(guān)鍵字)

>

函數(shù)的返回值

使用關(guān)鍵字return

>1. 結(jié)束函數(shù)

>2. 可以返回值 也可以沒有返回值

函數(shù)的引用和調(diào)用

>1. 調(diào)用:在函數(shù)名后面加上();

>2. 引用:使用函數(shù)名;

JavaScript變量的作用域

>1. 全局變量--定義在函數(shù)的外部毙驯。

>2. 局部變量--定義在函數(shù)內(nèi)部

>3. 不使用var時(shí)變成全局變量倒堕,但是需要執(zhí)行函數(shù)才能使用內(nèi)部定義的變量

>4. 嚴(yán)格模式下,不支持爆价。不推薦使用垦巴。(避免全局變量污染)

注意:函數(shù)外for循環(huán)等定義的變量也是全局變量。

函數(shù)的調(diào)用

>1.??函數(shù)內(nèi)調(diào)用別的函數(shù)

>2. 使用參數(shù)調(diào)用 --回調(diào)函數(shù)

>3. 函數(shù)內(nèi)調(diào)用自己??--遞歸函數(shù)

function demo(n){

if(n<0){

return;

}else{

document.write(n+"
");

demo(n-1);

}

}

function demo(n){

if(n<0){

return;

}else{

document.write(n+"
");

demo(n-1);

document.write(n+"
");

}

}

使用debugger調(diào)試 打開F12

求階乘

1.function demo(n){if(n<=1){return n;} return n*demo(n-1);}

2.for();

數(shù)組

相關(guān)概念:

>1. 數(shù)組是值的有序集合铭段。

>2. 每個(gè)值叫做一個(gè)元素

>3. 每個(gè)元素在數(shù)組中有一個(gè)位置骤宣,以數(shù)字表示。

稱為索引(下標(biāo))序愚。

特點(diǎn)

數(shù)組的元素可以是任何類型

數(shù)組索引從0開始憔披,最大為2^32-2??4294967294個(gè)元素

創(chuàng)建數(shù)組

>1. 使用數(shù)組直接量[]

var arr = [1,2,3,];

>2. 使用構(gòu)造函數(shù)

var arr = new Array(10);10個(gè)元素

var arr = new Array('a','b','c');

數(shù)組的長度 length屬性

arr.length;

length屬性只計(jì)算非負(fù)整數(shù)的索引

數(shù)組元素的訪問和修改:

>1. 使用[]

>

>2. 數(shù)字類型的字符串 也可以訪問數(shù)組元素

>

稀疏數(shù)組

稀疏數(shù)組就是不連續(xù)索引的數(shù)組

>1. var arr = new Array(3); -- 是稀疏數(shù)組

>2. var arr = [,,]; -- 是稀疏數(shù)組

>3. var arr = [1,2];arr[10]=100; -- 是稀疏數(shù)組

>4. 使用delete刪除一個(gè)元素??得到稀疏數(shù)組

>

數(shù)組元素的添加:

>1. 為新索引賦值 arr[4]=2;

>2. 利用數(shù)組長度在數(shù)組尾部插入新元素 arr[arr.length]=5;

>3. push()??在尾部加入新元素 arr.push(‘a(chǎn)bc’);

>4. unshift()在前面加入一個(gè)新元素??arr.unshift(‘a(chǎn)bc’);

數(shù)組的刪除:

>1. 刪除數(shù)組后面的一個(gè)元素 delete()不推薦--產(chǎn)生稀疏數(shù)組

>2. pop() 刪除數(shù)組最后一個(gè)元素 arr.pop();

>3. shift() 刪除數(shù)組第一個(gè)元素 arr.shift();

判斷是否數(shù)組

typeof []; 無法進(jìn)行判斷

>ESMA5定義新的方法用來判斷是否數(shù)組:???Array.isArray([]);

搜索數(shù)組是否具有的元素

arr.indexOf();

如果存在返回元素位置

如果不存在返回-1

數(shù)組的遍歷:

>1. 使用for循環(huán)遍歷

for(var i = 0; i < arr.length;i++){

console.log(arr[i]);

}

>2. 使用for/in循環(huán)

for(var i in arr){

console.log(arr[i]);

}

>3. 注意:遍歷稀疏數(shù)組 和 特殊下標(biāo)數(shù)組時(shí)的區(qū)別

>4. 使用forEach();??傳入匿名函數(shù)

>??低版本IE不支持

---

數(shù)組的方法:

>1. join()把數(shù)組的元素拼接成字符串

var message = arr.join(‘,’);

>2. concat() 合并多個(gè)數(shù)組

var message = arr.concat([12,43],[4,35,3]);

var message = arr.concat(1,2,3);

var message = arr.concat(1,2,[4,,5,[6,,7]]);

>3. slice()??截取數(shù)組中的一部分(不破壞原數(shù)組),返回新的數(shù)組

var arr = list.slice(2);??取出從下標(biāo)2到后面的所有元素

var arr = list.slice(2,4); 取出從下標(biāo)2到下標(biāo)4(不含4)的元素>

>4. splice() 刪除芬膝、替換望门、添加、 破壞原數(shù)組 返回刪除的內(nèi)容

var new_arr = list.splice(2);???下標(biāo)2以后的元素

var new_arr = list.splice(2,2); 下標(biāo)2以后的兩個(gè)元素

1.在指定位置添加新的元素

var arr = [3,454,435,343];

arr.splice(2,0,’abc’);

在435的位置前添加一個(gè)abc

4.替換指定位置的元素

var arr=[1,2,3,4];arr.splice(2,1,’abc’);

將3替換成abc;

>5. reverse()??數(shù)組反轉(zhuǎn)??改變原數(shù)組

>6. sort();??數(shù)組排序蔗候,必須使用排序函數(shù) list=[1,334,32,324];

list.sort(function(a,b){return a-b;});

>7. toString() 把數(shù)組轉(zhuǎn)換為字符串

>8. toLocaleString()把數(shù)組轉(zhuǎn)換為本地字符串(不常用)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末怒允,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子锈遥,更是在濱河造成了極大的恐慌纫事,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件所灸,死亡現(xiàn)場離奇詭異丽惶,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)爬立,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進(jìn)店門钾唬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人侠驯,你說我怎么就攤上這事抡秆。” “怎么了吟策?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵儒士,是天一觀的道長。 經(jīng)常有香客問我檩坚,道長着撩,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任匾委,我火速辦了婚禮拖叙,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘赂乐。我一直安慰自己薯鳍,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布挨措。 她就那樣靜靜地躺著挖滤,像睡著了一般。 火紅的嫁衣襯著肌膚如雪运嗜。 梳的紋絲不亂的頭發(fā)上壶辜,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天,我揣著相機(jī)與錄音担租,去河邊找鬼砸民。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的岭参。 我是一名探鬼主播反惕,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼演侯!你這毒婦竟也來了姿染?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤秒际,失蹤者是張志新(化名)和其女友劉穎悬赏,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體娄徊,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡闽颇,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了寄锐。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片兵多。...
    茶點(diǎn)故事閱讀 38,059評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖橄仆,靈堂內(nèi)的尸體忽然破棺而出剩膘,到底是詐尸還是另有隱情,我是刑警寧澤盆顾,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布怠褐,位于F島的核電站,受9級特大地震影響椎扬,放射性物質(zhì)發(fā)生泄漏惫搏。R本人自食惡果不足惜具温,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一蚕涤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧铣猩,春花似錦揖铜、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至峦椰,卻和暖如春龄寞,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背汤功。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工物邑, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓色解,卻偏偏與公主長得像茂嗓,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子科阎,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內(nèi)容