js筆記

第一章1,什么叫程序:程序就是計(jì)算機(jī)按照人類(lèi)完成事物的步驟和邏輯,通過(guò)計(jì)算機(jī)命令來(lái)逐步執(zhí)行最終實(shí)現(xiàn)目標(biāo)的一種機(jī)器語(yǔ)言。程序語(yǔ)言最大的特點(diǎn):1,輸入數(shù)據(jù),2,處理數(shù)據(jù),3,輸出數(shù)據(jù)。javascript簡(jiǎn)介:1,概述:javascript簡(jiǎn)稱(chēng)js,這是一種典型的基于瀏覽器運(yùn)營(yíng)環(huán)境進(jìn)行運(yùn)行的一種程序腳本語(yǔ)言。什么叫基于瀏覽器運(yùn)營(yíng)環(huán)境:這種語(yǔ)言可以直接被瀏覽器解釋執(zhí)行出來(lái)。腳本:程序一經(jīng)寫(xiě)定,一旦調(diào)用就直接執(zhí)行。js能做什么?1,用戶(hù)交互。什么叫用戶(hù)交互:用戶(hù)輸入數(shù)據(jù),計(jì)算機(jī)處理并反饋結(jié)果。2,頁(yè)面端的驗(yàn)證處理頁(yè)面端驗(yàn)證:就是在頁(yè)面上能夠看到信息輸入的規(guī)則,并且直接能看到驗(yàn)證后的處理結(jié)果。3,頁(yè)面端運(yùn)算處理在頁(yè)面能看到參與運(yùn)算的數(shù)據(jù),并且能直接得到運(yùn)算后的結(jié)果。前端的運(yùn)算和驗(yàn)證處理,能夠最大程度的減輕服務(wù)器壓力。同時(shí)提高了處理的速度,提升了用戶(hù)的體驗(yàn)。4,制作特效。用替代Flash實(shí)現(xiàn)頁(yè)面特效。5,用戶(hù)實(shí)現(xiàn)前后臺(tái)數(shù)據(jù)傳遞。js的基本組成部分:1,基本核心語(yǔ)法:ECMAscript 我們現(xiàn)在學(xué)習(xí)的時(shí)5.0版本的。es5;es6就是ECMAscript的6.0版本;2,利用js操作HTML 的DOM方法。//DOM對(duì)象3,操作瀏覽器插件的BOM方法。//BOM 對(duì)象js的運(yùn)行環(huán)境:一,在HTML頁(yè)面內(nèi)運(yùn)行1, 輸入js語(yǔ)言

2,在HTML標(biāo)簽內(nèi)直接輸入:3,直接建立js文件,在里面寫(xiě)js語(yǔ)法。通過(guò)直接加以引用。二,就是在瀏覽器的運(yùn)行環(huán)境內(nèi)直接運(yùn)行。就時(shí)瀏覽器的控制臺(tái)內(nèi)。js的數(shù)據(jù)輸出方法:1,在頁(yè)面上寫(xiě)出:document.write("");document//指的就是我們的文檔頁(yè)面即html--->document是所有在瀏覽器內(nèi)顯示的文檔統(tǒng)稱(chēng),HTML僅僅是其中的一種。2,在瀏覽器內(nèi)彈出信息:window.alert("");window//瀏覽器,document是屬于window的一部分。alert是彈出的意思。3,在控制臺(tái)直接打印輸出:console.log("");console//瀏覽器運(yùn)行環(huán)境的控制臺(tái)。log打印輸出的意思。上述語(yǔ)法中的“.”是指什么什么的 什么什么的在同一個(gè)頁(yè)面上window.alert()比document.write()優(yōu)先執(zhí)行,并且阻斷程序的繼續(xù)執(zhí)行。------重點(diǎn)記憶js的特點(diǎn):1,js語(yǔ)言可以使用任何的頁(yè)面編輯器進(jìn)行編寫(xiě)2,js語(yǔ)言不需要安裝運(yùn)行環(huán)境,既可以通過(guò)瀏覽器自帶的js解釋器直接執(zhí)行3,js是一種弱類(lèi)型語(yǔ)言。4,js是一種基于對(duì)象的前端程序語(yǔ)言。(暫時(shí)這么寫(xiě)。)js基本語(yǔ)法:所有的js語(yǔ)句都是由js表達(dá)式,關(guān)鍵字,運(yùn)算符組合起來(lái)的。所有的js語(yǔ)法嚴(yán)格區(qū)分大小寫(xiě)。所有的js語(yǔ)句結(jié)束必須換行或者以分號(hào)結(jié)束。js的注釋語(yǔ)法://代表單行注釋。/*多行注釋*/運(yùn)算符:加減乘除,大于號(hào),小于號(hào)都屬于運(yùn)算符。一切代表運(yùn)算符號(hào)的都是運(yùn)算符。關(guān)鍵字:方法名稱(chēng),變量名稱(chēng),對(duì)象名稱(chēng),數(shù)組名稱(chēng)一切名稱(chēng)都是關(guān)鍵字。表達(dá)式:以關(guān)鍵詞結(jié)合運(yùn)算符形成一句代碼叫做表達(dá)式,表達(dá)式一定有結(jié)果產(chǎn)生。語(yǔ)句:由表達(dá)式結(jié)合基本語(yǔ)法形成多行代碼叫做語(yǔ)句。變量:概念:在內(nèi)存中直接開(kāi)辟一個(gè)空間用來(lái)存放所需要的任意數(shù)據(jù)。優(yōu)點(diǎn):變量空間內(nèi)的值可以隨意更改,這樣就實(shí)現(xiàn)了內(nèi)存的靈活使用。變量的基本語(yǔ)法:變量的聲明:var? 變量的名稱(chēng)num 變量的賦值符號(hào)“=”變量的值:12;var num=12;這就是一個(gè)變量的創(chuàng)建。創(chuàng)建變量等于在內(nèi)存開(kāi)辟空間??吹揭粋€(gè)var就開(kāi)辟一個(gè)空間。變量的名稱(chēng)就是給空間起名,變量的值就是往空間內(nèi)存儲(chǔ)數(shù)據(jù)。不同的變量,命名可以同名,但是同名的變量輸出以最新的變量結(jié)果輸出。var a=12;vara=13;console.log(a);//13;console.log(a);//13同一個(gè)變量,變量可以重復(fù)賦值,最后的輸出以最新的值為準(zhǔn)。var a=12;a=13;console.log(a);//13;console.log(a);//13變量的命名規(guī)則:1,不許數(shù)字在前,可以字母,$,%做第一個(gè)名稱(chēng)。2,如果出現(xiàn)兩個(gè)單詞拼成一個(gè)變量名稱(chēng),中間不許使用-連接,必須兩個(gè)單詞靠在一起,每一個(gè)單詞的首字母大寫(xiě)叫做:大駝峰命名法。第一個(gè)單詞小寫(xiě),后面的單詞首字母大寫(xiě)叫做:小駝峰命名法。3.所起名字不許和js程序中的標(biāo)準(zhǔn)關(guān)鍵字,保留關(guān)鍵詞重名。標(biāo)準(zhǔn)關(guān)鍵字break? case? catch? continue? deflault? delete? do? else? false? finallyor? function? if? in? instanceof? new? null? return? switch? this? thow? true? try? typeof? var? with? undefined保留字 abstract? enum? int? short? boolean? export? interface? staticbyte? extends? long? super? char? final? native? synchronized class? float? package? throws? const? goto? private? transientdebugger? implements? protected? volatile? double? importpublic變量的傳值:var a=13;var b=a;變量的傳值,將一個(gè)變量a的值復(fù)制一次,粘貼給變量b,所以b的結(jié)果為:13;變量的使用:直接使用變量的名稱(chēng)就是直接使用變量的值。直接使用變量名稱(chēng)不用添加引號(hào)var c="中國(guó)";console.log(c);常量:常量就是一個(gè)固定的值。在ES5版本里面,常量的表示方法:PI=3.14;ES6版本里面,常量的聲明:const PI=3.14;在常量中,一般常量的名稱(chēng)采用大寫(xiě)的字母表示。數(shù)據(jù)類(lèi)型:計(jì)算機(jī)將世界上全部的數(shù)據(jù)以及數(shù)據(jù)出現(xiàn)的錯(cuò)誤的狀態(tài)都統(tǒng)統(tǒng)通過(guò)數(shù)據(jù)類(lèi)型來(lái)加以存儲(chǔ)和識(shí)別?;A(chǔ)數(shù)據(jù)類(lèi)型/原始數(shù)據(jù)類(lèi)型:undefined,定義了變量名,但是沒(méi)有賦值。undefined ---》未賦值,未定義。null;--》空的,沒(méi)有的。在對(duì)象中,null代表的是為空的對(duì)象string:--》字符串---》引號(hào)下所有的內(nèi)容均為字符串。在內(nèi)存每個(gè)字符都占兩個(gè)字節(jié)數(shù)。number:--》數(shù)字類(lèi)型包含了:整數(shù),小數(shù)。整數(shù)在內(nèi)存中:占4個(gè)字節(jié)數(shù),小數(shù)占據(jù):8個(gè)字節(jié)數(shù)Boolean:--》只有兩個(gè)結(jié)果true,false這些數(shù)據(jù)類(lèi)型都是存儲(chǔ)在棧內(nèi)存中的。棧內(nèi)存:就是我們?nèi)藶樵趦?nèi)存中開(kāi)辟的一塊內(nèi)存空間,這部分空間內(nèi)存儲(chǔ)的是程序中最小的基本數(shù)據(jù)類(lèi)型,而且經(jīng)常性的頻繁使用,棧內(nèi)存中存放的都是基礎(chǔ)數(shù)據(jù)類(lèi)型和所有數(shù)據(jù)類(lèi)型的名稱(chēng)。那么棧內(nèi)存會(huì)引申出來(lái)一個(gè)堆內(nèi)存。堆內(nèi)存 :主要是存放:不經(jīng)常使用,但是代碼量很大的數(shù)據(jù)。這種數(shù)據(jù)我們一般一分為二兩部分存儲(chǔ)。將數(shù)據(jù)的名字存放在棧內(nèi),將數(shù)據(jù)的代碼主體存放在堆內(nèi)。中間以路徑的形態(tài)連接起來(lái)。這種需要通過(guò)路徑形態(tài)進(jìn)行數(shù)據(jù)調(diào)用的數(shù)據(jù)類(lèi)型被稱(chēng)為引用數(shù)據(jù)類(lèi)型。js中常見(jiàn)的數(shù)據(jù)類(lèi)型:object對(duì)象類(lèi)型,array數(shù)組類(lèi)型,function函數(shù)類(lèi)型引用數(shù)據(jù)類(lèi)型的值傳遞:不是復(fù)制值進(jìn)行粘貼,而是直接復(fù)制堆內(nèi)數(shù)據(jù)的(鏈接路徑)重新鏈接到棧內(nèi)的新名稱(chēng)上。凡是從網(wǎng)頁(yè)上獲取的數(shù)據(jù)統(tǒng)統(tǒng)都是string類(lèi)型。***typeof()//進(jìn)行數(shù)據(jù)類(lèi)型判斷的方法。具體的用法:將我們要判斷的目標(biāo),直接寫(xiě)在typeof的圓括號(hào)內(nèi)。var a="hello";var res=typeof(a);//我們這個(gè)方法得到結(jié)果顯示的都是數(shù)據(jù)類(lèi)型名稱(chēng)。例如:string類(lèi)型,number類(lèi)型,null類(lèi)型,undefined類(lèi)型,boolean類(lèi)型,(字符串)? (數(shù)字)(空值)(只有名字沒(méi)有值)boolean類(lèi)型。object類(lèi)型(對(duì)象類(lèi)型/引用類(lèi)型)。(對(duì)錯(cuò)值)console.log(res);? console.log(typeof(a));簡(jiǎn)寫(xiě)isNaN(c)//返回的結(jié)果是對(duì)錯(cuò)的判斷標(biāo)準(zhǔn)。第二章數(shù)據(jù)的運(yùn)算:說(shuō)直白點(diǎn):就是利用數(shù)學(xué)的運(yùn)算方式來(lái)對(duì)我們變量中存儲(chǔ)的數(shù)據(jù)進(jìn)行:計(jì)算,對(duì)比,條件設(shè)置,賦值等處理運(yùn)算所使用的符號(hào)叫做運(yùn)算符:運(yùn)算符分為:算術(shù)運(yùn)算符,關(guān)系運(yùn)算符,邏輯運(yùn)算符,賦值運(yùn)算符,三目運(yùn)算;算術(shù)運(yùn)算符:加號(hào):+:當(dāng)+號(hào)在運(yùn)算中遇到字符串,加號(hào)變成拼接符,所有數(shù)據(jù)類(lèi)型都變成字符串;當(dāng)布爾值參與數(shù)字相加的時(shí)候,布爾值自動(dòng)轉(zhuǎn)化為數(shù)字,true=1;false=0;var a=10;var b="12";var c=a+b;console.log(c)//1012console.log(typeof(c))//stringvar a=true;var b=false;var c=a+b//1,數(shù)據(jù)類(lèi)型:number。減號(hào):-;當(dāng)數(shù)字與數(shù)字類(lèi)型的字符串進(jìn)行減法運(yùn)算的時(shí)候,計(jì)算機(jī)先強(qiáng)制將數(shù)字類(lèi)型字符串轉(zhuǎn)變位數(shù)字在參與計(jì)算。得到結(jié)果是一個(gè)number類(lèi)型。var a=10;var b="12";var c=a-b;console.log(c)//-2console.log(typeof(c))//numbervar a=10;var b="12a";var c=a-b;console.log(c);//NaNconsole.log(typeof(c));//number所有的數(shù)據(jù)類(lèi)型在參與減法運(yùn)算中,都會(huì)被強(qiáng)制轉(zhuǎn)化為數(shù)字,在參與計(jì)算。當(dāng)非數(shù)字字符串參與減法運(yùn)算,結(jié)果出現(xiàn)NaN。乘號(hào):*一切乘法運(yùn)算中,先把數(shù)據(jù)類(lèi)型轉(zhuǎn)化為數(shù)字,然后相乘。當(dāng)非數(shù)字字符串參與乘法運(yùn)算得到NaN結(jié)果。當(dāng)我們遇到NaN數(shù)據(jù)的時(shí)候,我們不能直接使用typeof()進(jìn)行判斷,而是需要isNaN()進(jìn)行判斷,判斷的結(jié)果是:TRUE或者FALSE在我們做算術(shù)運(yùn)算中,如果出現(xiàn)小數(shù)的加減乘除運(yùn)算的時(shí)候,出現(xiàn)小數(shù)點(diǎn)后的取值出現(xiàn)誤差,這樣的誤差叫做舍入誤差。解決方案:c.toFixed(2);意思是將變量c的結(jié)果取小數(shù)點(diǎn)后兩位數(shù),并且自動(dòng)四舍五入。例如:var c=1.2-0.5;//0.7000000001;c.toFixed(2)//0.70;除法:/,所有的數(shù)據(jù)先轉(zhuǎn)化為數(shù)字類(lèi)型,然后參與相除,1除以0//infinity,無(wú)窮大。、求模運(yùn)算:a%bvar a=123;var b=10;var c=a%b;c的結(jié)果是123除以10之后所剩余的量。結(jié)果為3.所以求模運(yùn)算就是一種取除法中的余數(shù)運(yùn)算。自增運(yùn)算:var a=10;console.log(a+a++);a++在運(yùn)算中先參與運(yùn)算在第二步運(yùn)算的時(shí)候才開(kāi)始加1; a + a++=10+10=20//這個(gè)時(shí)候的a++必須等待第三個(gè)a出來(lái)才會(huì)讓第三個(gè)a+1;a++ +a =10+11=21//此時(shí)a++參與第一步運(yùn)算,遇到第二a,所以他將加1之后的值賦給了第二個(gè)a.練習(xí)作業(yè):var a=2;var b=3;a+b++ +a++ +b=?在自增運(yùn)算中,n++和++n的區(qū)別是什么?n++是先運(yùn)算后自加,只有公式中出現(xiàn)第二個(gè)n才會(huì)講增加的1賦值給第二個(gè)n上。++n是先自加后運(yùn)算。在不參與運(yùn)算的情況下,n++,與++n的值是一樣的。計(jì)算機(jī)的計(jì)算順序:1,先算括號(hào)內(nèi),2,再算乘除,3,算加減var a=1;var b=2;var c=3;(a++*++a -++b)/++c=?關(guān)系運(yùn)算符:其實(shí)就是求幾個(gè)數(shù)據(jù)之間的大小關(guān)系。有大于>,小于<大于等于>=小于等于<===等于===絕對(duì)等于!=不等于;關(guān)系運(yùn)算結(jié)果返回的是一個(gè)boolean值,只有true或者false;面試題:==和===的區(qū)別。==是先進(jìn)行數(shù)據(jù)類(lèi)型轉(zhuǎn)化,然后再比較是否相等。===是不進(jìn)行數(shù)據(jù)類(lèi)型轉(zhuǎn)化,直接比較,更加嚴(yán)格一些、在關(guān)系運(yùn)算中,一切數(shù)據(jù)類(lèi)型遇到數(shù)字,都先轉(zhuǎn)化為數(shù)字再對(duì)比。如果無(wú)法轉(zhuǎn)化為數(shù)字,就會(huì)出現(xiàn)false結(jié)果再字符串的關(guān)系對(duì)比中,按照大小順序是根據(jù)Unicode編碼順序來(lái)進(jìn)行的。A-Z之間的Unicode編碼順序:65-90;a-z之間的unciode編碼順序:97-122;0-9之間的順序:48-57;漢字的Unicode編碼順序:u4e00-9fa05邏輯運(yùn)算:其實(shí)就是設(shè)置運(yùn)算的條件,有“與”“或”“非”三種var a=prompt("請(qǐng)輸入數(shù)字")if(!(a>70)){//邏輯非運(yùn)算,凡是小于等于70才成立alert("你好");}if(a>70||a>90){//邏輯或運(yùn)算,多個(gè)條件滿(mǎn)足其一即可alert("你好");}if(a>70&&a<90){//邏輯與運(yùn)算。多個(gè)條件必須同時(shí)滿(mǎn)足才行。alert("你好");}賦值符運(yùn)算:賦值運(yùn)算 =? +=? -=? *=? /=? %=等號(hào):將等號(hào)右側(cè)的內(nèi)容賦值給左側(cè)的名字。+=:str+=5;str=str+5 //此時(shí)返回的結(jié)果是11面試題:var str="hello";var str=str+"world";創(chuàng)建了幾個(gè)變量?標(biāo)準(zhǔn)答案:3個(gè);解析過(guò)程:因?yàn)樽址兞恳坏﹦?chuàng)建,空間不可改變,所以為了容納helloworld,我們必須創(chuàng)建一個(gè)新變量他的值就是helloworld。加上之前的hello變量和world變量,總共是3個(gè)。條件三目運(yùn)算:其實(shí)就是一個(gè)條件判斷運(yùn)算。其中語(yǔ)法包含:條件?“條件成立執(zhí)行的結(jié)果”:“條件不成立執(zhí)行的結(jié)果”數(shù)據(jù)類(lèi)型的轉(zhuǎn)化:隱式轉(zhuǎn)化:在數(shù)據(jù)運(yùn)算中,js程序自動(dòng)根據(jù)運(yùn)算的環(huán)境,對(duì)數(shù)據(jù)類(lèi)型進(jìn)行自動(dòng)轉(zhuǎn)化,例如在加運(yùn)算中,所有數(shù)據(jù)遇到字符串,都會(huì)變成字符串,在關(guān)系運(yùn)算中,所有數(shù)據(jù)遇到number都會(huì)轉(zhuǎn)變成number類(lèi)型。這樣的轉(zhuǎn)化被稱(chēng)為隱式轉(zhuǎn)化。隱式轉(zhuǎn)化:會(huì)自動(dòng)根據(jù)環(huán)境進(jìn)行轉(zhuǎn)化,不需要人工操作,缺點(diǎn):轉(zhuǎn)化不可控為了能夠讓數(shù)據(jù)的使用可控,我們需要能夠?qū)?shù)據(jù)轉(zhuǎn)化人為可控制。這種需要人為轉(zhuǎn)化的:我們稱(chēng)為顯式轉(zhuǎn)化或者強(qiáng)制轉(zhuǎn)化。強(qiáng)制轉(zhuǎn)化就需要我們使用相應(yīng)的數(shù)據(jù)類(lèi)型轉(zhuǎn)化的方法;1,所有數(shù)據(jù)變成string類(lèi)型:方法1,String(“內(nèi)容”);常用方法2,x.toString();2, 所有數(shù)據(jù)轉(zhuǎn)化為number類(lèi)型:方法1:Number(x);//將所有數(shù)據(jù)轉(zhuǎn)化為number類(lèi)型,如果遇到非數(shù)字類(lèi)型轉(zhuǎn)化結(jié)果為:NaN;帶有小數(shù)點(diǎn)的數(shù)字內(nèi)容直接轉(zhuǎn)化為小數(shù)。方法2:parseInt(x);將所有數(shù)據(jù)轉(zhuǎn)化為整數(shù)。遇到數(shù)字在前,文字內(nèi)容在后的,該方法直接讀取能夠讀到的數(shù)字部分轉(zhuǎn)化為整數(shù)。,小數(shù)只顯示整數(shù)部分方法3:parseFloat(x);將所有數(shù)據(jù)讀取出來(lái),如果有小數(shù)將顯示小數(shù)內(nèi)容。總結(jié):parseInt(),parseFloat(),只是將字符串string轉(zhuǎn)化為數(shù)字類(lèi)型number,所以在上述兩種方法中。圓括號(hào)內(nèi)如果直接寫(xiě)內(nèi)容就必須加雙/單引號(hào)。練習(xí):做一個(gè)超市的收銀程序:1,工作流程:3,Boolean(x)//將所有數(shù)據(jù)類(lèi)型轉(zhuǎn)化為布爾值。除了,null,undefined,""空字符,0,false這些返回結(jié)果是false之外,其他都是返回true。第三章控制語(yǔ)句:我們已經(jīng)學(xué)習(xí)了常變量來(lái)存儲(chǔ)數(shù)據(jù),學(xué)了數(shù)據(jù)類(lèi)型來(lái)區(qū)分?jǐn)?shù)據(jù),學(xué)了運(yùn)算符來(lái)計(jì)算數(shù)據(jù),轉(zhuǎn)化方法來(lái)轉(zhuǎn)化需要的數(shù)據(jù)。但是我們獲得數(shù)據(jù)之后怎么做。這就是我們學(xué)習(xí)控制語(yǔ)句的主要意義。? ? 控制語(yǔ)句就相當(dāng)于我們?cè)谌粘I钪姓f(shuō)話(huà)的語(yǔ)法控制語(yǔ)句分為兩大類(lèi):? ? 分支控制語(yǔ)句和循環(huán)語(yǔ)句。? ? 分支語(yǔ)句:1,if(條件成立?){寫(xiě)出條件成立執(zhí)行的命令}2,if(條件成立){執(zhí)行條件成立的命令}else{執(zhí)行其他的命令。}練習(xí)題:超市購(gòu)物,計(jì)算結(jié)果之后,根據(jù)你給的錢(qián)做判斷,確定你是應(yīng)該找零還是應(yīng)該補(bǔ)錢(qián)。練習(xí)題:1,寫(xiě)出五個(gè)檔次的評(píng)價(jià):優(yōu)秀,良好,及格,不及格,弱爆了。2,自己制定一個(gè)10人的成績(jī)單,3,輸入任一學(xué)員名稱(chēng),給出分?jǐn)?shù),并且給出評(píng)價(jià)。我們學(xué)習(xí)的if(){}else if(){}else{}這種條件判斷是先判斷條件。再執(zhí)行結(jié)果。switch(){case 1:執(zhí)行結(jié)果;}var a=prompt();switch(true){//圓括號(hào)內(nèi)填寫(xiě)的是一個(gè)表達(dá)式。作為結(jié)果case a>90://冒號(hào)前面寫(xiě)上當(dāng)前的條件判斷,如果條件判斷等于switch圓括號(hào)中的結(jié)果,執(zhí)行命令。console.log("優(yōu)秀");break;//執(zhí)行完命令之后,跳出當(dāng)前程序。case a>80:console.log("良好");break;case a>60:console.log("及格");break;default :console.log("不及格");break;}循環(huán)控制語(yǔ)句:? 循環(huán)分三部分:1,循環(huán)變量;就是隨著循環(huán)執(zhí)行的命令逐次在增加或者減少的一個(gè)變量。2,循環(huán)條件。滿(mǎn)足程序一直在循環(huán)執(zhí)行的一個(gè)條件設(shè)置。3,循環(huán)執(zhí)行的程序內(nèi)容:我們稱(chēng)為循環(huán)體var th=null;while(th<(yfmoney-sfmoney)){th=parseFloat(prompt("請(qǐng)輸入退貨金額"));yfmoney=yfmoney-th;}while循環(huán)的特點(diǎn)是:先判斷條件,然后再執(zhí)行循環(huán)。do{}while()執(zhí)行在前,判斷在后。先執(zhí)行一次程序,然后根據(jù)條件判斷是否后續(xù)繼續(xù)執(zhí)行。do{} while();是先執(zhí)行后判斷,while(){}是先判斷再執(zhí)行。for循環(huán)?;菊Z(yǔ)法:for( var i=0;i<10;i++ ){循環(huán)體內(nèi)容。}作業(yè):利用while循環(huán)輸出“*”打印出一個(gè)三角形。for循環(huán)是一種經(jīng)常用作已知上限的有限循環(huán)。while經(jīng)常用來(lái)做未知上限的條件循環(huán)。在switch? case中我們學(xué)習(xí)了break;跳出程序,阻斷程序執(zhí)行。但是當(dāng)我們需要僅僅是跳出當(dāng)前這一步,后面的繼續(xù)執(zhí)行,我們就需要用到continue;語(yǔ)法使用:for(var n=1;n<=100;n++){if(n==10){continue;}console.log(n)}輸出的結(jié)果就會(huì)跳出10,繼續(xù)執(zhí)行下一步。作業(yè):打印出九九乘法表,凡是乘數(shù)中有奇數(shù)存在,則不輸出當(dāng)前公式,繼續(xù)輸出下一步。奇數(shù)的判斷標(biāo)準(zhǔn):不能被2 整除的數(shù)為奇數(shù)。第四章1,函數(shù)/方法:就像變量擁有自己的聲明一樣,函數(shù)也擁有自己的類(lèi)聲明。function 就是一個(gè)類(lèi)聲明,函數(shù)/方法是一個(gè)典型的引用數(shù)據(jù)類(lèi)型函數(shù)的基本語(yǔ)法是:聲明:function 名字aa()//參數(shù)列表{//方法 }創(chuàng)建函數(shù):有兩種創(chuàng)建方法:1,使用類(lèi)聲明直接創(chuàng)建:function aa(){};//聲明及值提前2,使用直接量創(chuàng)建;var aa=function (){};函數(shù)的使用:調(diào)用函數(shù)的名稱(chēng)aa()//返回的是:函數(shù)花括號(hào)內(nèi)的程序過(guò)程或者結(jié)果值如果直接使用函數(shù)名稱(chēng)本身aa的話(huà),輸出的結(jié)果就是整個(gè)函數(shù)本體。如果調(diào)用函數(shù)的名稱(chēng)加上參數(shù)列表:aa()那么輸出的結(jié)果就是函數(shù)方法體內(nèi)的程序執(zhí)行結(jié)果。函數(shù)的定義:我們稱(chēng)之為方法:它是一個(gè)封裝了一段代碼過(guò)程的容器。方法一般輸出的結(jié)果有兩大類(lèi):1,程序執(zhí)行的過(guò)程,2,程序算出的結(jié)果值函數(shù)聲明:function 名字aa()//參數(shù)列表{//方法體:封裝需要重復(fù)執(zhí)行的代碼 }函數(shù)的變量:函數(shù)的全局變量//寫(xiě)在函數(shù)之外的變量稱(chēng)為全局變量,函數(shù)的參數(shù)變量//在函數(shù)的參數(shù)列表寫(xiě)的變量,函數(shù)的局部變量//在函數(shù)的方法體內(nèi)聲明的變量稱(chēng)為局部變量。函數(shù)變量執(zhí)行的優(yōu)先級(jí)別是什么?如果同時(shí)存在相同變量名稱(chēng),那么輸出的變量順序是:局部變量?jī)?yōu)先,參數(shù)變量在中間,最后是全局變量。局部變量的結(jié)果輸出:需要使用return命令實(shí)現(xiàn)。return的意思是返回。function a(){var c=100;return c;}console.log(a());//輸出的結(jié)果是100;什么情況下使用return:? 如果我們?cè)摵瘮?shù)的目的不是利用函數(shù)體內(nèi)的程序過(guò)程,而是利用程序執(zhí)行之后的一個(gè)結(jié)果,那么我們就需要在方法體? 的底部使用return 后面跟我們需要使用的結(jié)果代碼return是一次返回一個(gè)結(jié)果值。函數(shù)的參數(shù):什么叫函數(shù)的參數(shù)?function aa(name,age){};凡是寫(xiě)在函數(shù)名稱(chēng)后方圓括號(hào)內(nèi)的變量或者數(shù)據(jù)都是函數(shù)的參數(shù)/叫做方法的參數(shù)。備注:在我們以后所學(xué)程序中,我們經(jīng)常會(huì)遇到 afc();這就是一個(gè)方法。凡是寫(xiě)在方法圓括號(hào)內(nèi)的數(shù)據(jù),都叫參數(shù)。參數(shù)分為:“形參”和“實(shí)參“兩種。形參是一種形式的參數(shù),不代表具體的內(nèi)容。實(shí)參是一種代表了具體事物的內(nèi)容。我們可以把形參看做參數(shù)變量的名稱(chēng),實(shí)參看做參數(shù)變量的值。所以實(shí)參實(shí)際上實(shí)在給形參賦值,賦值的過(guò)程叫做函數(shù)的傳參。在方法內(nèi),形參是不需要添加引號(hào)的,多個(gè)形參中間以逗號(hào)隔開(kāi)。但是我們?cè)谡{(diào)用方法的時(shí)候,在參數(shù)列表內(nèi)添加一個(gè)實(shí)例化的參數(shù),此時(shí)該參數(shù)為實(shí)參,實(shí)參如果是字符串,需要添加引號(hào)名詞解釋?zhuān)簩?shí)例化就是將一個(gè)形參寫(xiě)出一個(gè)實(shí)際的參數(shù),這叫做實(shí)例化。初始化:如果我們新建一個(gè)變量或者方法,就直接寫(xiě)一個(gè)值作為默認(rèn)存在的,就叫做初始化。function aa(name1,age1){//name1是形參,并且做局部變量name的值var name=name1;//局部變量var age=age1;document.write("我的名字是"+name+",我的年齡"+age);}aa("朱克澤",21);//朱克澤就是name1的實(shí)參。函數(shù)內(nèi)調(diào)用函數(shù):就是我們創(chuàng)建了幾個(gè)基礎(chǔ)函數(shù),并且將這幾個(gè)基礎(chǔ)函數(shù)的結(jié)果直接調(diào)用在一個(gè)綜合函數(shù)內(nèi)。例如://函數(shù)Afunction A(a){var num1=a;return num1;}//函數(shù)Bfunction B(b){var num2=b;return num2;}//函數(shù)Cfunction c(){var num3=A(1)+B(2);return num3;}console.log(c())//函數(shù)Cfunction c(f,e){var num3=A(f)+B(e);return num3;}console.log(c(3,5))內(nèi)存的清理機(jī)制:引用數(shù)據(jù)類(lèi)型的名稱(chēng)和路徑直接存儲(chǔ)在棧內(nèi)存的。引用的數(shù)據(jù)類(lèi)型主體是存儲(chǔ)在堆內(nèi)存的,他們之間是通過(guò)路徑的方法加以調(diào)用。這個(gè)時(shí)候,計(jì)算機(jī)為保證內(nèi)存的空間得到合理利用,會(huì)定期清理不用的代碼段。ie瀏覽器判斷的標(biāo)準(zhǔn)是:賦予每個(gè)代碼段一定的使用次數(shù),如果次數(shù)沒(méi)有了則視為垃圾予以清除。非IE瀏覽器則根據(jù)代碼的調(diào)用路徑數(shù)量來(lái)判斷,如果沒(méi)有任何一個(gè)路徑指向該代碼。則視為垃圾予以清除。function 的值傳遞:在js中,所有的值發(fā)生重新賦值的時(shí)候都是按值傳遞。在引用類(lèi)型中,發(fā)生的值傳遞都是值的路徑進(jìn)行改變的。function 的作用:1,封裝代碼段實(shí)現(xiàn)程序的重復(fù)調(diào)用。2,函數(shù)之間的調(diào)用本質(zhì)上是一種數(shù)據(jù)的傳遞。1,函數(shù)的創(chuàng)建方法:1,聲明創(chuàng)建。2,直接量創(chuàng)建2,函數(shù)的調(diào)用方法:函數(shù)名稱(chēng)+();直接使用函數(shù)的名稱(chēng)相當(dāng)于打印整個(gè)函數(shù)3,函數(shù)的變量:1,全局,2,局部,3,參數(shù)變量。優(yōu)先執(zhí)行的順序是:2>3>1,作于范圍:1>3>24,形參和實(shí)參,傳參。5,函數(shù)內(nèi)調(diào)用函數(shù)6,按值傳遞7,聲明提前。面試題:聲明提前:1,什么叫聲明提前:當(dāng)計(jì)算機(jī)在讀取程序的時(shí)候,首先計(jì)算機(jī)會(huì)先預(yù)覽全部程序,將變量var ,function同時(shí)提升到程序的最前方,優(yōu)先執(zhí)行。2,變量聲明提前和函數(shù)聲明提前的區(qū)別?1,變量聲明提前只提前聲明及名稱(chēng),不提前值。2,函數(shù)聲明提前是聲明,名稱(chēng)及值同時(shí)提前。使用類(lèi)聲明直接創(chuàng)建的才會(huì)出現(xiàn)聲明提前現(xiàn)象。第五章1,數(shù)組的概念:數(shù)組是一種空間,主要是用來(lái)存儲(chǔ)批量數(shù)據(jù)的空間。2,數(shù)組的語(yǔ)法:var a=[1,2,3];//使用直接量創(chuàng)建數(shù)組數(shù)組的名稱(chēng):a數(shù)組的元素:1 2? 3數(shù)組中排第一位的序號(hào)是:0,那么0這種序號(hào)被稱(chēng)為數(shù)組的下標(biāo)號(hào)。 var arr=[1,2,3,4];

//alert(arr[0]);//數(shù)組元素的讀取,利用數(shù)組的名稱(chēng)[數(shù)組元素的下標(biāo)號(hào)]來(lái)讀取元素

//數(shù)組元素的添加,就是利用數(shù)組的下標(biāo)號(hào)來(lái)進(jìn)行賦值的方式添加或者修改

arr[3]=12;

console.log(arr);

3,數(shù)組的元素類(lèi)型:在同一個(gè)數(shù)組中,元素的數(shù)據(jù)類(lèi)型可以是不一樣的。數(shù)組內(nèi)的元素也可以是數(shù)組。4,數(shù)組長(zhǎng)度的獲?。簂ength語(yǔ)法:arr.length//返回的結(jié)果是一個(gè)統(tǒng)計(jì)了數(shù)組中元素的數(shù)量。練習(xí):輸出數(shù)組中所有的元素。5,無(wú)序的數(shù)組,但是我們需要得到一個(gè)從小到大的數(shù)組。冒泡排序:var arr=[5,2,9,8,1,7,6,3,4];\冒泡排序?qū)嶋H上就是一種按照從小到大的順序排列數(shù)組元素的。一幫常用語(yǔ)數(shù)字類(lèi)型的數(shù)組。冒泡排序的原理,就是使用兩個(gè)for循環(huán)從同一個(gè)數(shù)組中任意取出一個(gè)元素進(jìn)行大小對(duì)比,通過(guò)值的轉(zhuǎn)換,將小的元素排在大的元素之前。代碼如下:var arr=[5,2,9,8,1,7,6,3,4];for(var i=0;iarr[j]){var c=arr[j];arr[j]=arr[i];arr[i]=c;}}}console.log(arr);數(shù)組中的內(nèi)置方法:數(shù)組的底部插入和底部刪除。push(元素,元素);數(shù)組名稱(chēng).push(元素,元素);//這種方法是在數(shù)組的尾部自動(dòng)增加元素,無(wú)法修改元素。和數(shù)組名稱(chēng)[i]="元素";//一次添加一個(gè)元素,但是可以修改已經(jīng)存在的元素。arr.pop();在數(shù)組的底部取出元素。圓括號(hào)內(nèi)沒(méi)有參數(shù),默認(rèn)為取出數(shù)組中最后的一個(gè)元素。如果我們需要連續(xù)刪除每個(gè)元素從后面往前刪除的話(huà),我們需要結(jié)合循環(huán)進(jìn)行刪除。棧存儲(chǔ),同時(shí)使用push,pop兩種方法對(duì)數(shù)組進(jìn)行修改的,我們將這種數(shù)據(jù)修改稱(chēng)為棧存儲(chǔ)。表現(xiàn)出來(lái)的數(shù)據(jù)存儲(chǔ)順序?yàn)楹筮M(jìn),先出? 在數(shù)組的頭部刪除或者插入元素,在頭部刪除:arr.shift()面試題:寫(xiě)出pop(),push(),shift(),unshift()的作用和區(qū)別。練習(xí)題:總共15張票,排在奇數(shù)位的人都選擇放棄買(mǎi)票。那么你的排位是32,請(qǐng)問(wèn)你能否買(mǎi)到票。如果能買(mǎi)到,你是第幾個(gè)買(mǎi)到票,如果不能你應(yīng)該排在第幾位。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? arr.sort(自定義排序規(guī)則);sort排序是根據(jù)Unicode編碼進(jìn)行升序排列。所以直接利用sort排序無(wú)法解決9以上數(shù)字的排序。此時(shí)我們就需要對(duì)sort排序進(jìn)行自定義排序規(guī)則var arr=[3,4,1,5,2,8,6,9,7,12,15,35];arr.sort(function(a,b){return a-b;});document.write(arr);//sort排序中的自定義排序,只能對(duì)數(shù)字類(lèi)型進(jìn)行排序。//如果對(duì)字符串進(jìn)行排序直接使用sort()方法即可?;卣{(diào)函數(shù):直接寫(xiě)在方法圓括號(hào)內(nèi)的函數(shù)被稱(chēng)為回調(diào)函數(shù)。其他的數(shù)組預(yù)定義方法:數(shù)組拼接:concat();這個(gè)拼接和push()的區(qū)別是:arr.concat(元素)是將原來(lái)數(shù)組arr和新添加的元素拼接形成新數(shù)組,老數(shù)組就需要手動(dòng)清空。push();是在原數(shù)組基礎(chǔ)上進(jìn)行元素 內(nèi)容添加修改。var arr=[1,2,3,4,5];arr=arr.concat(6,7);console.log(arr);//手動(dòng)清空原數(shù)組 var arr=[1,2,3,4,5];var b=arr.concat(6,7);console.log(b)arr=null;join()合并;var arr=[1,2,3,4,5];arr=arr.concat(6,7);console.log(arr);console.log(arr.join());//不加雙引號(hào),代表將數(shù)組中的全部元素輸出console.log(arr.join(""));//增加了雙引號(hào),代表將元素拼接在一起輸出。截?。簊lice(start,end):slice()截取在內(nèi)存變化中,實(shí)際上在原數(shù)組基礎(chǔ)上,將截取的新元素重新創(chuàng)建一個(gè)新數(shù)組出來(lái)。老的數(shù)組如果不用就手動(dòng)清楚,清空內(nèi)存。slice截取元素依靠元素的下標(biāo)來(lái)實(shí)現(xiàn)截取的范圍。start是指開(kāi)始的那個(gè)元素的下標(biāo)號(hào),end是所需截取的最后一個(gè)元素的下一位元素的下標(biāo)。var arr=[1,2,3,4,5,6,7,8,9];arr.slice(1,3);//所截取的數(shù)組是[2,3];var arr=[1,2,3,4,5];arr=arr.concat(6,7);console.log(arr);console.log(arr.join());//不加雙引號(hào),代表將數(shù)組中的全部元素輸出console.log(arr.join("!"));//增加了雙引號(hào),代表將元素拼接在一起輸出。console.log(arr.slice(0,4));//新建一個(gè)新的子數(shù)組,原來(lái)的老數(shù)組依然存在。console.log(arr);console.log(arr.toString(""));//和join的相同點(diǎn)和區(qū)別點(diǎn)://join(“”)相當(dāng)于將每個(gè)元素轉(zhuǎn)化為字符串并且拼接起來(lái)。join();直接將數(shù)組轉(zhuǎn)化為字符輸出不拼接。//arr.toString()加不加雙引號(hào)都是直接將數(shù)組轉(zhuǎn)化為字符串輸出,不拼接。以上的數(shù)組方法均為內(nèi)置方法:廠家已經(jīng)定義好的方法我們直接使用就可以實(shí)現(xiàn)效果的。需要我們自己一個(gè)代碼處理過(guò)程的程序,這樣的方法叫做自定義方法。console.log(arr.slice(1,))//從第二位開(kāi)始,一直到數(shù)組的最后一個(gè)元素全部截取。function slice(a,b){var arr=[1,2,3,4,5,6];var c=[];for(var i=a;i");//求多個(gè)值中最小的一個(gè)。

//隨機(jī)數(shù)random();返回的是一個(gè)從0-1的隨機(jī)數(shù)。

document.write(Math.random())

//50-100random()*50+50求出隨機(jī)數(shù)生成的數(shù)字范圍random()*(max-min)+min

練習(xí)作業(yè):

使用隨機(jī)數(shù)產(chǎn)生一個(gè)4位數(shù)驗(yàn)證碼。驗(yàn)證碼需要有數(shù)字和字母

Date日期對(duì)象:

概述:專(zhuān)門(mén)獲取計(jì)算機(jī)日期的一個(gè)對(duì)象。

日期對(duì)象的創(chuàng)建方法:

var dat=new Date();

var dat=new Date();//獲取的是計(jì)算機(jī)現(xiàn)行的時(shí)間

console.log(dat)

var mydat=new Date("2017/12/10 12:30");

console.log(mydat)//自定義時(shí)間

var pcdat=new Date(0);//得到的是計(jì)算機(jī)初始時(shí)間

console.log(pcdat)

get是獲取日期對(duì)象的某一個(gè)具體的時(shí)間點(diǎn)。

但是他不能修改日期對(duì)象。

如果我們需要一個(gè)能修改日期對(duì)象的方法:就需要一個(gè)set();

例如我們需要修改下時(shí)間的小時(shí)數(shù):

var dat=new Date();

dat.setHours(10);//此時(shí)運(yùn)用set方法修改小時(shí)數(shù)為10

console.log(dat)//此時(shí)間已經(jīng)修改。

我們?cè)贒ate()對(duì)象中獲取的時(shí)間差值,不僅僅是頁(yè)面上的一個(gè)顯示的內(nèi)容,而且是一個(gè)時(shí)間差的

毫秒數(shù),他在程序背后自動(dòng)根據(jù)計(jì)算機(jī)的時(shí)間進(jìn)度來(lái)前進(jìn)。

所以我們說(shuō)時(shí)間的進(jìn)程變化不受到我們的頁(yè)面程序的影響。

var nowdate=new Date();

var futuredate=new Date("2017/12/28 17:30");

var time=futuredate-nowdate;

document.write(time/1000/60);

練習(xí)題:算出距離過(guò)年還有多少:天,小時(shí),分鐘,秒的倒計(jì)時(shí)

第八章

1,function對(duì)象

function可以被稱(chēng)為函數(shù)對(duì)象。

在前端開(kāi)發(fā)過(guò)程中,我們經(jīng)常會(huì)遇到同名的函數(shù),這個(gè)時(shí)候我們傳參只能將參數(shù)傳遞給最新的函數(shù)

,js無(wú)法像Java這樣的后臺(tái)語(yǔ)言一樣去根據(jù)參數(shù)的個(gè)數(shù)和類(lèi)型來(lái)識(shí)別給那個(gè)函數(shù)傳參。

為了解決這個(gè)問(wèn)題,我們今天學(xué)習(xí)一個(gè)類(lèi)數(shù)組類(lèi)對(duì)象arguments來(lái)解決這個(gè)問(wèn)題。

arguments:是函數(shù)對(duì)象創(chuàng)建的時(shí)候才會(huì)產(chǎn)生,指的就是function中的參數(shù)列表。

這是一種對(duì)象,但是具有數(shù)組的特點(diǎn) ,所以被稱(chēng)為類(lèi)數(shù)組類(lèi)對(duì)象。

特點(diǎn):1,可以獲取對(duì)象的長(zhǎng)度。有l(wèi)ength屬性

arguments.length獲得是實(shí)際參數(shù)所傳的實(shí)參個(gè)數(shù)。

2,可以根據(jù)下標(biāo)號(hào)來(lái)查找參數(shù)。

arguments對(duì)象的主要作用:根據(jù)長(zhǎng)度和數(shù)據(jù)類(lèi)型判斷所傳數(shù)據(jù)是否為函數(shù)對(duì)象所需數(shù)據(jù)。

模擬Java中的函數(shù)重載。

函數(shù)的創(chuàng)建:

1,直接量創(chuàng)建: var aa=function(){

this//代表的是全局對(duì)象window

};

2,函數(shù)類(lèi)聲明創(chuàng)建:function aa(){};

3,構(gòu)造函數(shù)創(chuàng)建:var aa=new Function()

在對(duì)象中 this//代表的是函數(shù)名:aa

匿名函數(shù):匿名函數(shù)的自調(diào),回調(diào);

匿名函數(shù):沒(méi)有命名的函數(shù) ,匿名函數(shù)的調(diào)用:(function(){})()//自調(diào);

將整個(gè)匿名函數(shù)放入方法的參數(shù)使用。例如sort(function(){})//回調(diào)函數(shù)。

閉包:

閉包的作用:防止全局變量的值污染。

因?yàn)閖s中變量var可以實(shí)現(xiàn)同名變量的創(chuàng)建,這樣會(huì)導(dǎo)致在后續(xù)的賦值過(guò)程中出現(xiàn)值的誤傳。

閉包實(shí)現(xiàn)的原理:

局部變量不會(huì)被外部所訪問(wèn)。

代碼實(shí)例:

function cc(){

var n=10;

return function (){

return n+3;

}

}

n=100;//為了不被n=100的值污染,我們使用了閉包;

var c=cc();//cc()//function (){return n+3}//c=function (){return n+3}

console.log(cc())

document.write(c());//function (){return n++}

//var c=aa();//var c=function(){return n++}

//document.write(c());

閉包的三個(gè)特點(diǎn):

1,存在內(nèi)環(huán)和外環(huán)兩個(gè)函數(shù)嵌套。

2,在內(nèi)環(huán)和外環(huán)之間存在一個(gè)局部變量。

3,內(nèi)環(huán)函數(shù)是一個(gè)匿名函數(shù)并且由外環(huán)函數(shù)return。

自定義對(duì)象:

對(duì)象:從代碼使用上來(lái)說(shuō)。對(duì)象就是我們所要描述的目標(biāo),以及為了描述目標(biāo)所封裝的屬性存儲(chǔ),處理及運(yùn)算方法,等統(tǒng)稱(chēng)為對(duì)象。

從代碼表現(xiàn)上來(lái)說(shuō):對(duì)象實(shí)際就是一系列沒(méi)有序列的屬性和值的集合

自定義對(duì)象:開(kāi)發(fā)人員根據(jù)需要自我定義的對(duì)象;

自定義對(duì)象的創(chuàng)建:

1,直接量創(chuàng)建:/原始對(duì)象;

var obj={

name:"tom",

age:21,

say:function(){this.name+this.age}

}

//缺點(diǎn):原始對(duì)象主要是針對(duì)某一個(gè)實(shí)例來(lái)寫(xiě)的,如果我們后續(xù)要多個(gè)實(shí)例創(chuàng)建,就需要重復(fù)創(chuàng)建。

2,為了縮減代碼,減少重復(fù)創(chuàng)建,我們使用工廠函數(shù)進(jìn)行創(chuàng)建:

//工廠函數(shù)創(chuàng)建對(duì)象方式:

function stu(name,age,party,core){

var obj={};

obj.name=name;

obj.age=age;

obj.party=party;

obj.core=core;

obj.say=function(){

return this.name+this.age+this.party+this.core;

}

return obj;

}

//工廠函數(shù),就是使用常規(guī)函數(shù)包裝對(duì)象。通過(guò)不同值的傳遞,實(shí)現(xiàn)不同對(duì)象的輸出。規(guī)避了代碼的重復(fù)

//缺點(diǎn):對(duì)于不同屬性的同名函數(shù),他無(wú)法識(shí)別函數(shù)的種類(lèi)。

//構(gòu)造函數(shù)對(duì)象

function Obj(name,age,core){

this.name=name;

this.age=age;

this.core=core;

this.say=function(){

return this.name+this.age+this.core;

}

}

var first=new Obj("tim",21,75);

var first1=new Obj("tmm",28,65);

console.log(first.say());

//特點(diǎn):可以規(guī)避代碼重復(fù)創(chuàng)建,同時(shí)清晰只想所傳參數(shù)的歸屬。

缺點(diǎn):每次實(shí)例化傳參都等于在堆內(nèi)存中重新開(kāi)辟空間,內(nèi)存的性能很差。

屬性的遍歷輸出:

對(duì)象的屬性遍歷輸出可以通過(guò)for in 循環(huán)的方式予以讀取。

對(duì)象的屬性值添加,通過(guò) 對(duì)象.屬性名=“屬性值”;的方式予以修改的。

對(duì)象["屬性名"]="屬性值"

對(duì)象屬性是否存在的判斷方法:

1,通過(guò)利用屬性名in對(duì)象的方式予以判斷,返回結(jié)果為:boolean值

2,通過(guò)hasOwnProperty()方法予以判斷

function stu(name,age,sex,core){

var obj=new Object();

obj.name=name;

obj.age=age;

obj.sex;

obj.core=core;

obj.say=function(){

}

return obj;

}

for(var key in stu()){

document.write(stu("tom",1,"男",45)[key]);

}//遍歷輸出

document.write("height" in stu())//屬性判斷

document.write(stu().hasOwnProperty("age"));//屬性判斷

document.write(stu().age===undefined);//屬性判斷

封裝:

原型:在js中,我們所有面向?qū)ο蠖际腔谠偷拿嫦驅(qū)ο?。原型就是每個(gè)函數(shù)對(duì)象在創(chuàng)建的時(shí)候,都會(huì)有一個(gè)默認(rèn)的屬性

prototype,該屬性數(shù)據(jù)類(lèi)型是一個(gè)object類(lèi)型,所以我們稱(chēng)原型為原型對(duì)象。

原始對(duì)象沒(méi)有原型prototype.

原型獲取:

function B(){

this.name="tom";

}

console.log(B.prototype);//object

document.write(Object.getPrototypeOf(B))//function(){[native code]}

對(duì)象的原型直接全部復(fù)制對(duì)象的屬性和方法,對(duì)象改變,原型改變。如果原型改變了,對(duì)象不會(huì)被影響到。

練習(xí)作業(yè):

1,兩個(gè)對(duì)象A,B (代碼題)

實(shí)現(xiàn)a1繼承b1的身高

實(shí)現(xiàn)a1,a2,a3,統(tǒng)統(tǒng)繼承b1身高

如果只是通過(guò)原型繼承,第一題怎么做?

基礎(chǔ)題:繼承的三種方法代碼抄寫(xiě),及區(qū)別

預(yù)習(xí):自有屬性,共有屬性,屬性的擴(kuò)展,this關(guān)鍵詞的用法。

繼承:

使用繼承的原因,因我們?cè)趯?shí)際開(kāi)發(fā)工作,我們將所有的方法都封裝為獨(dú)立的對(duì)象,那么獨(dú)立的對(duì)象如果

需要形成一個(gè)完整的程序,我們就需要在對(duì)象之間形成相互調(diào)用,這樣就需要使用繼承這一功能。

繼承的定義:對(duì)象A能夠直接使用對(duì)象B的屬性,這就叫做A繼承B;

繼承的方法:

1,A.prototype=new B();此時(shí)就實(shí)現(xiàn)了對(duì)象A對(duì)對(duì)象B的全面繼承。

主要表現(xiàn)在A的原型鏈指向B的原型

2,實(shí)現(xiàn)單一一個(gè)對(duì)象繼承另一個(gè)對(duì)象,不影響其他的同類(lèi)對(duì)象。

Object.setPrototypeOf(子對(duì)象a,父對(duì)象的實(shí)例new B());

3,實(shí)現(xiàn)A對(duì)B的原型繼承:

A.prototype=B.prototype;//就是將B的原型直接賦值給A的原型,從而實(shí)現(xiàn)A對(duì)B的繼承。

對(duì)象和原型的關(guān)系

對(duì)象的改變會(huì)影響原型的改變。

原型的改變不會(huì)影響到對(duì)象。

共有屬性和自有屬性:

如果有一個(gè)父類(lèi)B,和子類(lèi)b,父類(lèi)的所有屬性都會(huì)被子類(lèi)b所繼承使用,那么父類(lèi)的屬性被稱(chēng)為共有屬性

如果子類(lèi)中有一個(gè)自己獨(dú)特的屬性。那么這個(gè)屬性被稱(chēng)為自有屬性。

父類(lèi)無(wú)法使用子類(lèi)的自有屬性。

子類(lèi)可以直接使用父類(lèi)的原型屬性/共有屬性。

給父類(lèi)添加共有屬性/原型屬性的時(shí)候我們需要寫(xiě)成 父類(lèi).prototype.屬性名=“屬性值”;

給子類(lèi)添加自有屬性:子類(lèi).屬性名=“屬性值”

this關(guān)鍵詞:意思是替代指向;

在構(gòu)造函數(shù)中,對(duì)象中,this代表的是對(duì)象自身。

在常規(guī)函數(shù)中,this代表的全局對(duì)象window。

call()//參數(shù)第一個(gè)值里面放的是this,

apply()

以上兩種都是替代函數(shù),主要作用是 做對(duì)象指向的改變。參數(shù)的第一個(gè)為this,指的那個(gè)對(duì)象,第二個(gè)參數(shù)

call最多可以填寫(xiě)兩個(gè)元素,做具體單一傳值。

apply()第二個(gè)參數(shù)是一個(gè)類(lèi)數(shù)組類(lèi)對(duì)象,里面可以包含一組元素。指向范圍更加廣闊一些。

function add(a,b)

{

alert(a+b);

}

function sub(a,b)

{

alert(a-b);

}

add.call(sub,3,1); //1,此時(shí)相當(dāng)于我們將add替代了對(duì)象sub.,輸出sub直接使用是add的運(yùn)算公式

輸出結(jié)果為4

sub(3,1)//2,但是如果我們單獨(dú)給sub對(duì)象提供參數(shù),sub依然是按照自己原有的公式計(jì)算結(jié)果

輸出結(jié)果為:2;

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,936評(píng)論 6 535
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,744評(píng)論 3 421
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事?!?“怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 176,879評(píng)論 0 381
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 63,181評(píng)論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,935評(píng)論 6 410
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 55,325評(píng)論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,384評(píng)論 3 443
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 42,534評(píng)論 0 289
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,084評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,892評(píng)論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,067評(píng)論 1 371
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,623評(píng)論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,322評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 34,735評(píng)論 0 27
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 35,990評(píng)論 1 289
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,800評(píng)論 3 395
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,084評(píng)論 2 375

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

  • 第2章 基本語(yǔ)法 2.1 概述 基本句法和變量 語(yǔ)句 JavaScript程序的執(zhí)行單位為行(line),也就是一...
    悟名先生閱讀 4,188評(píng)論 0 13
  • js簡(jiǎn)介 Js是一種基于事件和對(duì)象驅(qū)動(dòng)的解釋性、松散性的語(yǔ)言。 一切皆對(duì)象 javascript 布蘭登艾奇 ...
    塔庫(kù)納瑪哈哈閱讀 1,232評(píng)論 0 2
  • 個(gè)人入門(mén)學(xué)習(xí)用筆記、不過(guò)多作為參考依據(jù)。如有錯(cuò)誤歡迎斧正 目錄 簡(jiǎn)書(shū)好像不支持錨點(diǎn)、復(fù)制搜索(反正也是寫(xiě)給我自己看...
    kirito_song閱讀 2,487評(píng)論 1 37
  • 今天中午一個(gè)人在食堂吃飯,旁邊有個(gè)大一的妹子的父母和她一起吃,聽(tīng)到他們聊天有點(diǎn)大聲,似乎是家長(zhǎng)在教育妹子好好...
    Li亦維閱讀 218評(píng)論 0 1
  • 水菱:鏘鏘鏘~~又一篇新的拆書(shū)記錄誕生啦!喜歡畫(huà)畫(huà)的小伙伴越來(lái)越多,這一期的拆書(shū)主題應(yīng)運(yùn)而生——修煉畫(huà)圖基本功~(...
    白一琳Elin閱讀 2,142評(píng)論 6 14