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代碼
例如:
2.導(dǎo)入外部的JavaScript腳本文件(CSS在前丝蹭,JS在后)
例如:
3.通過事件屬性定義在元素的內(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)換為本地字符串(不常用)