1、JavaScript用來做什麼
HTML:專門編寫網頁內容的語言
CSS:專門美化網頁內容樣式的語言
JavaScript:專門編寫交互程序的語言
JavaScript包含三個方面:ECMAScript標準+DOM標準+BOM
2、常用語句
在控制檯中輸出一段話 console.log(“Hellow World”);
在當前網頁中輸出一段話 document.write(“Hellow World”);
在彈出的警告窗中輸出一段話 window.alert(“Hellow World”);
在彈出的警告窗中輸出“請輸入”,並且創建一個輸入框獲取輸入的信息
window.prompt(“請輸入”);
3、在網頁中編寫js腳本程序:3處
①<script>元素中:
直接編寫在<script>中的js程序,隨網頁加載過程解釋執行
②單獨js文件保存js腳本程序:2步:
1. 創建.js文件,保存js腳本程序
2. <script src="url"></script>引入外部js文件
腳本程序:不需要預編譯,邊解釋邊執行的程序
③元素的事件處理程序中編寫
不隨網頁加載過程執行,只有觸發事件時,才執行。
4、變量
①使用變量的流程:聲明,賦值,取值
②僅聲明未賦值的變量,默認值自動是undefined
③爲一個未聲明過的變量賦值,不會出錯!會自動創建同名變量(全局變量),再保存數據,當這個變量在函數中被賦值,那麼這個全局變量只有函數被引用後才能在全局函數中使用,否則會顯示錯誤
function a(){
b=4;
}
console.log(b); //出錯
function a(){
b=4;
}
a();
console.log(b); //輸出: 4
④嘗試從一個未聲明過的變量中取值:會出錯! ReferenceError:未找到或未定義
⑤聲明提前:在程序正式執行前,都會將所有var聲明的變量提前到開始位置(函數內變量提前到函數開始位置),集中創建 ,***賦值留在原地***(函數也有聲明提前,不過有兩種情況需要考慮)
console.log(a); //undefined 聲明提前,雖有聲明,但是還未賦值
var a=100;
console.log(a); //100
var a=200;
console.log(a); //200
5、數據類型
① js中數據類型包括原始類型和引用類型兩種,
②原始類型:值保存在變量本地的數據類型
5+1種:Number 專門保存數字的類型
String 專門保存字符串的類型
Boolean 專門保存真/假二選一的類型
undefined 只有一個值undefined
null 表示不指向任何地址
symbol 用來定義對象的唯一屬性名(ES6新增)
③引用類型:值不保存在變量本地的數據類型,變量中只是存儲地址,當地址中存儲的值改變時,引用類型的值也會發生變化
6、Number類型:專門保存數字的類型,不加引號
①所佔空間:64位二進制數保存(64Bit=8bytes、1KB=1024byte)
數字所佔空間和數值大小無關,所有數字都佔8字節
②n.toFixed(m):將n按m位小數四捨五入 // var n=3.1415;n.toFixed(2) 結果"3.14" // 注意* "3.14"是字符串類型 *
var n=3.1415
console.log(typeof (n.toFixed(2))); // string
③NaN(Not a Number):不是數字的數字類型的值,NaN與任何數據做運算結果都爲NaN,屬於Number類型的數據
7、String類型:專門保存一串字符的序列,必須帶引號
①所佔空間:js的程序內存中的字符都是用unicode標識的
每個字母、標點:1字節 每個漢字:2字節
② +:如果參與+運算的值中包含字符串類型數據,+法運算自動變爲字符串拼接!
b1=true,n2=3,s3="3";
console.log(b1 + n2 + s3);
true + 3 + “3”
4 + “3”
“43”
8、Boolean類型:只有兩個值true/false。
如果表示二選一的值時,就用Boolean類型,用於比較結果或當做判斷條件時
9、數據類型:隱式轉換
①算數計算時隱式轉換
算數計算中,一切類型都隱式轉爲number類型,再計算
"2"-->2 true/false-->1/0
特例:+(只有+的時候)運算中,只要有一方是字符串,兩數據都轉爲字符串,且+運算變爲字符串拼接!
②當做爲判斷條件時隱式轉換
一切類型都隱式轉爲Boolean類型
“”,undefined,null,NaN,0這五個隱式轉換爲 false,其餘都隱式轉換爲true
例 if("false"){console.log("Hellow")}else{console.log("Baybay")}
輸出爲Hellow,因爲"false"是不爲空的字符串,隱式轉換爲true
③隱式轉換,僅影響表達式的運算結果,不影響變量中存儲的實際值
10、數據類型:顯式轉換
例:parseInt(true);輸出結果 NaN
首先parseInt(str)是用來將字符串轉爲數字的,true將先被進行隱式轉換,執行String(true)方法將Boolean型true變爲String型”true”,再執行parseInt(”true”),最終得NaN
11、運算符
① % 取餘 5%2==1 5/2==2餘1
② ++將當前變量中的值遞加1
難點:n++與++n的區別
例1、
var a=10;
var b=a++;
console.log("a:"+a,"b:"+b);// a:11 b:10
var a=10;
var b=++a;
console.log("a:"+a,"b:"+b);// a:11 b:11
無論是a++還是++a,最終的a值都是加了1,所以a都爲11,但是b=a++時是先將a值賦給了b,再自加一,b=++a時是先自加一,此時a=11,再將a值賦給了b,b也爲11
例2、
③+=:a+=b等於a=a+b
12、關係運算:將兩個值作比較 > < >= <= == !=
/*我還寫過一篇《JavaScript中判斷兩個值是否相等(各種情況)》,裏面介紹關係運算各種情況的更仔細*/
只能返回兩個值之一:如果成立,返回true;否則返回false
隱式轉換:將所有類型都轉爲number類型,再比較!
3種特殊情況
①兩字符串做比較:依次PK每一位字符的unicode編號
只要有一位字符,分出大小,就不再比較
比如:"3">"10" -->true "Smith">"Scott" -->true
② NaN: NaN和任何數據做大小或等於比較永遠返回false
NaN和任何數據做*不等於*比較,永遠返回true
isNaN(num):專門判斷num是否是NaN isNaN(f);//f先隱式轉換爲number類型 true
如果是NaN返回true,否則返回false isNaN(1);//false
判斷一個數值是否是數字或能否被轉爲數字,都用isNaN。如果是數字,返回false!否則返回true
③ undefined 與 null
undefined == null //true undefined === null//false
==:相等,值相等即可,可以有隱式轉換
===: 全等:數據類型要相同,再比較值是否相等
undefined和null與任何有意義的值比較返回的都是false,null與undefined在與其他數相等運算時不進行類型轉換
13、邏輯運算與位運算
①隱式類型轉換:自動將每個條件轉爲Boolean類型,用來比較,如果要輸出,輸出的還是最初的數據, &&:必須都爲真才爲真,||:一個爲真就爲真, ^:異或,不同爲1,相同爲0
②
console.log(4&&false); false
console.log(false&&4);false
console.log(false&&0); false
console.log(5&&4); 4
console.log(4||false); 4
console.log(0||false);false
console.log(5||4); 5
*當邏輯運算符執行了一個條件後,如果已經完成了自己的使命,那麼就停止下來,輸出*
console.log(4&&false); false//4條件爲真,未完成&&使命,繼續判斷false條件,無論真假,都能完成使命,輸出最後判斷條件的值
console.log(false&&4);false//false條件爲假,可以完成&&使命,輸出最後判斷條件的值
console.log(0||false);false//0條件爲假,不能完成||使命,繼續判斷false條件,無論真假,都能完成使命,輸出最後判斷條件的值
console.log(4||false); 4//4條件爲真,可以完成||使命,輸出最後判斷條件的值
③短路邏輯:如果前一個條件已經可以得出結論,則後續條件不再執行!
例:消費滿100就打8折 totle>=100&&(total*=0.8); //前面條件滿足,再執行後邊的操作,如果前邊不滿足,那麼就不執行後面 操作
14、三目運算(最簡單的三目運算 var max=a>b?a:b;結構爲:條件1?值1:默認值;)
三目運算結構
條件1?值1:
條件2?值2:
… ? … :
默認值;
score>90?”A”:
score>80?”B”:
score>=60?”C”:
“D”;
15、typeof
用typeof可以檢測出變量的基本數據類型,但是有個特例,就是null的typeof返回的是object,這是個javascript的歷史bug。。。
typeof Symbol() //"symbol" typeof Number() //"number"
typeof String() //"string" typeof Function() //"function"
typeof Object() //"object" typeof Boolean() //"boolean"
typeof null //"object" typeof undefined //"undefined"