一、語言
1烁登、 語言的發(fā)展:
- 紙帶機:機器語言职烧;
- 匯編語言:符號語言;
- 現(xiàn)代語言:高級語言
2防泵、起源
JavaScript誕生于1995年蚀之,它的出現(xiàn)主要是用于處理網頁中的前端驗證,所謂的前端驗證捷泞,就是指檢查用戶輸入的內容是否符合一定的規(guī)則
3足删、JavaScript構成
- ECMAScript(JS的標準名命名)
- DOM
- BOM
4、特點
- 解釋型語言
- 類似于 C 和 Java 的語法結構
- 動態(tài)語言
- 基于原型的面向對象
二锁右、基本語法
1失受、編寫位置
JS代碼需要編寫到<script>標簽中,一般將script標簽寫到head中(和style標簽有點像)
- 屬性:type:默認值text/javascript可以不寫咏瑟,不寫也是這個值
- src:當需要引入一個外部的js文件時拂到,使用該屬性指向文件的地址
- 可以將js代碼編寫到外部js文件中,然后通過script標簽引入,寫到外部文件中可以在不同的頁面中同時引用码泞,也可以利用到瀏覽器的緩存機制,推薦方式
- 如果一個script引入了外部的js代碼兄旬,那么這個script就不能再寫js代碼,必須新建一個script
<script type="text/javascript" src="js/script.js"></script>
<script type="text/javascript">
alert("寧姐,你真漂亮S嗔取领铐!");/*控制瀏覽器彈出一個警告框*/
document.write("看我出不出來~~~");/*讓計算機在頁面中輸出一個內容*/
console.log("Hello World");/*向控制臺輸出一個內容*/
</script>
可以將js代碼編寫到標簽的onclick屬性中,當我們點擊按鈕時宋舷,js代碼才會執(zhí)行绪撵;
可以將js代碼寫在超鏈接的href屬性中,這樣當點擊超鏈接時祝蝠,會執(zhí)行js代碼
2音诈、基本語法
注釋
多行注釋:"/* 注釋內容 */"
單行注釋://注釋內容嚴格區(qū)分大小寫
JS中每一條語句以分號(;)結尾:如果不寫分號,瀏覽器會自動添加绎狭,但是會消耗一些系統(tǒng)資源细溅,而且有些時候,瀏覽器會加錯分號坟岔,所以在開發(fā)中分號必須寫
JS中會忽略多個空格和換行谒兄,所以我們可以利用空格和換行對代碼進行格式化
字面量(常量)和變量
字面量(常量),都是一些不可改變的值社付,比如 :1 2 3 4 5 "hello"承疲,字面量都是可以直接使用邻耕,但是我們一般都不會直接使用字面量
變量,變量的作用是給某一個值或對象標注名稱燕鸽,可以用來保存字面量兄世,而且變量的值是可以任意改變的,變量更加方便我們使用啊研,所以在開發(fā)中都是通過變量去保存一個字面量御滩,而很少直接使用字面量聲明變量
在js中使用var關鍵字來聲明一個變量,然后為變量賦值党远,也可以聲明和賦值同時進行
var a;
a = 123;
var b = 789;
-
標識符
在JS中所有的可以由我們自主命名的都可以稱為是標識符削解,例如:變量名、函數(shù)名沟娱、屬性名都屬于標識符氛驮;
命名一個標識符時需要遵守如下的規(guī)則:
1.標識符中可以含有字母、數(shù)字济似、_矫废、$
2.標識符不能以數(shù)字開頭
3.標識符不能是ES中的關鍵字或保留字
4.標識符一般都采用駝峰命名法(首字母小寫,每個單詞的開頭字母大寫砰蠢,其余字母小寫蓖扑,比如:helloWorld xxxYyyZzz)
JS底層保存標識符時實際上是采用的Unicode編碼,所以理論上講台舱,所有的utf-8中含有的內容都可以作為標識符
三律杠、數(shù)據(jù)類型
數(shù)據(jù)類型指的就是字面量的類型,在JS中一共有六種數(shù)據(jù)類型:
String 字符串(基本數(shù)據(jù)類型)
Number 數(shù)值(基本數(shù)據(jù)類型)
Boolean 布爾值(基本數(shù)據(jù)類型)
Null 空值(基本數(shù)據(jù)類型)
Undefined 未定義(基本數(shù)據(jù)類型)
Object 對象(引用數(shù)據(jù)類型)
1柿赊、string字符串
- 在JS中字符串需要使用引號引起俩功;
- 使用雙引號或單引號都可以,但是不要混著用碰声;
- 引號不能嵌套,雙引號不能放雙引號熬甫,單引號不能放單引號
- 在字符串中我們可以使用\作為轉義字符胰挑,當表示一些特殊符號時可以使用\進行轉義
\" 表示 "
\' 表示 '
\n 表示換行
\\ 表示\
\t 制表符
2、number數(shù)值類型
- 在JS中所有的數(shù)值都是Number類型椿肩,包括整數(shù)和浮點數(shù)(小數(shù))
- JS中可以表示的數(shù)字的最大值:Number.MAX_VALUE:1.7976931348623157e+308瞻颂;大于0的最小值:Number.MIN_VALUE:5e-324
- 如果使用Number表示的數(shù)字超過了最大值,則會返回一個:Infinity 表示正無窮郑象;Infinity 表示負無窮贡这,使用typeof檢查Infinity也會返回number
- NaN 是一個特殊的數(shù)字,表示Not A Number厂榛,使用typeof檢查一個NaN也會返回number
- 在JS中整數(shù)的運算基本可以保證精確盖矫,如果使用JS進行浮點運算丽惭,可能得到一個不精確的結果,所以千萬不要使用JS進行對精確度要求比較高的運算
3辈双、Boolean布爾值
- 布爾值只有兩個责掏,主要用來做邏輯判斷:
- true:- 表示真;
false:- 表示假 - 使用typeof檢查一個布爾值時湃望,會返回boolean
4换衬、Null和Undefined
Null(空值)類型的值只有一個,就是null证芭,null這個值專門用來表示一個為空的對象瞳浦;
Undefined(未定義)類型的值只有一個,就undefind废士,當聲明一個變量术幔,但是并不給變量賦值時,它的值就是undefined
5湃密、type運算符
使用typeof操作符可以用來檢查一個變量的數(shù)據(jù)類型诅挑,語法:typeof 數(shù)據(jù)
- 返回結果:
typeof 數(shù)值 number
typeof 字符串 string
typeof 布爾型 boolean
typeof undefined undefined
typeof null object
6、數(shù)值的轉換
指將一個數(shù)據(jù)類型強制轉換為其他的數(shù)據(jù)類型泛源,
類型轉換主要指拔妥,將其他的數(shù)據(jù)類型,轉換為String达箍,Number没龙,Boolean
轉換為string
1移必、調用被轉換數(shù)據(jù)類型的toString()方法聊训,該方法不會影響到原變量彤悔,它會將轉換的結果返回乡翅,但是注意:null和undefined這兩個值沒有toString()方法腿椎,如果調用他們的方法瞬浓,會報錯
2旋讹、調用String()函數(shù)序厉,并將被轉換的數(shù)據(jù)作為參數(shù)傳遞給函數(shù)邻辉,使用String()函數(shù)做強制類型轉換時溪王,對于Number和Boolean實際上就是調用的toString()方法,但是對于null和undefined值骇,就不會調用toString()方法莹菱,它會將 null 直接轉換為 "null",
3吱瘩、調用xxx的yyy()方法道伟,就是xxx.yyy()轉換為Number
使用Number()函數(shù)
1、字符串 --> 數(shù)字: 如果是純數(shù)字的字符串使碾,則直接將其轉換為數(shù)字蜜徽;如果字符串中有非數(shù)字的內容祝懂,則轉換為NaN;如果字符串是一個空串或者是一個全是空格的字符串娜汁,則轉換為0
2嫂易、布爾 --> 數(shù)字: true 轉成 1;false 轉成 0
3掐禁、null --> 數(shù)字 0
4怜械、undefined --> 數(shù)字 NaN
5、這種方式專門用來對付字符串:parseInt() 把一個字符串轉換為一個整數(shù)傅事;parseFloat() 把一個字符串轉換為一個浮點數(shù)缕允,如果對非String使用parseInt()或parseFloat(),它會先將其轉換為String然后在操作蹭越,
6障本、其他進制的數(shù)字:在js中,如果需要表示16進制的數(shù)字响鹃,則需要以0x開頭驾霜;如果需要表示8進制的數(shù)字,則需要以0開頭买置;如果要要表示2進制的數(shù)字粪糙,則需要以0b開頭,但是不是所有的瀏覽器都支持忿项,可以在parseInt()中傳遞一個第二個參數(shù)蓉冈,來指定數(shù)字的進制轉換為Boolean
使用Boolean()函數(shù)
1、數(shù)字 ---> 布爾:除了0和NaN轩触,其余的都是true
2寞酿、字符串 ---> 布爾:除了空串,其余的都是true
3脱柱、null和undefined都會轉換為false
4伐弹、對象也會轉換為true
四、運算符
運算符也叫操作符褐捻,通過運算符可以對一個或多個值進行運算,并獲取運算結果掸茅,比如:typeof就是運算符,可以來獲得一個值的類型柠逞,它會將該值的類型以字符串的形式返回
1、算術運算符
當對非Number類型的值進行運算時景馁,會將這些值轉換為Number然后在運算板壮,任何值和NaN做運算都得NaN
- +: 可以對兩個值進行加法運算,并將結果返回 合住,如果對兩個字符串進行加法運算绰精,則會做拼串撒璧,會將兩個字符串拼接為一個字符串,并返回笨使,任何的值和字符串做加法運算卿樱,都會先轉換為字符串,然后再和字符串做拼串的操作硫椰,我們可以利用這一特點繁调,來將一個任意的數(shù)據(jù)類型轉換為String,我們只需要為任意的數(shù)據(jù)類型 + 一個 "" 即可將其轉換為String靶草,這是一種隱式的類型轉換蹄胰,由瀏覽器自動完成,實際上它也是調用String()函數(shù)
- -: 可以對兩個值進行減法運算奕翔,并將結果返回
- *: 可以對兩個值進行乘法運算
- /: 可以對兩個值進行除法運算
- %: 取模運算(取余數(shù))
- 任何值做- * /運算時都會自動轉換為Number裕寨,我們可以利用這一特點做隱式的類型轉換,可以通過為一個值 -0 *1 /1來將其轉換為Number派继,原理和Number()函數(shù)一樣宾袜,使用起來更加簡單
2、一元運算符
- + 正號:正號不會對數(shù)字產生任何影響
-
- 負號:負號可以對數(shù)字進行符號的取反
對于非Number類型的值驾窟,它會將先轉換為Number庆猫,然后再運算
可以對一個其他的數(shù)據(jù)類型使用+,來將其轉換為number,它的原理和Number()函數(shù)一樣
3纫普、自增和自減
-
自增 ++:
1阅悍、通過自增可以使變量在自身的基礎上增加1;
2昨稼、對于一個變量自增以后节视,原變量的值會立即自增1;
3假栓、 自增分成兩種:后++(a++) 和 前++(++a):無論是a++還是++a寻行,都會立即使原變量的值自增1,不同的是a++和++a的值不同匾荆,a++的值等于原變量的值(自增前的值)拌蜘,++a的值等于新值 (自增后的值) -
自減 --:
1、通過自減可以使變量在自身的基礎上減1牙丽;
2简卧、自減分成兩種:后--(a--) 和 前--(--a):無論是a--還是--a都會立即使原變量的值自減1,不同的是a-- 和 --a的值不同烤芦,a-- 是變量的原值 (自減前的值)举娩,--a 是變量的新值 (自減以后的值)
var n1=10;
var n2=20;
var n = n1++; //先賦值n=10 后自增n1=11
console.log('n=' + n); //10
console.log('n1=' + n1); //11
n = ++n1; //先自增n1=12 后賦值n=12
console.log('n=' + n); //12
console.log('n1=' + n1); //12
n = n2--;//先賦值n=20 后自減n2=19
console.log('n=' + n); //20
console.log('n2=' + n2); //19
n = --n2; //先自減n2=18 后賦值n=18
console.log('n=' + n); //18
console.log('n2=' + n2); //18
4、邏輯運算符
-
!非:
1铜涉、!可以用來對一個值進行非運算
2智玻、所謂非運算就是值對一個布爾值進行取反操作,true變false芙代,false變true
3吊奢、如果對一個值進行兩次取反,它不會變化
4纹烹、如果對非布爾值進行元素页滚,則會將其轉換為布爾值,然后再取反滔韵,所以我們可以利用該特點逻谦,來將一個其他的數(shù)據(jù)類型轉換為布爾值,可以為一個任意數(shù)據(jù)類型取兩次反陪蜻,來將其轉換為布爾值邦马,原理和Boolean()函數(shù)一樣 -
&& 與:
1、&&可以對符號兩側的值進行與運算并返回結果
2宴卖、運算規(guī)則:兩個值中只要有一個值為false就返回false滋将,只有兩個值都為true時,才會返回true症昏;JS中的“與”屬于短路的與随闽,如果第一個值為false,則不會看第二個值 -
|| 或:
1肝谭、||可以對符號兩側的值進行或運算并返回結果
2掘宪、運算規(guī)則:兩個值中只要有一個true,就返回true攘烛,如果兩個值都為false魏滚,才返回false;JS中的“或”屬于短路的或坟漱,如果第一個值為true鼠次,則不會檢查第二個值
var a = true;
//對a進行非運算
a = !a;
//console.log("a = " + a);
var b = 10;
b = !!b;
//console.log("b = " + b);
//console.log(typeof b);
//如果兩個值都是true則返回true
var result = true && true;
//只要有一個false,就返回false
result = true && false;
result = false && true;
result = false && false;
//console.log("result = "+result);
//第一個值為true芋齿,會檢查第二個值
//true && alert("看我出不出來P瓤堋!");
//第一個值為false觅捆,不會檢查第二個值
//false && alert("看我出不出來I庖邸!");
//兩個都是false栅炒,則返回false
result = false || false;
//只有有一個true扩劝,就返回true
result = true || false;
result = false || true ;
result = true || true ;
//console.log("result = "+result);
//第一個值為false庸论,則會檢查第二個值
//false || alert("123");
//第一個值為true职辅,則不再檢查第二個值
true || alert("123");
-
與或運算
&& || 非布爾值的情況:對于非布爾值進行與或運算時棒呛,會先將其轉換為布爾值,然后再運算域携,并且返回原值簇秒,
1、與運算:如果第一個值為true秀鞭,則必然返回第二個值趋观;如果第一個值為false,則直接返回第一個值锋边;如果兩個值都為true皱坛,則返回后邊的;如果兩個值中有false豆巨,則返回靠前的false
2剩辟、或運算:如果第一個值為true,則直接返回第一個值往扔;如果第一個值為false贩猎,則返回第二個值
5、賦值運算符
- =:可以將符號右側的值賦值給符號左側的變量
- += :a += 5 等價于 a = a + 5
- -=:a -= 5 等價于 a = a - 5
- *=:a *= 5 等價于 a = a5
- /=:a /= 5 等價于 a = a / 5
- %=:a %= 5 等價于 a = a % 5
6萍膛、關系運算符
通過關系運算符可以比較兩個值之間的大小關系吭服,如果關系成立它會返回true,如果關系不成立則返回false
- “>”大于號:判斷符號左側的值是否大于右側的值蝗罗,如果關系成立艇棕,返回true,如果關系不成立則返回false
- “>= 大于等于:”判斷符號左側的值是否大于或等于右側的值
- < 小于號
- <= 小于等于
- 非數(shù)值的情況:對于非數(shù)值進行比較時串塑,會將其轉換為數(shù)字然后再比較沼琉;如果符號兩側的值都是字符串時,不會將其轉換為數(shù)字進行比較拟赊,而會分別比較字符串中字符的Unicode編碼
var result = 5 > 10;//false
result = 5 > 4; //true
result = 5 > 5; //false
result = 5 >= 5; //true
result = 5 >= 4; //true
result = 5 < 4; //false
result = 4 <= 4; //true
//console.log("result = "+result);
//console.log(1 > true); //false
//console.log(1 >= true); //true
//console.log(1 > "0"); //true
//console.log(10 > null); //true
//任何值和NaN做任何比較都是false
//console.log(10 > "hello"); //false
//console.log(10 >= "hello"); //false
//console.log(10 < "hello"); //false
//console.log(10 <= "hello"); //false
//console.log(true > false); //true
//console.log("1" < "5"); //true
//console.log("11" < "5"); //true
//比較兩個字符串時刺桃,比較的是字符串的字符編碼
//console.log("a" < "b");//true
//比較字符編碼時是一位一位進行比較
//如果兩位一樣,則比較下一位吸祟,所以借用它來對英文進行排序
// console.log("abc" < "b");//true
// console.log("bbc" < "b");//false
//console.log("abc" < "bcd");//true
//比較中文時沒有意義
//console.log("你" > "我"); //false
// console.log("月" > "我"); //true
//如果比較的兩個字符串型的數(shù)字瑟慈,可能會得到不可預期的結果
//注意:在比較兩個字符串型的數(shù)字時,一定一定一定要轉型
console.log("11123123123123123123" < +"5"); //false
7屋匕、Unicode編碼
在字符串中使用轉義字符輸入Unicode編碼:\u四位編碼
在網頁中使用Unicode編碼:&#編碼; 注意:這里的編碼需要的是10進制
8葛碧、相等運算符
相等運算符用來比較兩個值是否相等,如果相等會返回true过吻,否則返回false
-
== :相等運算
當使用==來比較兩個值時进泼,如果值的類型不同蔗衡,則會自動進行類型轉換,將其轉換為相同的類型乳绕,然后再比較 -
!=:不相等運算
不相等用來判斷兩個值是否不相等绞惦,如果不相等返回true,否則返回false洋措;不相等也會對變量進行自動的類型轉換济蝉,如果轉換后相等它也會返回false -
===:全等
用來判斷兩個值是否全等,它和相等類似菠发,不同的是它不會做自動的類型轉換王滤;如果兩個值的類型不同,直接返回false -
!==:不全等
用來判斷兩個值是否不全等滓鸠,和不等類似雁乡,不同的是它不會做自動的類型轉換;如果兩個值的類型不同糜俗,直接返回true
var a = 10;
//console.log(a == 4); //false
//console.log("1" == 1); //true
//console.log(true == "1"); //true
//console.log(null == 0); //false
/*
undefined 衍生自 null
所以這兩個值做相等判斷時踱稍,會返回true
*/
//console.log(undefined == null);//true
/*
NaN不和任何值相等,包括他本身
*/
//console.log(NaN == "1"); //false
//console.log(NaN == "undefined"); //false
//console.log(NaN == NaN); //false
var b = NaN;
//判斷b的值是否是NaN
//console.log(b == NaN);//無法判斷吩跋,只會返回false
/*
可以通過isNaN()函數(shù)來判斷一個值是否是NaN
如果該值是NaN則返回true寞射,否則返回false
*/
//console.log(isNaN(b)); //true
//console.log(10 != 5); //true
//console.log(10 != 10); //false
//console.log("abcd" != "abcd"); //false
//console.log("1" != 1);//false
//console.log("123" === 123);//false
//console.log(null === undefined);//false
9、條件運算符
條件運算符也叫三元運算符锌钮,語法:條件表達式?語句1:語句2;
執(zhí)行流程:條件運算符在執(zhí)行時桥温,首先對條件表達式進行求值,如果該值為true梁丘,則執(zhí)行語句1侵浸,并返回執(zhí)行結果,如果該值為false氛谜,則執(zhí)行語句2掏觉,并返回執(zhí)行結果,如果條件的表達式的求值結果是一個非布爾值值漫,會將其轉換為布爾值然后在運算
var a = 300;
var b = 143;
var c = 50;
//a > b ? alert("a大"):alert("b大");
//獲取a和b中的最大值
//var max = a > b ? a : b;
//獲取a b c 中的最大值
//max = max > c ? max : c;
//這種寫法不推薦使用澳腹,不方便閱讀
var max = a > b ? (a > c ? a :c) : (b > c ? b : c);
10、運算符的優(yōu)先級
“杨何,” 運算符:使用,可以分割多個語句酱塔,一般可以在聲明多個變量時使用
使用,
運算符同時聲明多個變量:var a, b, c;
可以同時聲明多個變量并賦值:var a=1, b=2, c=3;
在JS中有一個運算符優(yōu)先級的表危虱,在表中越靠上優(yōu)先級越高羊娃,優(yōu)先級越高越優(yōu)先計算,如果優(yōu)先級一樣埃跷,則從左往右計算
11蕊玷、代碼塊
在JS中可以使用{}來為語句進行分組,同一個{}中的語句我們稱為是一組語句邮利,它們要么都執(zhí)行,要么都不執(zhí)行垃帅,一個{}中的語句我們也稱為叫一個代碼塊延届,在代碼塊的后邊就不用再編寫了;
JS中的代碼塊挺智,只具有分組的的作用祷愉,沒有其他的用途,代碼塊內容的內容赦颇,在外部是完全可見的
五、JS操作屬性
DOM是為了操作文檔(網頁)的API赴涵,document是它的一個對象媒怯;BOM是為了操作瀏覽器的API,window是它的一個對象髓窜,常用BOM對象還有:alert扇苞、定時器等
<script type="text/javascript">
/*
DOM是為了操作文檔(網頁)的API,document是它的一個對象
BOM是為了操作瀏覽器的API寄纵,window是它的一個對象
常用BOM對象還有:alert鳖敷、定時器等
*/
//整個文檔加載完之后執(zhí)行一個匿名函數(shù)
window.onload = function(){
document.getElementById('div1').title = "我看到了!";
//變量oA代表整個a標簽
var oA = document.getElementById('link1');
oA.;
oA.title = "跳轉到騰訊網"
alert(oA.id);
alert(oA.title);
}
</script>
</head>
<body>
<div id="div1" class="div1" title="這是div元素程拭,看到了嗎定踱?">這是一個div元素</div>
<a href="#" id="link1">騰訊網</a>
</body>
2、JS換膚
<script type="text/javascript">
window.onload = function(){
var oLink = document.getElementById('link1');
oLink.href = "css/2.css";
alert(oLink.id);
}
3恃鞋、js操作style屬性
window.onload = function() {
var oDiv = document.getElementById('div1');
/*style屬性中的樣式屬性崖媚,沒有"-"號的,寫法相同*/
oDiv.style.color = 'red';
oDiv.style.background = 'gold';
/*
style屬性中的樣式屬性恤浪,帶"-"號的需要去掉"-"號畅哑,寫成小駝峰式
例如:font-size屬性要寫為fontSize
*/
oDiv.style.fontSize = '30px';
}
4、js操作class
<style type="text/css">
.box01{
width: 200px;
height: 200px;
background-color: gold;
}
.box02{
width: 300px;
height: 300px;
background-color: red;
}
</style>
<script type="text/javascript">
window.onload = function() {
var oDiv = document.getElementById('div1');
// 由于class是js中的保留關鍵字水由,所以設置class屬性時荠呐,要寫為className
oDiv.className = 'box02';
}
</script>
5、js中括號操作屬性
<script type="text/javascript">
window.onload = function(){
var oDiv = document.getElementById('div1');
//oDiv.style.color = 'red';//red必須加引號砂客,否則會認為它是一個變量泥张,引起來會認為它是一個值,賦值給=號左邊
var attr = 'color';
// oDiv.style[attr] = 'red';
/* 通過[]操作屬性可以寫變量 */
oDiv['style'][attr] = 'red';
/* 通過innerHTML可以讀寫元素包括的內容 */
alert(oDiv.innerHTML);//讀取標簽里面包裹的元素鞭盟,即“這是一個div元素”
var oDiv2 = document.getElementById('div2');
// oDiv2.innerHTML = '這是第二個div元素';//向div標簽中插入內容
oDiv2.innerHTML = "<a ;//向div標簽中插入超鏈接標簽
/*
document.write和innerHTML的區(qū)別
document.write只能重繪整個頁面
innerHTML可以重繪頁面的一部分
*/
}
</script>
6圾结、JS函數(shù)
<title>js函數(shù)</title>
<script type="text/javascript">
function aa(){
alert('hello!');
}
/*
//直接調用
aa();
*/
</script>
7、JS可控制換膚
<script type="text/javascript">
window.onload = function(){
/* 提取行間事件 */
var oBtn01 = document.getElementById('btn01');
var oBtn02 = document.getElementById('btn02');
oBtn01.onclick = skin01;//這里不能寫skin01()齿诉,這樣寫就馬上執(zhí)行了
oBtn02.onclick = skin02;
}
function skin01(){
var oLink = document.getElementById('link1');
oLink.href = "css/1.css";
}
function skin02(){
var oLink = document.getElementById('link1');
oLink.href = "css/2.css";
}
</script>
8筝野、變量和函數(shù)預解析
<script type="text/javascript">
/*變量預解析*/
/*alert(a);//只把變量a的聲明提前晌姚,賦值不提前,所以彈出undefined歇竟,表示它的值未定義
// alert(c);//報錯挥唠,c沒有聲明,這是真正的未定義
var a = 123;
/*函數(shù)預解析*/
myalert();//彈出hello!
function myalert(){
alert('hello!');
}
</script>
9焕议、匿名函數(shù)
<script type="text/javascript">
window.onload = function(){
var oDiv = document.getElementById('div1');
/*有名字的函數(shù)*/
// oDiv.onclick = myalert;
// function myalert(){
// alert('hello');
// }
/*匿名函數(shù)*/
oDiv.onclick = function(){
alert('hello');
}
}
</script>
10宝磨、匿名傳參
<script type="text/javascript">
window.onload = function(){
var oDiv = document.getElementById('div1');
changeStyle('color', 'gold');
changeStyle('background', 'red');
changeStyle('width', '300px');
changeStyle('height', '300px');
changeStyle('fontSize', '30px');
function changeStyle(styl, val){
oDiv.style[styl] = val;
}
}
</script>
11、函數(shù)return關鍵字
<script type="text/javascript">
window.onload = function(){
var oInput01 = document.getElementById('input01');
var oInput02 = document.getElementById('input02');
var oBtn = document.getElementById('btn');
//寫入值
// oInput01.value = 10;
// oInput02.value = 5;
oBtn.onclick = function(){
var val01 = oInput01.value;
var val02 = oInput02.value;
var rs = add(val01, val02);
alert(rs);
}
function add(a, b){
var c = parseInt(a) + parseInt(b);
// alert('計算完成');//執(zhí)行
return c;//返回函數(shù)設定的值盅安,同時結束函數(shù)的運行
// return;//不返回值唤锉,僅結束函數(shù)的運行
// alert('計算完成');//不執(zhí)行
}
}
</script>
12、流程控制語句
<script type="text/javascript">
/*
流程控制語句
- JS中的程序是從上到下一行一行執(zhí)行的
- 通過流程控制語句可以控制程序執(zhí)行流程别瞭,
使程序可以根據(jù)一定的條件來選擇執(zhí)行
- 語句的分類:
1.條件判斷語句
2.條件分支語句
3.循環(huán)語句
*/
console.log('你好');
alert('hello');
</script>
13窿祥、條件判斷語句
使用條件判斷語句可以在執(zhí)行某個語句之前進行判斷,如果條件成立才會執(zhí)行語句蝙寨,條件不成立則語句不執(zhí)行晒衩。
- if語句
- 語法一:
if(條件表達式){
語句...
}
if語句在執(zhí)行時,會先對條件表達式進行求值判斷墙歪,如果條件表達式的值為true听系,則執(zhí)行if后的語句,如果條件表達式的值為false虹菲,則不會執(zhí)行if后的語句靠胜。if語句只能控制緊隨其后的那個語句,如果希望if語句可以控制多條語句届惋,可以將這些語句統(tǒng)一放到代碼塊中髓帽,if語句后的代碼塊(即{})不是必須的,但是在開發(fā)中盡量寫上代碼塊脑豹,即使if后只有一條語句
- 語法二:
if(條件表達式){
語句...
}else{
語句...
}
if...else...語句郑藏,當該語句執(zhí)行時,會先對if后的條件表達式進行求值判斷瘩欺,如果該值為true必盖,則執(zhí)行if后的語句,如果該值為false俱饿,則執(zhí)行else后的語句
- 語法三:
if(條件表達式){
語句...
}else if(條件表達式){
語句...
}else if(條件表達式){
語句...
}else{
語句...
}
if...else if...else:
當該語句執(zhí)行時歌粥,會從上到下依次對條件表達式進行求值判斷,如果值為true拍埠,則執(zhí)行當前語句失驶;如果值為false,則繼續(xù)向下判斷枣购。如果所有的條件都不滿足嬉探,則執(zhí)行最后一個else后的語句擦耀。該語句中,只會有一個代碼塊被執(zhí)行涩堤,一旦代碼塊執(zhí)行了眷蜓,則直接結束語句
-
switch語句
條件分支語句 - 語法:
switch(條件表達式){
case 表達式:
語句...
break;
case 表達式:
語句...
break;
default:
語句...
break;
}
執(zhí)行流程:在執(zhí)行時會依次將case后的表達式的值和switch后的條件表達式的值進行全等比較,如果比較結果為true胎围,則從當前case處開始執(zhí)行代碼吁系。當前case后的所有的代碼都會執(zhí)行,我們可以在case的后邊跟著一個break關鍵字白魂,這樣可以確保只會執(zhí)行當前case后的語句汽纤,而不會執(zhí)行其他的case,如果比較結果為false碧聪,則繼續(xù)向下比較冒版,如果所有的比較結果都為false,則只執(zhí)行default后的語句
switch語句和if語句的功能實際上有重復的逞姿,使用switch可以實現(xiàn)if的功能,同樣使用if也可以實現(xiàn)switch的功能捆等,所以我們使用時滞造,可以根據(jù)自己的習慣選擇。
運算符:
1栋烤、算術運算符: +(加)谒养、 -(減)、 *(乘)明郭、 /(除)买窟、 %(求余)
2、賦值運算符:=薯定、 +=始绍、 -=、 *=话侄、 /=亏推、 %=
3、條件運算符:==年堆、===吞杭、>、>=变丧、<芽狗、<=、!=痒蓬、&&(而且)童擎、||(或者)滴劲、!(否)