一掖棉、簡單了解和基礎(chǔ)知識
1.js引入方式
第一種:直接在body標(biāo)簽下面引入js文件或者直接在下面寫js代碼飘言;
第二種:直接在body標(biāo)簽里面引入js文件或者直接在里面寫js代碼;
第三種:直接在head標(biāo)簽里面引入js文件或者直接在里面寫js代碼;但是因為代碼的執(zhí)行順序是從上到下的颓屑,避免js代碼最先被執(zhí)行仗岸,所以要在script標(biāo)簽里面加上window.onload=function(){},在這個里面寫入代碼。
2.js注釋
單行注釋的雙斜杠//
多行注釋/****/
注釋的作用:節(jié)約交流和閱讀成本
3.用于代碼調(diào)試
console.log()和alert()都可以用于調(diào)試代碼奕删,但是alert會阻斷線程的執(zhí)行俺泣,所以不經(jīng)常使用。
document.write()如果文檔輸出寫在當(dāng)前頁面加載完畢之后完残,那么當(dāng)前頁面會被關(guān)閉伏钠,會新開一個頁面輸出信息。
4.js變量的命名規(guī)范
什么是變量谨设?什么是常量(直接量)贝润?
程序運行期間可以發(fā)生改變的量就是變量。
自始至終在程序的運行過程中不能改變的量就是常量铝宵。常量放在常量區(qū)打掘,常量區(qū)的值有且只有一份,所以不能改變鹏秋。
變量的命名規(guī)范:
①以數(shù)字尊蚁、字母、下劃線侣夷、$符組成横朋,并且數(shù)字不能開頭。
②不能以關(guān)鍵字或者保留字命名百拓。
③見名知義琴锭,駝峰命名法。
④區(qū)分大小寫衙传。
⑤區(qū)別于c語言决帖,變量名可以重復(fù)命名,但是后面的會覆蓋前面的蓖捶。
聲明一個變量為空地回,有空間沒有值 ? ?var ?num=null;
聲明一個未定義的變量,沒有值沒有空間 ? ?var num1;
5.js數(shù)據(jù)類型
number ? string ? object ?undefined ?boolean
類型轉(zhuǎn)換有兩種:顯式類型轉(zhuǎn)換(強類型轉(zhuǎn)換) ? ? ? ?隱式類型轉(zhuǎn)換(弱類型轉(zhuǎn)換)
顯式類型轉(zhuǎn)換(強類型轉(zhuǎn)換)的例子:
String()可以將一個數(shù)值轉(zhuǎn)換為字符串
var ? a=123;
console.log(String(a),typeof ?String(a));//123,string
Number()可以將字符串轉(zhuǎn)換為數(shù)值類型刻像,要么字符串全是數(shù)字畅买,要么字符串?dāng)?shù)字加一個小數(shù)點,小數(shù)點只能有一個细睡,如果有多個谷羞,轉(zhuǎn)換后的結(jié)果是NaN,但是還是number類型溜徙。如果字符串里面包含了字母湃缎,并不是全數(shù)字,那么轉(zhuǎn)換后的就不是數(shù)字萌京,而是NaN雁歌,但是還是number類型。
var ? str="123";
console.log(Number(str),typeofNumber(str));//123,number
var ?str1="123abc";//有字母轉(zhuǎn)換不了
console.log(Number(str1),typeofNumber(str1));//NaN,number
parseInt將字符串轉(zhuǎn)換成整型數(shù)字知残。必須滿足第一個字符為數(shù)字靠瞎,將從第一個字符取到第一個不是數(shù)字的字符為止。
var ?str3="12.3abc";
console.log(parseInt(str3));
與parseInt對應(yīng)的是parseFloat取得浮點型
隱式類型轉(zhuǎn)換(弱類型轉(zhuǎn)換)的例子:
運算符重載:+號會根據(jù)式子兩邊式子的類型采取行為求妹,如果兩邊是數(shù)值乏盐,相加,如果兩邊是字符串制恍,拼接父能,如果一邊是數(shù)值一邊是字符串也是拼接。
取正操作:將數(shù)字字符串净神,轉(zhuǎn)換成數(shù)值何吝,必須保證全部為數(shù)字字符,否則將不起作用
var ?num2="12";
console.log(typeof ?+num2);
純數(shù)字的字符串減0鹃唯,也可以得到數(shù)字
var ? a="12";
console.log(typeof ?a-0);
隱式類型轉(zhuǎn)換爱榕,先轉(zhuǎn)換再運算:
var ? a="12";
var ? b="10";
alert(a-b); ?//7
var ? a=5,b="5";
alert(a==b);//true
alert(a===b);//false ? ? ? === 就是不轉(zhuǎn)換類型,直接比較
6.js運算符
js是弱類型語言坡慌,只有數(shù)值類型黔酥,沒有分浮點型和整型之分。
算術(shù)運算符 +洪橘,—跪者,*,/,%,++,--
復(fù)合運算符 +=熄求,-=渣玲,/=,*=,%=
關(guān)系運算符 ?> ? ?< ? ?<= ? ? >= ? ? === ? ?== ? ?!= ? ? ?!== ? ? ? ? ?!=和==對立,!==和===對立
邏輯運算符? ? 邏輯與&&? ? ? 邏輯或 || ? ? ? ? ? 邏輯非 !取反
三目運算符抡四,也叫條件運算符:var a=表達式1柜蜈?表達式2:表達式3仗谆;
如果表達式1結(jié)果為真指巡,a結(jié)果為表達式2的值淑履,如果表達式1結(jié)果為假,a結(jié)果為表達式3的值藻雪。相當(dāng)于if else語句
邏輯與 && 鏈接的表達式秘噪。如果前面的表達式為真,整體的值勉耀,與最后一個表達式有密切的關(guān)系指煎。如果最后一個表達式有算術(shù)表達式鏈接,就是一個具體的數(shù)值便斥。如果最后一個表達式由關(guān)系運算符鏈接至壤,就是true或者false。如果最后一個表達式是0枢纠,就是0像街。一假則假,前面為假,后面就不走了晋渺。
邏輯或 ? ? ? ? 同假為假 ? ? ? ? ?一真即真
只要是用關(guān)系運算符鏈接的表達式镰绎,返回的值類型都是boolean值
==只需要滿足值相等就為真,不判斷類型木西,還有一種理解就是畴栖,== 先轉(zhuǎn)換類型,然后比較
var ? ? ? ?istrue=(3=="3");//true
var ? ? ? ? ?istrue=(3!="3");//false?
===數(shù)值和類型都相等才為真八千,不僅數(shù)值要相等吗讶,類型也要相同,=== 不轉(zhuǎn)換類型恋捆,直接比較
var ? ? ? ? istrue=(3==="3");//false
var ? ? ? ? istrue=(3!=="3");//true
num++, ?num+=1, ? num=num+1
++在前先++再賦值照皆,++在后先賦值再++
先賦值再運算(i++就是i=i+1)
var ? ?b1=11;
b2=b1++;//先把b1的值賦給b2,b1在加1
console.log("b2的值是"+b2,"b1的值是"+b1)//11 ? ?12
var ? c1=11;
c2=++c1;//c1先加1鸠信,再賦值給c2+
console.log("c2的值是"+c2,"c1的值是"+c1)//12 ? 12
賦值運算符“=”,將等號右邊的值 賦值 給左邊
多個打印內(nèi)容區(qū)分時纵寝,以逗號隔開
可以單獨打印變量或者常量的值,逗號隔開
可以打印格式化字符串星立,中間使用占位符%d %f %s ,帶占位符的打印爽茴,帶占位符的要放在第一個
7.js元素獲取
1.通過ID名稱獲取,因為ID名不能重復(fù)绰垂,所以獲取的元素唯一
var ? ?div=document.getElementById("myDiv");
2.通過標(biāo)簽名稱獲取元素室奏,得到的是一個數(shù)組(就算只有一個值,也是一個數(shù)組)劲装。如果想要將數(shù)組中的其中某一個取出來胧沫,必須需要用到數(shù)組下標(biāo)昌简。數(shù)組下標(biāo)從0 開始,最大是數(shù)組長度減一绒怨。
var ? ?first=document.getElementsByTagName("div")[0];
3.通過行間屬性name獲取元素纯赎,得到的也是一個數(shù)組
var ? ?secondbtn=document.getElementsByName("btn")[1];
4.通過標(biāo)簽的類名獲取元素。獲取到得也是一個數(shù)組
var ? ?p=document.getElementsByClassName("text")[1];
5.通過元素的css選擇器獲取元素南蹂,選擇器的名稱一定要寫全犬金,并且css選擇器名稱都可以寫在里面,如果獲取到多個元素六剥,只會選取第一個晚顷。
var ? ?myDiv=document.querySelector("#myDiv");
6.通過元素的css選擇器名稱獲取元素,但是獲取的是一個數(shù)組,使用的時候需要加下標(biāo)
var ? ?myDiv3=document.querySelectorAll(".test")[0];
8.通過js給元素加類名
給元素加類名后疗疟,類名相當(dāng)于重新賦值该默,所以會覆蓋原來的類名,要想原來的類名也起作用策彤,就要把原來的類名也寫上栓袖。多個類名中間用空格隔開
myDiv.className="test text";
使用animate.css,就是采用添加類名的方法
在head里面引入文件
<link ? rel="stylesheet" ? ?type="text/css" ? ? ?href="css/animate.css"/>
在script里面加類名
var ? div=document.getElementsByTagName("div")[0];
div.onmouseover=function(){
this.className="animated shake"
//this.style.animation="shake 2s";
}
div.onmouseout=function(){
//this.style.animation="bounce 2s";
this.className="animated bounce";
}
9.事件綁定
1.點擊事件
div.onclick=function(){
alert("hahaha!");
}
2.鼠標(biāo)移入事件
div.onmouseover=function(){
//this永遠指向所在函數(shù)的所有者锅锨,如果沒有所有者時指向window
this.style.width="800px";
}
3.鼠標(biāo)移除事件
div.onmouseout=function(){
this.style.height="400px";
}
4.window.onload事件叽赊,load事件: 當(dāng)頁面完全加載后再window上面觸發(fā).一般用于head中的script代碼段.保證在執(zhí)行js代碼之前, 頁面已經(jīng)完全加載完畢.如果沒有在頁面加載完畢,將獲取不到元素必搞。
UI事件指的是那些不一定與用戶操作有關(guān)的事件.
二必指、js分支結(jié)構(gòu)
1.布爾類型
布爾類型,代表非真即假的一種數(shù)據(jù)類型恕洲。它的值只有兩個塔橡,true真或false假。非0即為真霜第。0是假的葛家,字符串“0”是真的∶诶啵空為假癞谒,null是假
布爾類型的命名規(guī)則:
習(xí)慣以is,has刃榨,can開頭? 例如:isTrue isBoy isHight isLoading hasMoney hasBoyFriend canFly ? ?canEat
2.js分支語句
分支語句其實有兩種弹砚,if語句,switch語句
if語句有三種形式:
第一種:if(條件表達式){語句}枢希,當(dāng)條件表達式為真時執(zhí)行語句桌吃,否則什么都不執(zhí)行
第二種:if(條件表達式){語句一}else{語句二},當(dāng)條件表達式為真時執(zhí)行語句一苞轿,否則為假執(zhí)行語句二
第三種:if語句集聯(lián)式茅诱,if(條件表達式1){語句一}else if(條件表達式2){語句二}else{語句三}逗物。當(dāng)條件表達式1為真執(zhí)行語句一,當(dāng)條件表達式1為假瑟俭,并且條件表達式2為真翎卓,執(zhí)行語句二,否則執(zhí)行語句三
如果是比較字符串之間的大小尔当,就先從第一位開始比較莲祸,第一位最大的就是最大的
所以如果獲取的值是字符串蹂安,要轉(zhuǎn)換成數(shù)字
使用switch通常用來解決多分支椭迎,并且多分支的情況是值是確定的。case 里面的值是具體的田盈。
var ? ? ?num=10;
switch(num){
case ? ?10:
alert(num);
//break;
case ? ?0://如果第一個滿足條件畜号,沒有break,就會接著執(zhí)行第二個允瞧,
//并且不需要進行判斷简软,只到找到break再終止
alert("哈哈哈");
break;
default:
alert("呵呵呵");
break;
}
var ? n=8;
switch(n){
case8:
case9:
case10:
case11:
alert(num);
break;
default:
alert("呵呵呵");
break;
}
三、js循環(huán)結(jié)構(gòu)
什么是循環(huán)述暂?當(dāng)滿足特定時痹升,反復(fù)執(zhí)行同一段代碼就是循環(huán)。
for循環(huán) ? while循環(huán) ? ?do..while循環(huán)
循環(huán)必不可少的四部分:
1.循環(huán)變量初始化畦韭;2.循環(huán)條件疼蛾;3.循環(huán)增量;4.循環(huán)執(zhí)行的語句
1.while循環(huán)
while(條件表達式){循環(huán)語句}? ? 當(dāng)條件滿足表達式的時候艺配,反復(fù)執(zhí)行語句察郁,直到條件表達式為假跳出循環(huán)
var ?a=1;
while(a<101){
if((7!=a%10)&&(0!=a%7)&&(7!=parseInt(a/10))) {
console.log(a);
}
a++;
}
2.do..while..循環(huán)
do{循環(huán)語句}while(條件表達式)
先執(zhí)行語句,再判斷是否滿足循環(huán)條件转唉,如果滿足繼續(xù)循環(huán)皮钠,否則跳出循環(huán)
var ?num=1;
do{
if(num%7==0) {
console.log(num);
}
num++;
}while(num<101);
while循環(huán)與do..while..循環(huán)的區(qū)別在于,while循環(huán)先判斷再執(zhí)行赠法,可能出現(xiàn)一次都不執(zhí)行的情況麦轰,do..while..循環(huán)先執(zhí)行再判斷,至少會執(zhí)行一次
3.for循環(huán)
for (循環(huán)變量初始化砖织;循環(huán)條件款侵;循環(huán)增量) {循環(huán)語句}
通過判斷循環(huán)條件是否成立,決定是否執(zhí)行循環(huán)語句镶苞。
for循環(huán)的執(zhí)行次數(shù)為:不滿足條件的第一個值減去滿足條件的第一個值除以循環(huán)增量
for(var ? i=1;i<101;i++) {
if(i%7==0) {
console.log(i);
}
}
for循環(huán)與數(shù)組的聯(lián)合使用非常方便喳坠。
數(shù)組有容量,數(shù)組還有下標(biāo)茂蚓,這兩個一個作為循環(huán)條件壕鹉,一個作為循環(huán)變量
for循環(huán)用于知道循環(huán)次數(shù)的情況
while循環(huán)用于只知道循環(huán)條件的情況剃幌,未知循環(huán)次數(shù)的情況
do...while循環(huán)不常用
4.js循環(huán)控制
continue跳出本次循環(huán),循環(huán)繼續(xù)
break結(jié)束本層循環(huán)晾浴,循環(huán)終止
var ? sum=0;
for(var ? i=1; i<101; i++) {
if(i%2==0) {
continue;
}
sum+=i;
}
console.log(sum);
for(var ? ?i=1; i<101; i++) {
console.log(i);
if(i%13==0) {
break;
}
}