1.變量 |
|
var num=10; |
|
|
|
var num1,num2,num3; |
|
num1=10; |
|
num2=20; |
|
num3=30; |
|
|
|
var num1=10,num2=20,num3=30; |
|
|
|
注意點: |
|
console.log(a); //報錯 |
|
var b; |
|
console.log(b); //undefined |
|
c=10; |
|
console.log(c); //10 會默認爲全局變量,正常輸出,不推薦這種寫法 |
|
|
|
|
|
2.數據類型 |
|
var num=10; //數值類型 |
|
var str='123'; //字符串類型 |
|
var flag=true; //布爾類型 |
|
var obj = {} //對象類型,默認值null |
|
var undefined = undefined; //未定義類型 |
|
|
|
數據類型的轉換: |
|
轉換成字符串類型: |
|
str.toString() //大部分類型都有toString()方法 |
|
String(str) //undefined,null等特殊值,須要用到String() |
|
轉換成數值類型: |
|
parseInt() 123.123abc // 123 |
|
parseFloat() 123.123abc //123.123 |
|
Number() 123.123abc //報錯 |
|
轉換成布爾類型: |
|
Boolean() |
|
轉換爲false的五種狀況: 0 '' null undefined NaN |
|
其餘的值都轉換爲true: 非0和非空都爲true |
|
|
|
隱式轉換: |
|
任意類型+ 字符串 會轉換爲字符串 |
|
任意的類型 - * / 會轉換爲數值 |
|
|
|
特殊狀況: |
|
NaN : 不是一個數字 |
|
isNaN(); 不是人 |
|
|
|
數據類型檢測: |
|
typeof str |
|
|
|
3.條件判斷 |
|
單向判斷 |
|
if(條件知足){ |
|
//執行語句 |
|
} |
|
|
|
|
|
雙向判斷 |
|
if(條件知足){ |
|
//執行語句 |
|
}else{ |
|
//條件不知足執行 |
|
} |
|
|
|
多向判斷 |
|
if(條件1知足){ |
|
//執行語句1 |
|
}else if(條件2知足){ |
|
//執行語句2 |
|
}else if(條件3知足){ |
|
//執行語句3 |
|
}else{ |
|
//以上都不知足,執行這裏 |
|
} |
|
|
|
|
|
精準判斷 |
|
switch(條件){ |
|
case 條件1: |
|
語句1; |
|
break; |
|
case 條件2: |
|
語句2; |
|
break; |
|
default: |
|
最後的語句; |
|
break; |
|
} |
|
|
|
三元運算符 |
|
條件 ? 條件知足返回 : 條件不知足返回 |
|
|
|
總結: |
|
if和switch的區別? |
|
if適合用於肯定範圍的判斷 |
|
switch適合用於肯定的具體值判斷 |
|
2.switch的注意點 |
|
switch的條件比較是全等(===) |
|
break能夠省略,可是會穿透執行. |
|
|
|
4.循環 |
|
循環都必須有三個條件: 開始條件,條件範圍,條件增量 |
|
for循環 |
|
var sum=0; |
|
for(var i=1; i<=100; i++){ |
|
sum+=i; |
|
} |
|
|
|
while循環 |
|
var sum = 0; |
|
var i=1; |
|
while(i<=100){ |
|
sum+=i; |
|
i++; |
|
} |
|
|
|
|
|
do-while循環 |
|
var sum =0; |
|
var i=1; |
|
do{ |
|
sum+=i; |
|
i++; |
|
}while(i<=100) |
|
|
|
|
|
總結: |
|
1.三種循環之間的區別? |
|
for適用於循環次數肯定的狀況,while和do-while適用於循環次數未知的狀況 |
|
while是先判斷,再執行, do-while是先執行一次,再判斷 |
|
|
|
2.continue 和 break |
|
continue 跳過當前循環 |
|
break 跳出整個循環 |
|
|
|
5.數組 |
|
var arr=[]; 數組的基本語法 |
|
var arr[1,2,3,4,5]; 數組能夠存多個值,建議存同類型的值,可是能夠存任意類型的值. |
|
arr.length 數組的長度 |
|
|
|
arr[0] 表示數組中的第一個元素 |
|
arr[1] 表示數組中的第二個元素 |
|
|
|
arr[0]=10; 表示將數組中的第一個元素修改或者賦值爲0 |
|
|
|
動態增長數組 arr[arr.length] |
|
|
|
|
|
6.函數 |
|
函數的做用: 封裝功能,能夠複用. |
|
函數的語法: 定義 + 調用 |
|
函數的定義: |
|
function 函數名(參數){ |
|
//執行語句 |
|
|
|
return 結果; |
|
} |
|
函數的調用: |
|
函數名(值); //能夠將函數的返回值存到變量中使用 |
|
|
|
形參: 函數定義的時候的參數,本質上是一個局部變量 |
|
實參: 函數調用的時候的參數,須要傳入一個具體的值. |
|
注意; 形參和實參建議一一對應 |
|
|
|
內置實參對象: arguments 使用中括號數組的方式獲取實參 |
|
|
|
函數的其餘寫法: |
|
匿名函數: function(){} |
|
函數表達式: var fn=function(){} fn(); |
|
自調用函數: (function(){})() |
|
|
|
|
|
7.對象 |
|
對象: 就是將現實事物抽象爲功能代碼. 將現實世界的東西,用對象的語法格式來表示. |
|
對象的語法: 對象中有屬性和方法 |
|
對象的三種寫法: |
|
1.字面量寫法 |
|
var zs={ |
|
name:'張三', |
|
age:18, |
|
sayHi:function(){ |
|
console.log("你好"); |
|
} |
|
|
|
} |
|
zs.name |
|
zs.age |
|
zs.sayHi() |
|
|
|
2.new Object()寫法 |
|
var zs = new Object(); |
|
zs.name='張三'; |
|
zs.age=18; |
|
zs.sayHi=function(){} |
|
|
|
3.構造函數寫法 |
|
function Person(name,age){ |
|
this.name= name; |
|
this.age=age; |
|
this.sayHi=function(){} |
|
} |
|
var zs = new Person('張三',18); |
|
|
|
對象的遍歷: for-in |
|
for(var key in Obj){ |
|
console.log(key+'--'+Obj[key]); |
|
} |
|
|
|
|
|
|
|
8.內置對象 |
|
Math對象 : 數學對象 Math.random() Math.floor() Math.ceil() Math.max() Math.min() |
|
任意區間隨機數公式:Math.floor(Math.random() * (max - min + 1) + min); |
|
|
|
Date()時間對象: |
|
|
|
var date = new Date(); //獲取當前時間 |
|
var date = new Date('2018-8-8 12:12:12'); //獲取當前時間 |
|
var date = new Date('2018/8/8'); //獲取當前時間 |
|
var date = new Date(2018,7,6); //獲取時間,月份會大1 ,7 表示8月份 |
|
|
|
1.先轉換成毫秒,而後再轉換成年月日,時分秒 |
|
date.getTime() |
|
date.Valueof() |
|
date.now() |
|
2.經過對象的內置方法,直接獲取年月日,時分秒 |
|
date.getFullYear(); //年 |
|
date.getMonth(); //月 0 一月份 1 二月份 |
|
date.getDate(); //日 |
|
date.getDay(); //星期幾, 0 週日 1週一 6週六 |
|
|
|
date.getHours(); //小時 |
|
date.getMinutes(); //分鐘 |
|
date.getSeconds(); //秒數 |
|
|
|
3.會計算時間差. |
|
1.毫秒相減 ,除以1000,變成秒數差 |
|
2.計算天,時,分,秒 |
|
d = parseInt(總秒數/ 60/60 /24); // 計算天數 |
|
h = parseInt(總秒數/ 60/60 %24) // 計算小時 |
|
m = parseInt(總秒數 /60 %60 ); // 計算分數 |
|
s = parseInt(總秒數%60); // 計算當前秒數 |
|
3.判斷是否個位數,而後補0 |
|
h = h<10? '0'+h : h; |
|
|
|
字符串對象 |
|
1.indexOf(要查找的字符,開始位置) 開始位置不寫默認從0開始,找不到返回-1 ----查找字符 |
|
2.charAt(字符位置) 給一個位置,返回該位置的字符 ----獲取字符 |
|
3.subStr(開始位置,截取個數) 返回截取的字符串結果 ----截取字符 |
|
4.replace(要替換的字符,替換的新字符) ----替換字符 |
|
5.join(鏈接符) 將數組經過鏈接符鏈接,返回字符串 ----鏈接字符 |
|
6.split(鏈接符) 將字符根據鏈接符分割成多個值的數組,返回數組 ----分割字符 |
|
7.toUpperCase() 將字符串轉換爲大寫 ----轉換成大寫 |
|
8.toLowerCase() 將字符串轉換爲小寫 ----轉換成小寫 |
|
|
|
數組對象: |
|
1.push() 後面添加元素 |
|
2.pop() 後面刪除元素 |
|
|
|
3.unshift() 前面添加元素 |
|
4.shift() 前面刪除元素 |
|
|
|
5.reverse() 翻轉數組 |
|
6.sort() 排序數組 |
|
|
|
arr.sort(function(a,b){ |
|
return a-b; //升序 |
|
}) |
|
|
|
arr.sort(function(a,b){ |
|
return b-a; //降序 |
|
}); |
|
|
|
7.concat() 合併數組 |
|
var arr3 = arr1.concat(arr2); |
|
|
|
8.splice 刪除/修改/添加數組 |
|
arr.splice(開始位置); //從開始位置刪除到最後 |
|
arr.splice(開始位置,刪除個數); //從開始位置刪除幾個 |
|
|
|
//新增內容 |
|
arr.splice(開始位置,0,新增元素); |
|
arr.splice(1,0,'a','b'); //在索引1元素以前插入a和b |
|
|
|
//替換內容 |
|
arr.splice(開始位置,刪除個數,新增元素); |
|
arr.splice(1,1,'d'); //在索引爲1開始刪除一個元素,替換爲 |
|
|
|
|
|
9.indexOf() 查找數組 |
|
|
|
查找數組中的元素位置 |
|
arr.indexOf(元素); //返回元素的索引位置,若是沒有返回-1 |
|
arr.indexOf(元素,開始位置); //從開始位置繼續向後找. |
|
arr.lastIndexOf(元素) //返回元素索引位置,若是沒有返回-1,從後往前找 |
|
|
|
10.tostring() 轉換爲字符串 |
|
|
|
數組轉換爲字符串 |
|
arr.toString(); 將數組中的每一個元素用逗號連接成字符串 |
|
|
|
11.join() 數組拼接分隔符 |
|
arr.join(); //默認以逗號鏈接數組,拼接成字符串 |
|
arr.join(分隔符); //以分隔符鏈接數組元素,拼接成字符串 |
|
|
|
|
|
9.其餘 |
|
1.變量的命名規範 |
|
1.字母,數字,下劃線,$等組合, |
|
2.數字不能開頭 |
|
3.不能是關鍵字 |
|
4.不能是中文 |
|
5.建議使用駝峯命名 |
|
2.輸出打印 |
|
alert() |
|
console.log() |
|
prompt(); |
|
|
|
3.轉義字符 |
|
\n 換行 |
|
\t tab製表符 |
|
|
|
|
|
4.預解析 |
|
變量聲明和函數聲明提早 |
|
|
|
5.做用域和做用域鏈 |
|
做用域:變量的做用範圍 |
|
做用域鏈: 人外有人,天外有天 |
|
|
|
6.局部變量和全局變量 |
|
全局變量有兩種: |
|
1.在括號外面直接寫的變量 |
|
2.在函數內部,未使用var聲明但直接賦值的變量 |
|
|
|
局部變量: |
|
1.形參就是局部變量 |
|
2.函數內部的變量就是局部變量 |
|
|
|
注意:js中沒有塊級做用域 |
|
{ |
|
var a=1; |
|
} |
|
|
|
|
|
7.this和new的理解 |
|
this的指向問題: |
|
1.函數在定義this的時候是不肯定的,只有在調用的時候才能夠肯定 |
|
2.通常函數直接執行,內部this指向全局window |
|
3.this的指向,誰調用指向誰 |
|
4.構造函數中的this 對象的實例 |
|
new在執行時會作四件事情 |
|
1.new會在內存中建立一個新的空對象 |
|
2.new會讓this指向這個新的對象 |
|
3.執行構造函數裏面的代碼,目的是給這個新對象加屬性和方法 |
|
4.new會返回這個新對象,因此構造函數裏面不須要return |
|
|
|
8.運算符和優先級 |
|
1.() |
|
2.++ -- ! |
|
3.先* / % 後+ - |
|
4.< > <= >= == != === !== |
|
5.先&& 後|| |
|
6.賦值運算符 |
|
注意: 等於和不等於 == === != !== |
|
++a 和 a++ |
|
&& 而且 |
|
|| 或者 |
|
! 取反 |