JavaScript基礎(chǔ)語法-dom-bom-js-es6新語法-jQuery-

JavaScript筆記:
alert():瀏覽器彈出警示框(輸出)
console.log():瀏覽器控制器打印輸出信息
prompt():瀏覽器彈出警示框,用戶可以輸入(輸入,取會的數(shù)值為字符串型)
break:退出
prompt輸入的是字符串
var 變量名=賦值 :聲明變量并賦值
聲明多個變量
var 變量名=賦值
變量名=賦值
變量名=賦值
聲明汴梁不賦值數(shù)值為空
變量由字母,數(shù)字,下劃線,美元符號組成
變量嚴格區(qū)分大小寫大小寫不同不為同一個變量
變量不能以數(shù)字開頭
變量不能是關(guān)鍵字和保留資
變量名必須要有意義
遵循駝峰命名法首字母小寫,后面單詞大寫
js的變量數(shù)據(jù)類型是只有程序在運行過程中,根據(jù)后面的值來確定變量類型
js是動態(tài)語言,變量的數(shù)據(jù)類型可以轉(zhuǎn)換
簡單數(shù)據(jù)類型:
整形:
數(shù)字前面加0是八進制
數(shù)字前面加0x是十六進制
Number:數(shù)字型 默認值:0 (里面包括整數(shù)和小數(shù))
iInfinity無窮大
-iInfinity無窮小
NaN:非數(shù)字的
isNaN:判斷是否是非數(shù)字,是數(shù)字返回false
不是數(shù)字返回true
boolean:布爾型 默認值:false
true當參與邏輯運算時當1使用
false當參與邏輯運算時當1使用
字符串
String:字符串行 默認值:""(必需要有"")
可以是''也可以是""
字符串嵌套:js可以用單引號嵌套雙引號
\n:換行符
\\:斜杠\
\':單引號‘
\":雙引號"
\t:tab縮進
\b:空格
Undefined:聲明了變量a沒有給值 默認值Undefined
Undefined和字符串相加結(jié)果為兩個字符串合并
Undefined和數(shù)字相加結(jié)果為NaN
Null:聲明了變量a的值為空值 默認值:null
Null和字符串相加結(jié)果為兩個字符串合并
Null和數(shù)字相加結(jié)果為數(shù)字本身
length:檢測字符串長度
多字符串之間可以用+號連接后面可以接任何類型
typeof:檢測變量值為什么類型
使用方法console.log(typeof 變量名)
數(shù)據(jù)類型轉(zhuǎn)換:
轉(zhuǎn)換為字符串型
toString()用法:
var 變量名=需要改變類型的變量名.toString();
string()用法:
console.log(String(變量名));
用+號實現(xiàn):
console.log(變量名+'')
轉(zhuǎn)化為數(shù)據(jù)型:
parseInt()用法:(只能取整數(shù))
console.log(parseInt(變量名));
parseFloat()用法:(可以取小數(shù))
console.log(parseFloat(變量名));
Number用法:
console.log(Number(變量名));
利用算數(shù)運算進行運算:
console.log(變量+數(shù)字 )
轉(zhuǎn)化為布爾型
Boolean()用法:
console.log(Boolean(變量))
代表空,否定的值會被轉(zhuǎn)換為false
例如:
0,NaN,null,Undefined
其他值轉(zhuǎn)換為true
標識符:
關(guān)鍵字:
js本身已近使用的字,不能充當變量名,方法名
保留子:
現(xiàn)在還不是關(guān)鍵字,但是未來可能會變成關(guān)鍵字
不能充當變量名,方法名
算數(shù)運算符:
+:進行加法運算
-:進行減法運算
*:進行乘法運算
/:進行除法運算
%:進行取余
浮點數(shù)在進行算數(shù)運算會出現(xiàn)問題
浮點數(shù)不能拿來比較是否相等
表達式:
由數(shù)字,運算符,變量組成的試子就是表達式
遞增遞減運算符:
遞增:++
遞減:--
可以放在變量前面或者后面
遞增和遞減必須配合變量使用
寫在前面先加1在返回數(shù)值
寫在后面先返回原值后自加11
單獨使用沒有區(qū)別
比較運算符:
>:大于
<:小于
>=:大于等于
<=:小于等于
==:等于(會吧字符串型的數(shù)據(jù)在轉(zhuǎn)換成數(shù)據(jù)型)
!=:不等于
=== !==:全等于要求值和數(shù)據(jù)類型都相同
邏輯運算符:
&&:簡稱與 and 有一個為假就是假,兩個都為真就是真
||:簡稱或 or 有一個為真結(jié)果為真
?。汉喎Q非 not 結(jié)果取反
邏輯中斷:
與中斷:
當由多個表達式時左邊表達式可以確定結(jié)果時,就不再舉行運算右邊的表達式
如果第一個表達式為真則返回第二個表達式
如果第一個表達式為假則返回第一個表達式
除了0以外其他的數(shù)字都為真
或中斷
如果第一個表達式為真則返回第一個表達式
如果第一個表達式為假則返回第二個表達式
賦值運算符:
=:賦值
+=,-=:加減一個數(shù)后在賦值
*=,/=,%=乘除取余后賦值
優(yōu)先級:
小括號(())>一元運算(++ -- !)>算數(shù)運算(先*/后+-)>關(guān)系運算(> < <= >=)>相等運算(== != === !==)>邏輯運算(先&&后||)>賦值運算(=)>逗號運算(,)
流程控制
順序結(jié)果:根據(jù)程序從上往下運行
分支流傳控制:根據(jù)不同的條件執(zhí)行不同的代碼
if:if(條件表達式){
執(zhí)行語句
}
判斷多個條件:ifelse
if(條件表達式){
執(zhí)行語句
}else{
執(zhí)行語句
}
多分枝語句if else if:
if(條件表達式){
??執(zhí)行語句
}else if((條件表達式)){
??執(zhí)行語句
}else{
??
執(zhí)行語句
}
三元表達式:
三元運算符:?:
語法結(jié)構(gòu):
條件表達式 ?表達式1 :表達式2
例子:
var num=10;
var result=num >5 ? '是的' :‘不是’
switch(表達式){
cese 選擇值:
執(zhí)行代碼;
break;
cese 選擇值:
執(zhí)行代碼;
?break;
cese 選擇值:
執(zhí)行代碼;
break;
default:
執(zhí)行代碼;
break;
}
swich會把表達式和case后的值相對比如果匹配就執(zhí)行相對于的語句,如果沒有匹配的值會直接跳到default里面執(zhí)行
表達式一般寫成變量名
表達式里面的值要和選擇值里面的數(shù)值要全等(數(shù)據(jù)類型和值都是一樣的)
代碼里面沒有break不會退出switch執(zhí)行后面的代碼
switch和ifelseif的區(qū)別:
固定值使用switch,ifelseif更靈活,適合使用范圍判斷
switch執(zhí)行效率更快,ifelseid語句執(zhí)行較慢
當分支少的時候用switc,分支多時用ifelseif
循環(huán)結(jié)構(gòu):
for循環(huán):
for(初始化變量;條件表達式;操作表達式){
//循環(huán)體
}
初始化變量就是用var聲明一普通的變量,通常用于作為計算器
條件表達式就是就是決定每一次循環(huán)是否執(zhí)行
操作表達式是每次循環(huán)后最后執(zhí)行的代碼,經(jīng)常用于我們計算器變量的更新
首先先執(zhí)行初始化變量(只執(zhí)行一次),然后執(zhí)行條件表達式,然后執(zhí)行循環(huán)體最后執(zhí)行操作表達式
for執(zhí)行不同代碼
while循環(huán):
while(條件){
循環(huán)體
}
里面應(yīng)該有操作表達式和計數(shù)器
do while循環(huán):
do{
循環(huán)體
}
while(條件)
do while先執(zhí)行在判斷
和while循環(huán)一樣需要操作表達式和計數(shù)器
如果是用來記數(shù)字或者是和計次數(shù)的三個循環(huán)基本相同,但是我們更喜歡用for
while和do..while可以做更復(fù)雜的判斷條件;
S跳出本次循環(huán),下一個循環(huán)還會執(zhí)行
break:退出循環(huán);
變量必須要有意義
變量用名詞
函數(shù)用動詞
將一組數(shù)據(jù)存儲在一個變量名下的優(yōu)雅方式
創(chuàng)建數(shù)組:
利用new創(chuàng)建變量
var 變量名 = new array ();
利用數(shù)組字面量創(chuàng)建數(shù)組(多用)
var 數(shù)組名=[];
數(shù)組里面的元素可以是任何類型
數(shù)組里面的元素要用逗號分開
訪問數(shù)組里面的數(shù)據(jù):
數(shù)組名[索引]
索引是由0開始的
當找不到這個索引是則會輸出Undefined:
遍歷數(shù)組:
就是把數(shù)組的元素從頭到尾訪問一遍
利用for循環(huán)來完成
獲取數(shù)組長度
數(shù)組名.length-1,變量值為0
新增數(shù)組元素,修改length的長度
數(shù)組名.length=數(shù)組數(shù)量
新增數(shù)組元素,修改l索引號
數(shù)組名[索引]=增加的數(shù)據(jù)
如果沒有就追加,有就是替換
不要直接給數(shù)組名賦值不然賦值會蓋掉里面的數(shù)值新的數(shù)組是由0開始的,依次遞增
數(shù)組冒泡排序:
冒號排序就是一次比較兩個變量,如果順序錯誤就交換過來
?var arr=[5,8,3,2,9];
??for(var i=0;i<=arr.length-1;i++){
?? for(var j=0;j<=arr.length-i-1;j++){
?? if(arr[j]>arr[j+1]){
?? var temp=arr[j];
?? arr[j]=arr[j+1];
?? arr[j+1]=temp;
函數(shù)就是被封裝了一段可以被重復(fù)執(zhí)行調(diào)用的代碼塊。
函數(shù)是用分為兩步聲明函數(shù)和調(diào)用函數(shù)
函數(shù)名通常用動詞
聲明函數(shù):
function 函數(shù)名(){
函數(shù)體
}
調(diào)用函數(shù):
調(diào)用函數(shù)要加小括號
函數(shù)名();
函數(shù)的參數(shù):
函數(shù)的參數(shù)分形參和實參
形參:
形參是用來接收實參的
function 函數(shù)名(形參1,形參2){
函數(shù)體
}
實參:
function 函數(shù)名(形參1,形參2){
函數(shù)體
}
函數(shù)名(實參1,實參2);
實參和形參的數(shù)量相同 則正常進行
如果實參的數(shù)量大于形參按順序執(zhí)行
如果實參的數(shù)量小于形參則沒有實參的形參是Undefined 相加為NaN;
盡量將實參和形參的數(shù)量匹配
return將函數(shù)返回給調(diào)用者;
return只能返回一個值,當有兩個值則返回后面的值
當需要返回多個值可以使用數(shù)組返回
函數(shù)沒有return則返回Undefined
return不僅可以結(jié)束循環(huán)還可以結(jié)束函數(shù)
arguments對象中儲存了所有存貯過來的實參
arguments是以偽數(shù)組的方式展示的,他可以使用length來查詢長度,他的儲存方法是和數(shù)組一樣的通過索引進行儲存
但是他無法使用真正數(shù)組的一下方法比如pop() plsh()
他可以通過數(shù)組的遍歷把里面的數(shù)值提取出來
在函數(shù)體里面直接調(diào)用另一個函數(shù)就可以直接調(diào)用
函數(shù)的兩種申明方式
1.利用函數(shù)關(guān)鍵字自定義函數(shù)(命名函數(shù))
function 函數(shù)名(){
函數(shù)體
}函數(shù)名()
2.函數(shù)表達式(yimin)
var 變量名=function(){
}變量名()
函數(shù)表達式的方法聲明函數(shù),用的的變量名不是函數(shù)名
函數(shù)表達式聲明跟聲明變量差不多,只不過變量里面的是數(shù)值,函數(shù)表達式里面是函數(shù)
函數(shù)表達式也可以進行傳遞參數(shù)
js的作用域就是代碼名字在某個范圍內(nèi)起作用的效果
目的是為了提高程序的可靠性更重要的是減少命名沖突
全局作用域:
在script標簽里面的就是全局作用域
局部作用域(函數(shù)作用域):
在函數(shù)內(nèi)部就是局部作用域,這個代碼只能在函數(shù)內(nèi)起作用
變量作用域分為全局變量和局部變量
全局變量:
在全局作用域下的變量,在全局都可使用
局部變量:
在局部作用域下的變量或者在函數(shù)內(nèi)部的變量只有函數(shù)內(nèi)才能使用
在函數(shù)內(nèi)部沒有聲明就直接賦值的變量,屬于全局變量可以直接調(diào)用
函數(shù)的形參也屬于局部變量
從執(zhí)行效率上來講
全局變量只有完全關(guān)閉瀏覽器完全關(guān)閉才會銷毀,比較占內(nèi)存
局部變量執(zhí)行完以后就會銷毀,相對于全局變量更節(jié)省空間
js只有es6的時候才有塊級作用域
塊級作用域就是{}里面的代碼就是塊級作用域,花括號外邊的代碼無法調(diào)用花括號里面的代碼
作用域鏈就是內(nèi)部函數(shù)訪問外部函數(shù)的變量,采用的是鏈式查找的方式來決定取那個值,就是根據(jù)就近原則來選擇變量值
js引擎運行js分兩步先預(yù)解析在進行代碼執(zhí)行
預(yù)解析:js引擎會把js里面所有var還有function提升到當前作用域的最前面
代碼執(zhí)行:按照代碼書寫順序從上往下執(zhí)行
與解析分為變量預(yù)解析(變量提升)和函數(shù)預(yù)解析(函數(shù)提升)
變量提升就是把所有變量聲明搭配當前的作用域最前面,不提升賦值操作,只提升了聲明
例如:console.log(mun)
var m=num=10;
相當于執(zhí)行了:var=num;
console.log(mun)
num=10;
函數(shù)表達式聲明變量應(yīng)將調(diào)用寫在函數(shù)后面
利用函數(shù)關(guān)鍵字聲明變量則沒有影響
創(chuàng)建對象的三種方式
方法一利用字面量創(chuàng)建對象:
就是花括號{}里面包含了表達這個具體事物(對象)的屬性和方法
創(chuàng)建方法 var 對象名= {};
里面的屬性方法用逗號隔開
例如:
var obj={
uname:‘張三’,
age:18,
sex:男,
}
里面的屬性或方法采用的是鍵值對的形式,鍵:屬性名,值:屬性值
使用方法后面跟的是一個函數(shù)
使用對象:
調(diào)用對象屬性的兩種方法: 對象名.屬性名
對象名['屬性名']
第二種方法調(diào)用屬性要加單引號
調(diào)用對象的方法: 對象名.方法名()
必須要有后面的括號
方法二:利用new Object()創(chuàng)建函數(shù)
var 方法名= new object();
方法名.uname=‘張三’;
方法名. age=18;
方法名.sex=男;
這個方法是利用等號賦值的方法添加對象屬性和方法分
每個屬性結(jié)尾都有;分號結(jié)尾
創(chuàng)建時Objecta首字母需要大寫
創(chuàng)建方屬性和方法前面都需要加方法名
方法三:利用構(gòu)造函數(shù)創(chuàng)建對象
前面的方法一次只能創(chuàng)建一個對象,使用構(gòu)造函數(shù)可以一次創(chuàng)建多個方法
function 構(gòu)造函數(shù)名(){
this.屬性名=值
this.方法名= function(){
}
}
調(diào)用方法:
new 構(gòu)造函數(shù)名();
調(diào)用方法的時候前面要有new 構(gòu)造函數(shù)名()
對象名.方法名()
構(gòu)造函數(shù)名首字母需要大寫
屬性和方法前面加this
構(gòu)造函數(shù)不需要return就可以返回結(jié)果
調(diào)用夠著函數(shù)必須使用new
只要調(diào)用的new 構(gòu)造函數(shù)名()都會自己生成一個對象
構(gòu)造函數(shù)泛指某一個大類,而對象指一個具體的事物 ,
變量和屬性的相同點:
他們都是用來儲存數(shù)據(jù)的
變量和屬性的不同點:
變量需要單獨聲明并賦值,使用時直接寫變量名,單獨存在
屬性在對象里面,不需要聲明,調(diào)用的時候使用時
對象名.屬性名
函數(shù)和方法的相同點:都是實現(xiàn)某些功能做某些事
函數(shù)和方法的不同點:
函數(shù)時單獨聲明,并且調(diào)用,是單獨存在的
方法在對象里面
new的執(zhí)行過程:
new 構(gòu)造函數(shù)可以在內(nèi)存里面創(chuàng)建一個空的對象
this 就會指向剛剛創(chuàng)建的空對象
執(zhí)行構(gòu)造函數(shù)的代碼,給這個對象添加屬性和方法
返回這個空的對象
for.....in循環(huán):
for (變量 in 對象){
}
輸出變量輸出的屬性名,輸出對象名[變量]輸出的屬性值
js中的對象分三種:自定義對象,內(nèi)置對象,瀏覽器對象
內(nèi)置對象就是js語言自帶的對象,提供一些常用的或者基本而必要的功能
mdn,w3c
查閱該方法的作用
查看里面參數(shù)的意義和類型
查看返回值的意義和類型
自己動手試試
Math對象:
它不是一個構(gòu)造函數(shù)
常用的屬性,不需要new來調(diào)用,可以直接使用里面的屬性和方法
Math.PI():求圓周率
Math.floor():向下取整,往小取值
Math.ceil():向上取整,往大取值
Math.round():四舍五入就近取整
負數(shù)除了.5其他的都正常,只取大的
Math.abs():絕對值
Math.max/Math,min():求最大值最小值
會自動把數(shù)字字符串轉(zhuǎn)換為數(shù)字
Math.random() :返回一個隨機的小數(shù),這個方法里面不跟參數(shù)
他只能取到大于等于0小于1不能取到1
我們想要取到兩個數(shù)之間的隨機整數(shù)并能取到兩個整數(shù)的公式:
function grty(min,max){
return Math.floor(Math.random()*(max-min+1))+min;
}
console.log(grty(1,10));
Date():日期對象是一個構(gòu)造函數(shù),必須使用new來創(chuàng)建日期對象
如果沒有參數(shù)返回系統(tǒng)當前時間
參數(shù)的寫法:
數(shù)字型:var 變量名=new Date(2019,1,1)
字符型:var 變量名=new Date(’2019-8-9 8:8:8)
數(shù)字型用逗號隔開,字符串日期用-隔開,時間用:隔開
數(shù)字型返回的1值要比實際輸入的大
Date.getFullYear():獲得當年
Date.gateMonth()獲得當月(從0開始沒有12,比正常少一個月,使用時要+1)
Date.getDate():獲得當
天日期
Date.getDay():獲取星期記(周日0到周六6)
Date.getHours():獲得當前小時
Date.getMinutes():獲取當前分鐘
Date.getSeconds():獲取當前秒鐘
用函數(shù)封裝一個可以返回當前時間的時分秒
date對象是基于1370年一月一日起的毫秒數(shù)
獲得date總的毫秒數(shù)(時間戳)
1.通過valueof()獲?。?/p>
var date =new date();
console.log(date.valueof());
2.通過getTime()獲取
var date =new date();
console.log(date.getTime());
3.簡單的寫法(常用)
var date = +new Date()
cnosole.log(date1)
4.h5新增加的
console.log(Date.now());
毫秒數(shù)不會重復(fù)
用Array創(chuàng)建數(shù)組
var arr=new Array();
(里面一個數(shù)代表數(shù)組長度,立馬輸入大于1個時輸入的為數(shù)值)
檢查是否為數(shù)組的方法1:
instanceof 運算符 可以檢測是否為數(shù)組使用方法為
console.log(數(shù)組名或者其他變量等 instanceof Array)
實例:
function reverse(arr){
if(arr instanceof Array){
var newArr=[];
for(var i=arr.length-1;i>=0;i--){
newArr[newArr.length]=arr[i];
}
return newArr;
}else{
return '這個參數(shù)不是數(shù)組格式';
}
}
console.log(reverse([1,2,3]));
console.log(reverse(1,2,3));
方法2: Array.isArray方法
Array.isArray是優(yōu)先于instanceof
用法:Array.isArray(檢測值)
1.數(shù)組名,push:從末尾添加一個數(shù)組值
使用方法:數(shù)組名.push(需要添加的值)
可以添加不止一個
push完畢后會返回數(shù)值,返回的是新數(shù)組的長度
2.數(shù)組名.unshift:在數(shù)組的前面添加一個數(shù)組值
使用方法:數(shù)組名.unshift(需要添加的值)
可以添加不止一個
unshift完畢后會返回數(shù)值,返回的是新數(shù)組的長度
1數(shù)組名.pop() 可以刪除數(shù)組最后一個數(shù)組值
使用方法:數(shù)組名.pop()
里面沒有參數(shù);
pop完畢后會返回數(shù)值,返回的是你刪掉的數(shù)組值
2數(shù)組名.shift() 可以刪除第一個數(shù)組值
使用方法:數(shù)組名.shift()
里面沒有參數(shù);
shift完畢后會返回數(shù)值,返回的是你刪掉的數(shù)組值
1.reverse:翻轉(zhuǎn)數(shù)組
用法:數(shù)組名.reverse()
2.sort:冒號排序
用法: 數(shù)組名.sort(funcation(a,b){
return a-b(升序)
或者return b-a(降序)
})
1.indexof:返回數(shù)組元素索引
用法:數(shù)組名.indexof(數(shù)組元素名)
只返回第一個滿足條件的索引號
當沒有找到元素是則返回-1
從前面開始獲取元素
2.lastIndexof:返回數(shù)組元素索引
用法:數(shù)組名.lastIndexof(數(shù)組元素名)
只返回第一個滿足條件的索引號
當沒有找到元素是則返回-1
從后面開始獲取元素
1.toString:將數(shù)組轉(zhuǎn)換為字符串
用法:數(shù)組名.toString()
2.join:將數(shù)組轉(zhuǎn)換為字符串,可以添加分隔符
用法:數(shù)組名.join(分隔符)
括號內(nèi)不填默認為逗號