? ? ? ? ? JS基礎(chǔ)知識(shí)點(diǎn)js基礎(chǔ):變量,數(shù)據(jù)類型(基本和引用),數(shù)據(jù)類型轉(zhuǎn)換選擇結(jié)構(gòu),循環(huán)結(jié)構(gòu)? ? ? ??
基本數(shù)據(jù)類型(按值訪問):Undefined 、 Null 、 Boolean 、 Number 和 String
引用數(shù)據(jù)類型(按引用訪問):object、Array、function
typeof(檢測基本數(shù)據(jù)類型時(shí) typeof 是非常得力的助手)可以返回以下6種類型:undefined? 、 boolean 、 number 、string、object(對(duì)象和null都是object類型)、function
instanceof(用于檢測引用類型):所有引用類型的值都是 Object 的實(shí)例,person(引用類型值) instanceof Object永遠(yuǎn)都是true。
要知道是什么類型的對(duì)象,使用instanceof 操作符接上想要判斷的類型,例如colors instanceof Array。
基本數(shù)據(jù)類型復(fù)制:復(fù)制的是該變量的副本,這兩個(gè)變量可以參與任何操作而不會(huì)相互影響
引用數(shù)據(jù)類型復(fù)制:復(fù)制的是該變量的指針,該指針指向存儲(chǔ)在堆中的一個(gè)對(duì)象。復(fù)制操作結(jié)束后,兩個(gè)變量實(shí)際上將引用同一個(gè)對(duì)象。因此,改變其中一個(gè)變量,就會(huì)影響另一?個(gè)變量
傳參:基本類型和引用類型全部是按值傳遞,相當(dāng)于把參數(shù)復(fù)制一份給到function的局部變量
為了便于操作基本類型值,ECMAScript 還提供了 3 個(gè)特殊的引用類型: Boolean 、 Number 和
String 。
Number 類型重寫了 valueOf() 、 toLocaleString() 和 toString()方法。除了繼承的方法之外, Number 類型還提供了一些用于將數(shù)值格式化為字符串的方法。?toFixed() 方法會(huì)按照指定的小數(shù)位返回?cái)?shù)值的字符串表示。
String 對(duì)象的方法也可以在所有基本的字符串值中訪問到。其中,繼承的 valueOf() 、 toLocale-String() 和 toString() 方法,都返回對(duì)象所表示的基本字符串值。String 類型的每個(gè)實(shí)例都有一個(gè) length 屬性。
字符方法:兩個(gè)用于訪問字符串中特定字符的方法是: charAt() 和 charCodeAt() 。
var stringValue = "hello world";
alert(stringValue.charAt(1)); //"e"
alert(stringValue.charCodeAt(1)); // 輸出"101",小寫字母 "e" 的字符編碼
字符串操作方法
1、concat:拼接字符串,可接收任意多字符串,不改變原字符串值,雖然 concat() 是專門用來拼接字符串的方法,但實(shí)踐中使用更多的還是加號(hào)操作符(+)。
var stringValue = "hello ";
var result = stringValue.concat("world", "!");
alert(result); //"hello world!"
alert(stringValue); //"hello"
2、三個(gè)基于子字符串創(chuàng)建新字符串的方法: slice() 、 substr() 和 substring() 。都接收1或2個(gè)參數(shù)。
slice() 、substring()在接收正數(shù)參數(shù)時(shí),第一個(gè)參數(shù)是字符串截取的起始位置,第二個(gè)是字符串結(jié)束位置。
substr()在接收正數(shù)參數(shù)時(shí),第一個(gè)參數(shù)同上,第二個(gè)參數(shù)是截取長度。
當(dāng)?shù)谝粋€(gè)參數(shù)為負(fù)數(shù)的時(shí)候,slice()和substr()按照參數(shù)+字符串長度結(jié)果來截?。籹ubstring()將負(fù)參數(shù)轉(zhuǎn)換為0;
當(dāng)?shù)诙€(gè)參數(shù)為負(fù)數(shù)的時(shí)候,slice()按照參數(shù)+字符串長度結(jié)果來截??;substr()和substring()將負(fù)參數(shù)轉(zhuǎn)換為0;
3、字符串位置方法:有兩個(gè)可以從字符串中查找子字符串的方法: indexOf() 和 lastIndexOf()
4、trim():刪除字符串前后空格,不改變原字符串值
5、字符串大小寫轉(zhuǎn)換方法
字符串大小寫轉(zhuǎn)換的方法有 4 個(gè): toLowerCase() 、 toLocaleLowerCase() 、 toUpperCase() 和toLocaleUpperCase() 。
6、字符串的模式匹配方法
match() 方法只接受一個(gè)參數(shù),要么是一個(gè)正則表達(dá)式,要么是一個(gè) RegExp 對(duì)象。返回?cái)?shù)組。
search()參數(shù)同上。返回要查找的在字符串中第一次出現(xiàn)的位置。
字符串替換:var result = text.replace("at", "ond");
7、localeCompare() 方法
var stringValue = "yellow";
alert(stringValue.localeCompare("brick")); //1
在前面返回1,同樣位置返回0,在后面返回-1
變量的聲明和變量的初始化
1. 變量的聲明:var 變量名;
變量的賦值:變量名=值;
2. 變量的初始化:var 變量名=值;
數(shù)據(jù)類型
1.簡單類型和復(fù)雜類型:
簡單類型: Number,String,Boolean,Undefined,Null
復(fù)雜類型:Object
2.數(shù)字類型:Number
字符串類型:String,在js中存儲(chǔ)字符串的數(shù)據(jù)的值,可以使用單引號(hào),也可以使用雙引號(hào),目前推薦大家用雙引號(hào)(代碼中的括號(hào)小括號(hào),大括號(hào),中括號(hào),逗號(hào),分號(hào)都是英文的)
布爾類型:Boolean,其他的語言中bool,布爾類型中的數(shù)據(jù)只有true(1)或者是false(0)
未定義:undefined--就是自己,當(dāng)一個(gè)變量聲明了沒有初始化(沒有賦值),就是undefined
如果變量的值是Undefined和數(shù)字計(jì)算,結(jié)果是NaN---不是一個(gè)數(shù)字
空:null,當(dāng)一個(gè)變量使用后,不想再使用了,可以賦值為null---->釋放內(nèi)存內(nèi)存空間
Object:對(duì)象
typeof關(guān)鍵字--->識(shí)別該變量的類型
1.typeof 變量名
2.typeof(變量名)
數(shù)字類型的范圍
1.//獲取數(shù)字類型的最大值
console.log(Number.MAX_VALUE);
2.//獲取數(shù)字類型的最小值
console.log(Number.MIN_VALUE);
3.//isNaN--->不是一個(gè)數(shù)字,結(jié)果才是true,否則就是false
var num="我好開森哦";
console.log(isNaN(num));
字符串的長度和拼接
1.獲取字符串的長度:變量名.length---->該字符串的長度
console.log(name.length);
2.字符串的拼接:使用+來進(jìn)行拼接
console.log(name1+name2+name3);
數(shù)字類型轉(zhuǎn)換
1.其他類型轉(zhuǎn)數(shù)字類型---字符串轉(zhuǎn)數(shù)字, 布爾轉(zhuǎn)數(shù)字
1.parseInt(變量);---轉(zhuǎn)成整數(shù)的方式
2.parseFloat(變量)----轉(zhuǎn)小數(shù)的方式
3.Number(變量)---數(shù)字類型----如果轉(zhuǎn)換失敗了,則顯示的是NaN
4.isNaN(值)--->如果不是一個(gè)數(shù)字則返回true,如果是一個(gè)數(shù)字則返回false
2.其他類型轉(zhuǎn)字符串類型
1.變量.toString()---轉(zhuǎn)字符串了
2.String(變量)----轉(zhuǎn)字符串了
3.其他類型轉(zhuǎn)布爾類型
Boolean(變量)---轉(zhuǎn)布爾類型
操作符
算數(shù)運(yùn)算符:+ - * / %(取余)---->一個(gè)數(shù)字和另一個(gè)數(shù)字相除之后的余數(shù)
算數(shù)運(yùn)算表達(dá)式:是一個(gè)表達(dá)式,由算數(shù)運(yùn)算符連接起來的表達(dá)式
關(guān)系運(yùn)算符:> <>= <=>
邏輯運(yùn)算符: &&--->邏輯與 || --->邏輯或 ! --->邏輯非
賦值運(yùn)算符:=
賦值運(yùn)算符中還有復(fù)合賦值運(yùn)算符: += -= *= /= %=
一元運(yùn)算符:(++變量 變量++)
如果++是在后面,參與運(yùn)算的時(shí)候,先參與運(yùn)算,然后運(yùn)算完畢后再自身加1
如果++是在前面,先自身加1,參與運(yùn)算
流程控制
1.順序結(jié)構(gòu)
2. 分支語句(5個(gè)):if , if-else , if-else if-else if -else if...else , swtich-case , 三元表達(dá)式
3.循環(huán)語句(5):while , do-while , for , break , continue
break關(guān)鍵字,continue關(guān)鍵字
1.break關(guān)鍵字---->關(guān)于循環(huán)的
在循環(huán)中如果遇到了break關(guān)鍵字,則立刻跳出當(dāng)前所在的循環(huán)
2.continue關(guān)鍵字---->在循環(huán)中使用
在循環(huán)中遇到了continue--->立刻回到循環(huán)的條件的位置,繼續(xù)下一次循環(huán)
數(shù)組
1.數(shù)組的作用:一次性可以存儲(chǔ)多個(gè)數(shù)據(jù),數(shù)組中存儲(chǔ)的數(shù)據(jù)類型可以不一樣
2.數(shù)組的遍歷:就是一個(gè)一個(gè)的獲取數(shù)組中的數(shù)據(jù)
3.數(shù)組的定義:
1.通過構(gòu)造函數(shù)的方式創(chuàng)建數(shù)組
var 數(shù)組名=new Array();
2.通過構(gòu)造函數(shù)的方式創(chuàng)建數(shù)組
var 數(shù)組名=new Array(長度);
3.字面量的方式定義數(shù)組
var 數(shù)組名=[];
函數(shù)
1.函數(shù):把一些重復(fù)的代碼封裝起來,在需要的時(shí)候直接調(diào)用
2.函數(shù)的作用:代碼的重用(代碼的重復(fù)使用)
3.函數(shù)的定義:
函數(shù)定義的語法:
function 函數(shù)名(){
函數(shù)體
}
函數(shù)的調(diào)用:
函數(shù)名();
4. 函數(shù)名字符合駝峰命名法
5.函數(shù)的參數(shù)
函數(shù)的參數(shù):函數(shù)在定義的時(shí)候,函數(shù)名后面的小括號(hào)中的變量,就叫參數(shù)
函數(shù)在調(diào)用的時(shí)候傳入的變量或者是值,也叫參數(shù);
函數(shù)定義的時(shí)候函數(shù)名后面的小括號(hào)里面的變量叫形參
函數(shù)調(diào)用的時(shí)候函數(shù)名后面的小括號(hào)里面的變量或者是值叫實(shí)參
6.函數(shù)的返回值
如果一個(gè)函數(shù)沒有返回值(函數(shù)中沒有return),也沒有參數(shù),這個(gè)函數(shù)可以叫:無參數(shù)無返回值的函數(shù);
返回值的細(xì)節(jié)問題:
當(dāng)需要返回多個(gè)數(shù)據(jù)的時(shí)候,可以先將這些數(shù)據(jù)都傳入到數(shù)組中,最后返回一個(gè)數(shù)組即可。
在函數(shù)中,return下面的代碼,不執(zhí)行;
函數(shù)沒有返回值,接收了返回來的結(jié)果,結(jié)果是undefined;
當(dāng)一個(gè)變量聲明了,沒有賦值,結(jié)果是undefined;
當(dāng)一個(gè)函數(shù)內(nèi)部,有return,但是后面什么也沒有,那么此時(shí),這個(gè)函數(shù)也是沒有返回值的,該函數(shù)沒有明確的返回值;
當(dāng)一個(gè)函數(shù)沒有明確的返回值的時(shí)候,如果接收,結(jié)果就是undefined;
arguments偽數(shù)組
arguments是可以在函數(shù)內(nèi)獲取用戶在調(diào)用函數(shù)的時(shí)候傳入了幾個(gè)參數(shù),同時(shí)還可以獲取每個(gè)傳入?yún)?shù)的值
作用域
作用域:變量的使用范圍
局部變量:在函數(shù)中定義的變量就是局部變量
全局變量:除了函數(shù)以外任意的地方定義的變量,都是全局變量
局部變量的使用范圍:只能在函數(shù)中使用
全局變量的使用范圍:在頁面的任何位置都可以
代碼塊:在一對(duì)大括號(hào)中寫的代碼,變量在代碼塊聲明,只能在代碼塊中使用,(暫且的) 在js中是沒有塊級(jí)作用域的
隱式的全局變量:聲明變量,沒有使用var
數(shù)據(jù)類型轉(zhuǎn)換選擇結(jié)構(gòu),循環(huán)結(jié)構(gòu)? ? ? ??
1、數(shù)據(jù)類型轉(zhuǎn)換
數(shù)據(jù)類型:number,string,boolean,null,undefined
var a = 123;
var b = "123";
var c = 1.23;
var result = b +56; 拼接
1.1、什么是數(shù)據(jù)類型轉(zhuǎn)換
允許數(shù)據(jù)在各個(gè)類型之間靈活的轉(zhuǎn)變
1.2、隱式轉(zhuǎn)換
不需要認(rèn)為參與,由程序自動(dòng)完成
+
var a = true;
var b = 56;
var result = a + b; //57
1.3通過 typeof(參數(shù)) 函數(shù)幫助查看指定數(shù)據(jù)的類型
NaN : Not a Number?
isNaN() : 是不是一個(gè)數(shù)字
isNaN("abc") : true
isNaN(123) : false
2、強(qiáng)制數(shù)據(jù)類型轉(zhuǎn)換
轉(zhuǎn)換函數(shù)
1、toString()?? 其它類型轉(zhuǎn)字符串? 但是遇到null? undefind類型???? 報(bào)錯(cuò) 無法轉(zhuǎn)換
String();??? 其它類型轉(zhuǎn)字符串? 都能轉(zhuǎn)
面試題??? String?? vs?? toString()
var a = 123;
a.toString();
var b = ""+a; //string
var c = a+""; //string
2、其他類型轉(zhuǎn)number
1、parseInt(參數(shù))?? 取整
碰到第一個(gè)非數(shù)字的字符,停止轉(zhuǎn)換
如果第一個(gè)字符就是非數(shù)字的,結(jié)果為NaN
parseInt("123"); --> 123
parseInt("123ABC"); --> 123
parseInt("123.456"); -->123
parseInt("ABC123"); --> NaN
2、parseFloat(參數(shù))? 取小數(shù)
將字符串轉(zhuǎn)換為小數(shù)"15.36854"--->15.36854
3、彈出一個(gè)輸入框
var num = prompt("請(qǐng)輸入xxxx",0);
var num = prompt("請(qǐng)輸入xxxx",0);
2、函數(shù)
函數(shù)(function),也叫方法(method),或過程(procedure)
2.1、什么是函數(shù)
是一段被【預(yù)定義】好,并且可以被反復(fù)使用的代碼塊。
代碼塊:允許包含多條語句。
是一個(gè)獨(dú)立的功能體。
console.log();
alert(); --> alert("彈出內(nèi)容");
document.write();
parseInt(xxx);
parseFloat()
prompt()
2.2、定義函數(shù)
定義函數(shù)的過程:封裝
1、語法
關(guān)鍵字:function
function 函數(shù)名(){
//多條語句
}
定義一個(gè)函數(shù),功能為, 在控制臺(tái)上打印輸出 Hello World
3、調(diào)用函數(shù)
直接使用 函數(shù)名() 進(jìn)行調(diào)用
1、任何一個(gè)位置處
2、通過HTML元素事件來調(diào)用
4、參數(shù)
語法:function 函數(shù)名(參數(shù)列表){
參數(shù)列表:用,隔開的多個(gè)變量名(參數(shù)名)
}
function zhaZhiJi(fruit){
console.log("傳遞過來的水果是:" + fruit);
}
1、分支結(jié)構(gòu)
1、運(yùn)算符 - 比較運(yùn)算符
> , < , >= , <= , == , !=
>= : 3 >= 5 False
5 >= 5 True
== : 判斷等于,判斷兩個(gè)操作數(shù),是否相等,相等則為true,不等則為false
3 == 5 : False
3 == 3 : True
!= : 3 != 5 : True
"a" != "a" :False
以上運(yùn)算符的返回值 全部為 boolean 類型
3、程序的流程控制
程序=數(shù)據(jù)結(jié)構(gòu) + 算法;
數(shù)據(jù)結(jié)構(gòu):程序運(yùn)行中所需要的數(shù)據(jù)元素
算法:將要做的事情通過一系列的邏輯串起來
任何程序或算法都有結(jié)構(gòu):
1、順序結(jié)構(gòu)
代碼從頭到尾除注釋以外,按照出現(xiàn)的順序去執(zhí)行
2、選擇(分支)結(jié)構(gòu)
根據(jù)條件判斷哪一塊的程序要被執(zhí)行,哪一塊的程序不被執(zhí)行
3、循環(huán)結(jié)構(gòu)
根據(jù)條件判斷,反復(fù)的執(zhí)行某一段程序
4、if語句
滿足某個(gè)條件時(shí),執(zhí)行某些操作,不滿足則不執(zhí)行
語法:
if(條件){
//某些操作
}
當(dāng)條件結(jié)果為 true 時(shí),則執(zhí)行if語句塊中的語句
當(dāng)條件結(jié)果為 false時(shí),則不執(zhí)行if語句塊中的語句
一個(gè)條件一件事
if(){}
1、由比較運(yùn)算符 組成的表達(dá)式 稱為:條件表達(dá)式、邏輯表達(dá)式
2、if 條件中,如果不是boolean類型表達(dá)式,那么進(jìn)行隱式轉(zhuǎn)換
以下值中,都會(huì)默認(rèn)轉(zhuǎn)換為 false?
if(0){}
if(0.0){}
if(null){}
if(undefined){}
if(NaN){}
if(""){}
var a = prompt("請(qǐng)輸入一段話:");?? 小括號(hào)里面都是false
if(a){
//語句塊;
}
3、if 語句塊 {} 的問題
當(dāng)if語句塊中【只有一條語句】時(shí),{}可以省略
if(a){
console.log("Success !");
}
等價(jià)于
if(a)
console.log("Success!");
5、if - else結(jié)構(gòu)
語法:
if(條件){
語句塊1
}else{
語句塊2
}
判斷條件
如果條件的值為 true ,則執(zhí)行語句塊1
如果條件的值為 false,則執(zhí)行語句塊2
1、多重if結(jié)構(gòu)
在一套完整結(jié)構(gòu)中,允許判斷多個(gè)條件,最終,最多只能選擇一個(gè)條件去運(yùn)行
語法:
if(條件1){
語句塊1;
}else if(條件2){
語句塊2;
}else if(條件3){
語句塊3;
}else{
//以上條件都不滿足的時(shí)候,最終執(zhí)行的語句塊(此塊可選);
}
循環(huán)結(jié)構(gòu)的執(zhí)行步驟】
1、聲明循環(huán)變量;
2、判斷循環(huán)條件
3、執(zhí)行循環(huán)體操作
4、更新循環(huán)變量
然后循環(huán)執(zhí)行2-4,直到條件不成立時(shí),跳出循環(huán)。
while循環(huán)()中的表達(dá)式,運(yùn)算結(jié)果可以是各種類型,但是最終都會(huì)轉(zhuǎn)為真假,轉(zhuǎn)換規(guī)則同if結(jié)構(gòu):
var num = 1 ; //1、聲明循環(huán)變量;
while (num){ //2、判斷循環(huán)條件
document.write(num+"<br />");//3、執(zhí)行循環(huán)體操作
num++;//4、更新循環(huán)變量
}
while循環(huán)特點(diǎn):先判斷在執(zhí)行;
do-while循環(huán)特點(diǎn):先執(zhí)行,在判斷;即使初始條件不成立;do-while循環(huán)也至少執(zhí)行一次


【for循環(huán)】 ?1、for循環(huán)有三個(gè)表達(dá)式:① 聲明循環(huán)變量 ②判斷循環(huán)條件 ③ 更新循環(huán)變量; ? ? ? ? 三個(gè)表達(dá)式 用;分隔。 ? ? ? ? for循環(huán)三個(gè)表達(dá)式都可以省略,但是兩個(gè)缺一不可 ?2、for循環(huán)的執(zhí)行特點(diǎn)、先判斷、再執(zhí)行,與while相同。 ?3、for循環(huán)三個(gè)表達(dá)式都可以有多部分組成,第二部分多個(gè)判斷條件&& ||鏈接,第一三部分用逗號(hào)分隔。

↓打印結(jié)果

【循環(huán)控制語句】
1、break:跳出本層循環(huán),繼續(xù)執(zhí)行循環(huán)后面的語句。
如果循環(huán)有多層嵌套,則break只能跳出一層;
2、continue:跳過本次循環(huán)剩余的代碼,繼續(xù)執(zhí)行下一次循環(huán),
① 對(duì)于for循環(huán),contiune之后執(zhí)行的語句,是循環(huán)變量更新語句i++;
② 對(duì)于while、do-while循環(huán),contiune之后執(zhí)行的語句,是循環(huán)條件判斷;
因?yàn)?,使用這兩個(gè)循環(huán)時(shí),必須將contiune必須放到i++之后使用,否則contiune將跳過i++
導(dǎo)致死循環(huán);
