一、數組
數組是一個有序列表,所以有下標.
并且數組在js中可以存在任意類型的數據.并且同一個數組中可以存放不同的類型.
獲取數組容量可以用length.
1.創建數組
使用Array數組對象來創建數組
定義一個空數組
var ? ?arr1=newArray();
定義一個數組length是20,并且每個元素都是未定義
var ? ?arr2=newArray(20);
多個值代表數組內部元素,而上面的那種寫法一個值代表容量
var ?arr3=newArray(1,2,3);
使用字面量(語法糖,笑笑語法),來創建數組
var ? arr5=[];
var ? arr6=[1,2,3,4];
在使用字面量創建數組時,一個值不再代表容量,代表就是一個值。區別于用Array對象創建的數組。
var ? arr7=[20];
怎么使用數組:
訪問數組元素 語法格式:數組名[下標]
下標從0開始數,到數組容量減去1。不允許越界訪問
在很多應用中,不管是遍歷數組還是為數組賦值,都離不開for循環。
var ? arr2=[];//創建一個空數組
for(var ? i=0; i<20; i++) {//循環賦值
arr2[i]=parseInt(Math.random()*(40-20+1)+20)}
2.Math數學對象
Math對象, 針對于數字。
Math隨機函數:Math.random() [0,1)之間的浮點數
如果想得到[a,b]的隨機整數
var ? randomNum = parseInt(Math.random() * (b - a + 1) + a); ? //如果不加1,就不能獲取到最大值
取最大值
var ? a=Math.max(1,5,7);
取最小值
var ? a=Math.min(1,5,7);
向上取整
var ? num1=Math.ceil(1.1);
向下取整
var ? num2=Math.floor(1.1);
四舍五入
var ? num3=Math.round(2.5);
絕對值
var ? ?num4=Math.abs(-6);
次方
var ? ?num5=Math.pow(5,2);//第一個數是底數第二個數是冪
//平方根,開平方
var ? ?num6=Math.sqrt(4);
3.數組排序
冒泡排序,雙層for循環
原理:冒泡排序名稱的緣來是根據氣泡排序的原理,通過一趟趟的比較,每一趟可以得到當前趟的最大值
比較相鄰兩個值的大小關系,如果前面的大于后面的,交換位置
外層循環控制比較的趟數,內層循環控制每一趟比較的次數
//定義一個數組
var ?arr=[ ];
for(var ? ?i=0;i<5;i++) {//隨機產生一個數組
arr[i]=parseInt(Math.random()*(40-20+1)+20);
}
//從小到大排序,大的在后面,小的在前面(升序)
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;
}
}
}
console.log(arr);
4.數組對象
var ? arr=[1,2,3,4,5];
在尾部添加元素,push(),返回值為添加的元素之后的數組容量,不管有沒有接收返回值,都將元素添加到數組里面
var b=arr.push(6,7,8,9,12,18);
在頭部添加元素,unshift(),返回值為添加的元素之后的數組容量,元素的添加位置在數組頭部
var count2=arr.unshift(7);
刪除尾部元素,pop(),一次只能刪一個,返回值為刪除的那個數,并且數組本身最后一個元素也被刪除
var ? count3=arr.pop();
刪除頭部元素,shift(),一次只能刪一個,返回值為刪除的那個數,并且數組本身第一個元素也被刪除
var ? count4=arr.shift();
從指定位置開始刪除多少個元素,splice(),返回值為刪除的元素組成的數組,返回值是一個數組額!splice既可以進行添加刪除的操作,又可以進行替換的操作。splice添加的元素的個數可以不跟刪除的元素的個數相同。
var ? count5=arr.splice(1,2);
從下標為1的地方刪除0個元素,并且新添加的元素從下標為1,返回值沒有任何意義,是一個空數組
var ?count6=arr.splice(1,0,8,9);
數組排序方法,sort(): 方法能實現數組的排序(按照ASCII表的順序排序),按照ASCII表的順序排序,只能挨個數字或者字母比較,所以不行。可以用函數完成對數組的升序和降序。sort()返回值是一個排序之后的數組。
var ?arr=[12,8,9,5,3,28];
var ? d=arr.sort();
?//console.log(arr.sort())
//console.log(d);
//sort里面封裝的有判斷語句
function ? sort1(a,b){
return ? ?a-b;
}
console.log(arr.sort(sort1))
數組的拼接,concat(): 方法可以實現兩個數組的拼接
var newArr=arr.concat(7,12,19);
var ? newArr2=arr.concat(arr2);
數組元素之間添加分隔符,join(),將數組分割成字符串
var ? arr=[12,8,9];
var ? ?str=arr.join("&");
console.log(str);
5.二維數組
二維數組解決行、列問題,二維數組有行,列概念,二維數組有雙下標概念,數組元素是數組
var ? ?var2D=[
[1,2,3],
[4,5,6],
[7,8,9]
];
二、字符串
1.創建字符串
空字符串
var ? str= newString();
創建一個hello world
var ? str= newString("hello world !");
String()將數字轉換為字符串
var ? ?str=String(10);
toString()將數字轉換為字符串
var ? a=20;
var ? ?str1=a.toString();
2.字符串的操作
charAt():返回字符串的某一位;參數傳的值是單個值,數字和字符串都可以
var ?str="hello world";
console.log(str.charAt(6));//w
console.log(str.charAt('6'));//w
search: 查找,返回的是位置,如果找不到返回的是-1。得到的是傳入的字符串 在原來的字符串的位置,search傳入的都是符合正則驗證的字符串
indexOf也是查找,可以傳入任何類型的字符串
var ? str="松江區.泗涇鎮.九干路麗德創業園";
console.log(str.search("泗涇鎮")); ? ? ? ?//4
console.log(str.indexOf("泗涇鎮")); ? ? ? //4
console.log(str.search(".")); ? ? ? ? ? ? ? ? ?//0
console.log(str.indexOf(".")); ? ? ? ? ? ? ? ?//3
字符串的截取:slice方法,傳入兩個參數,一個代表start,一個代表end。從start位置開始截取,截取到end位置之前的最后一個字符。截取出來的字符串長度為end-start。如果參數為負數,則將負數加上字符串長度,轉換成整數之后再進行截取。如果負數的絕對值大于字符串的長度,start按照0算。如果start大于end將返回空字符串。
var ? str="hello world";
console.log(str.slice(1,7));
console.log(str.slice(-7,7));
substring和slice的區別,substring參數如果為負數,直接變為0,然后運算。substring兩個參數不需要保證前面的一定小于后面的,取兩者中小的作為start。
console.log(str.substring(-7,7));
console.log(str.substring(7,4));
substr第一個參數代表起始位置,第二個參數代表截取長度。
console.log(str.substr(3,7));
substring 和 slice如果給定一個參數,將從這個參數開始截取到最后
console.log(str.substring(3));
console.log(str.slice(3));
replace 用第二個參數將第一個參數替換掉
var ? str="hello world";
console.log(str.replace("hello","hi"))
split() 方法用于把一個字符串分割成字符串數組,一般和正則一起用。將字符串按照給定的內容精選分割,得到一個數組
console.log(str.split(" "));
空字符串全部分割
console.log(str.split(""));
concat()將一個字符串或多個字符串拼接起來,獲得一個新的字符串
+號可以直接拼接,運算符重載
console.log(str.concat("hahaha"));
lastIndexOf()返回最后一個滿足條件的下標
indexOf()返回的是第一個滿足條件的下標
var ? ? str="hello world hello hello world";
console.log(str.indexOf("hello"));//0
console.log(str.lastIndexOf("hello"));//18
三、Date()日期對象
1.構建日期對象
var ? ?nowDate= new ? ?Date();
console.log(nowDate); ? ? ? ? ?//獲取的的是當前時間
console.log(typeof(nowDate)); ? ? //object
2.將日期字符串轉換為日期對象
日期對象有兩種:
yyy/MM/dd hh:mm:ss
yyy-MM-dd hh:mm:ss,在IE下轉換失敗
如果字符串yyy/MM/dd里面不給定時間,默認時間00:00:00
如果字符串yyy-MM-dd里面不給定時間,默認時間為當前時區時間
var ? ? ? d= new ? ? Date("2016/11/22 11:52:30");
console.log(d);
var ? ? ? d= new ? ? Date("2016-11-22 11:52:30");
console.log(d);
var ? ? ? d= new ? ? ? ?Date("2016/11/22");
console.log(d);
var ? ? ? d= new ? ? ? ?Date("2016-11-22");
console.log(d);
3.可以直接給定值
可以單獨給的年月日 時分秒 毫秒,
月份給值是0~11的,0代表1月,11代表12月
小時 0~23
分鐘,秒0~59
毫秒0~999
var ? ? ?d= new ? ? ?Date(1993,0,30);
console.log(d);
var ? ? ?newD= new ? ? ? Date(2017,0,1);
console.log(newD);
4.get方法
var ? ? d= newDate();
year=d.getFullYear();//獲取4位數的年份
month=d.getMonth();//獲取月份,從0開始,0表示1月
Date=d.getDate();//獲取月份中的天數,日期
Day=d.getDay();//獲取是周幾,從0開始,0是周天
hour=d.getHours();//獲取小時
Minutes=d.getMinutes();//獲取分鐘
second=d.getSeconds();//獲取秒
m=d.getMilliseconds();//獲取毫秒
time=d.getTime();//獲取從1970年1月1日到現在的毫秒數
console.log(year);
console.log(month);
console.log(Date);
console.log(Day);
console.log(hour);
console.log(Minutes);
console.log(second);
console.log(m);
console.log(time);
5.日期對象的設置方法
通過set方法可以將日期對象中的某一個值改掉
var ? myDate= new ? ? ?Date();
myDate.setFullYear(2017);
console.log(myDate);
myDate.setMonth(1);
console.log(myDate);
6.日期對象轉換為字符串對象的方法
var ? myDate= new ? ?Date();
console.log(myDate.toString());
console.log(myDate.toLocaleString())
7.日期對象的兩個靜態方法
快捷獲取當前日期和1970.1.1之間 的毫秒數
console.log(Date.now());
快捷獲取某一個日期與1970.1.1之間 的毫秒數
console.log(Date.parse("2016/11/22 15:23:00"));
四、函數
定義:函數就是有特定功能的代碼段
分類:函數從定義的角度分,分為庫函數和自定義函數
庫函數:Math.random() ? Array slice() ? ? string substring() ? Date ? ?getTime()......
系統提供的函數遠遠滿足不了我們的需求,所以我們需要自定義函數
函數的結構:定義函數的關鍵字 function,函數名,參數部分(),沒有參數()也不能省略,函數主體部分,大括號內部的內容
function ? ?alertHello() {
alert("hello");
}
在函數中,想要定義一個函數,如果什么是未知的,就將什么聲明為參數
使用函數,函數的調用,
1.自定義函數的分類
自定義函數的分類 從兩方面考慮:返回值(就是函數的內部返回到外界的結果)和 參數
有參有返,參數與參數之間使用逗號隔開
function ? ?sum(num1,num2) {
//返回外界值,使用關鍵字return
return ? ? num1+num2;
//return之后的語句都不會執行
num1++;
num2++;
}
//聲明一個變量接收返回值
var ? result=sum(10,20);
console.log(result);
function ? sum(num1,num2) {
num1++;
num2++;
return ? ?num1+num2;
}
var ? n1=10,n2=20;
var ? ? ?result=sum(n1, n2);
console.log(result);//32
console.log(n1, n2);//10? ? ? 20 //函數調用過程中,只會發生單純的值傳遞,形參會拷貝實參的值
有參數無返回值
function ? printNumber(num) {//定義函數
console.log(num);
}
printNumber(1);//函數調用
無參數有返回值
function ? ?getStuCount() {
return ? 28;
}
var ? stuCount=getStuCount();
console.log(stuCount);
無參數無返回值
function ? ? helloWorld(){
alert("hello world");
}
helloWorld();
調用函數中,為了讓函數正確執行,就算沒有參數,()也不能省略
2.函數的作用域
var ? ? ? a=10;//全局變量
//函數的作用域
function ? ? ?test() {
var ? ? ? b=10;//局部變量
alert(a++);
}
test();//10
全局變量必須在調用函數的位置之前,才能被使用。定義在函數內部的變量叫局部變量,生命周期為函數的生命周期,當函數執行完之后就會被回收,所以函數外界不能使用函數內部的變量。
獨立于函數存在的變量叫做全局變量,當頁面關閉時才會被回收。所以說函數內部可以訪問外界全局變量,但是必須保證聲明必須在使用之前。當出現全局變量與局部變量重名時,就近原則。
全局變量和局部變量只針對于函數,對于for循環不適用。
3.匿名函數
匿名函數就是沒有名的函數,可以直接執行,不需要調用
如果想要匿名函數產生函數名,就要定義一個變量來接收,這個變量就是函數名,調用這個變量就可以執行函數。
btn.onclick=function() {
alert("哈哈哈");
}
var ? ? ?fn=function() {//如果匿名函數想要名,
alert("呵呵");
}
fn();
4、函數遞歸
遞歸一定要有出口,否則將無限執行 內存崩潰
求5的階乘
function ? ? fact(num){
if(num==1) {
return ? ?1;
}else{
return ? ?num*fact(num-1);
}
}
var ? ?result=fact(5);
console.log(result);