1. 數(shù)據(jù)類型:
js中的原始數(shù)據(jù)類型:number、string、boolean、undefined、null、object
原始數(shù)據(jù)類型又分為:
基本類型(簡(jiǎn)單類型),值類型:number、string、boolean
復(fù)雜類型(引用類型):object
空類型:undefined、null
注意:值類型之間傳遞,傳遞的是值,值在棧上;引用類型之間的傳遞,傳遞的是地址(引用),對(duì)象在堆,地址在棧。
2. 獲取變量的數(shù)據(jù)類型:typeof typeof 變量名 / typeof(變量名)
3. isNaN():驗(yàn)證這個(gè)變量或值是不是 不是一個(gè)數(shù)字。NaN:Not a Number(不是一個(gè)數(shù)字)
注意:不要用NaN 驗(yàn)證 isNaN;不要用小數(shù)驗(yàn)證小數(shù);js中所有數(shù)字都是number類型的。
4. 類型裝換
4.1 其他類型轉(zhuǎn)換成數(shù)字類型:parseInt(); parseFloat(); Number();
4.2 其他類型轉(zhuǎn)換字符串類型:toString(); String();
4.3 其他類型轉(zhuǎn)換成布爾類型:boolean(); //空字符串、null、undefined轉(zhuǎn)換之后都是false(即沒有意義的,轉(zhuǎn)換之后都是false)
5. 循環(huán):
while循環(huán):先判斷,再執(zhí)行,循環(huán)體可能一次都不會(huì)被執(zhí)行
do-while循環(huán):先執(zhí)行一次循環(huán)體,后判斷。至少執(zhí)行一次循環(huán)體
for循環(huán):先執(zhí)行一次表達(dá)式1,然后判斷表達(dá)式2
6. 數(shù)組:
?。?)創(chuàng)建數(shù)組:
1)通過構(gòu)造函數(shù)創(chuàng)建數(shù)組
var arr = new Array();
var arr = new Array(10); //長(zhǎng)度為10的數(shù)組,但是數(shù)據(jù)類型都為 undefined
var arr = new Array(1,2,3,4,5);
2)通過字面量的方式創(chuàng)建數(shù)組
var arr = [];
var arr = [1, 2, 3, 4];
(2)小案例:
1)去掉數(shù)組中重復(fù)的0:
2)反轉(zhuǎn)數(shù)組:
6. arguments:對(duì)象,偽數(shù)組,當(dāng)不知道傳入的參數(shù)的具體個(gè)數(shù)時(shí),可以使用。
7. 函數(shù):匿名函數(shù)(函數(shù)表達(dá)式)、命名函數(shù)(函數(shù)聲明)、函數(shù)的自調(diào)用(沒有名字,聲明的同時(shí),直接調(diào)用)。
注意:函數(shù)聲明,函數(shù)名相同,則前面的同名函數(shù)將會(huì)被覆蓋;函數(shù)表達(dá)式,變量名相同,不會(huì)被覆蓋。
作為參數(shù)使用的函數(shù),叫回調(diào)函數(shù)。(注意:函數(shù)名代表代碼,若有括號(hào),則是結(jié)果。)
函數(shù)可以作為參數(shù)使用,也可以作為返回值使用。
8. 作用域鏈:你使用的變量應(yīng)該在當(dāng)前作用域范圍內(nèi)查找,找不到,則往上一級(jí)查找,以此類推,直到0級(jí)作用域也找不到,則會(huì)報(bào)錯(cuò),說明沒有定義。
9. 預(yù)解析:把變量的聲明和函數(shù)的聲明提前到了該作用域的嘴上面,但是值沒有。
10. 創(chuàng)建對(duì)象的三種方式:
?。?)調(diào)用系統(tǒng)構(gòu)造函數(shù)來創(chuàng)建對(duì)象:
var obj = new Object();
obj.name = 'smile'; //添加屬性
obj.play = function() { console.log("I like to play football");} //添加方法
?。?)自定義構(gòu)造函數(shù)來創(chuàng)建對(duì)象:
先自定義一個(gè)構(gòu)造函數(shù):
再創(chuàng)建對(duì)象——實(shí)例化對(duì)象,并初始化:
注意:函數(shù)和構(gòu)造函數(shù)的區(qū)別:函數(shù)名首字母是小寫的,是用來調(diào)用的;構(gòu)造函數(shù)的函數(shù)名首字母是大寫的,是用來創(chuàng)建對(duì)象的。
自定義構(gòu)造函數(shù)創(chuàng)建對(duì)象做了四件事:
1)在內(nèi)存中開辟(申請(qǐng)一塊空閑的空間)空間,存儲(chǔ)創(chuàng)建的新的對(duì)象。
2)把this設(shè)置為當(dāng)前的對(duì)象
3)設(shè)置對(duì)象的屬性和方法的值
4)把this這個(gè)對(duì)象返回
(3)字面量的方式創(chuàng)建對(duì)象:
?。?)一次性創(chuàng)建多個(gè)對(duì)象:工廠模式。把創(chuàng)建對(duì)象的代碼封裝在一個(gè)函數(shù)中:
創(chuàng)建并實(shí)例化一個(gè)對(duì)象:
再創(chuàng)建并實(shí)例化一個(gè)對(duì)象:
11. 設(shè)置和獲取屬性的方法:
1)點(diǎn)語法:obj.age = 22; obj.play()
2)方括號(hào):obj["age"] = 22; obj["play"]();
12. JSON 格式的數(shù)據(jù):
JSON格式的數(shù)據(jù)一般都是成對(duì)的,是鍵值對(duì);JSON也是一個(gè)對(duì)象,一般json格式的數(shù)據(jù)無論是鍵還是值都是用雙引號(hào)括起來的。
13. 遍歷對(duì)象:
不能用 for 循環(huán),因?yàn)閷?duì)象是無序的,可以通過key-in循環(huán)來遍歷(key 是變量名,可更改,json是對(duì)象名,也可以是其他對(duì)象)
14. 實(shí)例對(duì)象和靜態(tài)對(duì)象:
實(shí)例對(duì)象:通過構(gòu)造函數(shù)創(chuàng)建出來,實(shí)例化的對(duì)象。
靜態(tài)對(duì)象:不需要?jiǎng)?chuàng)建,直接就是一個(gè)對(duì)象,方法(靜態(tài)方法),直接通過這個(gè)對(duì)象的名字調(diào)用。
實(shí)例方法必須通過實(shí)例對(duì)象調(diào)用;靜態(tài)方法必須通過大寫的對(duì)象調(diào)用。
15. Math對(duì)象
Math.PI-----常數(shù)π;Math.E-----常數(shù)的底數(shù);Math.abs(值)-----絕對(duì)值;Math.ceil(值)-----向上取整;Math.floor(值)-----向下取整;Math.pow(值1,值2)-----值1的值2次冪;Math.sqrt(值)-----值的平方根(開平方的結(jié)果);Math.random()------產(chǎn)生偽隨機(jī)數(shù)(0-1之間的);Math.max(10, 2, 3, 4, 17, 19);從一組數(shù)據(jù)中找 最大值;Math.min(10, 2, 3, 4, 17, 19);從一組數(shù)據(jù)中找 最小值;parseInt(Math.random()*5) 1; 產(chǎn)生1-5之間的隨機(jī)整數(shù)。
16. Date 對(duì)象
不是靜態(tài)的,需要先實(shí)例化。var dt = new Date();
17. 字符串對(duì)象----String 對(duì)象
string----->字符串類型-----基本類型
String----->字符串類型-----引用類型
字符串特性:不可變性??梢詫⒆址闯墒且粋€(gè)字符數(shù)組,可以通過for循環(huán)進(jìn)行遍歷。
字符串常用的屬性和方法:
.length //字符串的長(zhǎng)度
.charAt(index) //返回值是指定索引位置的字符,超出.length-1的索引,會(huì)返回空字符
.fromCharCode(num1,...,numN) //把數(shù)字轉(zhuǎn)換成ASCLL碼
.concat() //該方法將一個(gè)或多個(gè)字符串與原字符串連接合并,形成一個(gè)新的字符串并返回
.indexOf(searchValue[, fromIndex]) //返回調(diào)用String對(duì)象中第一次出現(xiàn)的指定值的索引,開始在f.romindex進(jìn)行搜索,如果未找到該值,則返回-1
.lastIndexOf() //從后往前找
.replace("原來的字符串","新的字符串") //用新的字符串替換原來的字符串
.slice(start, end) //返回提取后的字符串
.split("字符串",切割后留下的個(gè)數(shù)) //切割字符串
.substr() //返回一個(gè)字符串從指定位置開始到指定字符數(shù)的字符
.substring(開始的索引,結(jié)束的索引),返回截取后的字符串,不包含結(jié)束索引的字符
.toLocaleLowerCase(); //轉(zhuǎn)換成小寫
.toLowerCase(); //轉(zhuǎn)換成小寫
.toLocaleUpperCase(); //轉(zhuǎn)換成大寫
.toUpperCase(); //轉(zhuǎn)換成大寫
.trim() //切掉字符串兩端的空格
18. Array對(duì)象
判斷變量是不是數(shù)組:instanceof 、isArray()
?。?)拼接一個(gè)或多個(gè)數(shù)組;concat()
?。?)測(cè)試數(shù)組的所有元素是否都通過了指定函數(shù)的測(cè)試;fevery()
?。?).將符合條件的數(shù)組值組合成一個(gè)新的數(shù)組輸出返回;filter()
?。?)追加元素;
push() 追加一個(gè)元素到數(shù)組的末尾,返回值為插入后數(shù)組的長(zhǎng)度。
unshift() 追加一個(gè)元素到數(shù)組的開始,返回值為插入后數(shù)組的長(zhǎng)度。
?。?)刪除元素:
pop() 刪除數(shù)組的最后一個(gè)元素,返回值為刪除的這個(gè)元素
shift() 刪除數(shù)組的第一個(gè)元素,返回值為刪除的這個(gè)元素
?。?)遍歷數(shù)組:for循環(huán) 或者 forEach()
(7)找元素的索引:indexOf(),有則返回索引,沒有則返回1。
?。?)將數(shù)組中所有元素放到一個(gè)字符串中。join(分隔符)
?。?)map():數(shù)組中的每一個(gè)元素都要執(zhí)行這個(gè)函數(shù),把執(zhí)行后的結(jié)果放在一個(gè)新的數(shù)組中。
?。?0)排序。sort() 但是不穩(wěn)定,應(yīng)該加上固定寫法,使其穩(wěn)定。
?。?1)截?。簊lice(開始索引,結(jié)束索引) 注意:截取后的新數(shù)組不包含結(jié)束索引。
?。?2)刪除、插入、替換元素; splice(開始的索引,要?jiǎng)h除的個(gè)數(shù),替換的元素)。
19. 基本包裝類型:
普通變量不能直接調(diào)用屬性或者方法;對(duì)象可以直接調(diào)用屬性和方法。
基本包裝類型:本身是基本類型,但是在執(zhí)行代碼的過程中,如果這種類型的變量調(diào)用了屬性或者方法,那么這種類型就不再是基本類型了,而是基本包裝類型,這個(gè)變量也不是普通的變量了,而是基本包裝類型對(duì)象
string boolean number 既是基本類型,也可能是基本包裝類型
20. 冒泡排序:
聯(lián)系客服