JS基礎(chǔ)第二節(jié)

一、數(shù)組

數(shù)組是一個(gè)有序列表,所以有下標(biāo).

并且數(shù)組在js中可以存在任意類型的數(shù)據(jù).并且同一個(gè)數(shù)組中可以存放不同的類型.

獲取數(shù)組容量可以用length.

1.創(chuàng)建數(shù)組

使用Array數(shù)組對象來創(chuàng)建數(shù)組

定義一個(gè)空數(shù)組

var ? ?arr1=newArray();

定義一個(gè)數(shù)組length是20,并且每個(gè)元素都是未定義

var ? ?arr2=newArray(20);

多個(gè)值代表數(shù)組內(nèi)部元素,而上面的那種寫法一個(gè)值代表容量

var ?arr3=newArray(1,2,3);

使用字面量(語法糖,笑笑語法),來創(chuàng)建數(shù)組

var ? arr5=[];

var ? arr6=[1,2,3,4];

在使用字面量創(chuàng)建數(shù)組時(shí),一個(gè)值不再代表容量,代表就是一個(gè)值。區(qū)別于用Array對象創(chuàng)建的數(shù)組。

var ? arr7=[20];

怎么使用數(shù)組:

訪問數(shù)組元素 語法格式:數(shù)組名[下標(biāo)]

下標(biāo)從0開始數(shù),到數(shù)組容量減去1。不允許越界訪問

在很多應(yīng)用中,不管是遍歷數(shù)組還是為數(shù)組賦值,都離不開for循環(huán)。

var ? arr2=[];//創(chuàng)建一個(gè)空數(shù)組

for(var ? i=0; i<20; i++) {//循環(huán)賦值

arr2[i]=parseInt(Math.random()*(40-20+1)+20)}

2.Math數(shù)學(xué)對象

Math對象, 針對于數(shù)字。

Math隨機(jī)函數(shù):Math.random() [0,1)之間的浮點(diǎn)數(shù)

如果想得到[a,b]的隨機(jī)整數(shù)

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);//第一個(gè)數(shù)是底數(shù)第二個(gè)數(shù)是冪

//平方根,開平方

var ? ?num6=Math.sqrt(4);


3.數(shù)組排序

冒泡排序,雙層for循環(huán)

原理:冒泡排序名稱的緣來是根據(jù)氣泡排序的原理,通過一趟趟的比較,每一趟可以得到當(dāng)前趟的最大值

比較相鄰兩個(gè)值的大小關(guān)系,如果前面的大于后面的,交換位置

外層循環(huán)控制比較的趟數(shù),內(nèi)層循環(huán)控制每一趟比較的次數(shù)

//定義一個(gè)數(shù)組

var ?arr=[ ];

for(var ? ?i=0;i<5;i++) {//隨機(jī)產(chǎn)生一個(gè)數(shù)組

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.數(shù)組對象

var ? arr=[1,2,3,4,5];

在尾部添加元素,push(),返回值為添加的元素之后的數(shù)組容量,不管有沒有接收返回值,都將元素添加到數(shù)組里面

var b=arr.push(6,7,8,9,12,18);

在頭部添加元素,unshift(),返回值為添加的元素之后的數(shù)組容量,元素的添加位置在數(shù)組頭部

var count2=arr.unshift(7);

刪除尾部元素,pop(),一次只能刪一個(gè),返回值為刪除的那個(gè)數(shù),并且數(shù)組本身最后一個(gè)元素也被刪除

var ? count3=arr.pop();

刪除頭部元素,shift(),一次只能刪一個(gè),返回值為刪除的那個(gè)數(shù),并且數(shù)組本身第一個(gè)元素也被刪除

var ? count4=arr.shift();

從指定位置開始刪除多少個(gè)元素,splice(),返回值為刪除的元素組成的數(shù)組,返回值是一個(gè)數(shù)組額!splice既可以進(jìn)行添加刪除的操作,又可以進(jìn)行替換的操作。splice添加的元素的個(gè)數(shù)可以不跟刪除的元素的個(gè)數(shù)相同。

var ? count5=arr.splice(1,2);

從下標(biāo)為1的地方刪除0個(gè)元素,并且新添加的元素從下標(biāo)為1,返回值沒有任何意義,是一個(gè)空數(shù)組

var ?count6=arr.splice(1,0,8,9);

數(shù)組排序方法,sort(): 方法能實(shí)現(xiàn)數(shù)組的排序(按照ASCII表的順序排序),按照ASCII表的順序排序,只能挨個(gè)數(shù)字或者字母比較,所以不行。可以用函數(shù)完成對數(shù)組的升序和降序。sort()返回值是一個(gè)排序之后的數(shù)組。

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))

數(shù)組的拼接,concat(): 方法可以實(shí)現(xiàn)兩個(gè)數(shù)組的拼接

var newArr=arr.concat(7,12,19);

var ? newArr2=arr.concat(arr2);

數(shù)組元素之間添加分隔符,join(),將數(shù)組分割成字符串

var ? arr=[12,8,9];

var ? ?str=arr.join("&");

console.log(str);

5.二維數(shù)組

二維數(shù)組解決行、列問題,二維數(shù)組有行,列概念,二維數(shù)組有雙下標(biāo)概念,數(shù)組元素是數(shù)組

var ? ?var2D=[

[1,2,3],

[4,5,6],

[7,8,9]

];


二、字符串

1.創(chuàng)建字符串

空字符串

var ? str= newString();

創(chuàng)建一個(gè)hello world

var ? str= newString("hello world !");

String()將數(shù)字轉(zhuǎn)換為字符串

var ? ?str=String(10);

toString()將數(shù)字轉(zhuǎn)換為字符串

var ? a=20;

var ? ?str1=a.toString();

2.字符串的操作

charAt():返回字符串的某一位;參數(shù)傳的值是單個(gè)值,數(shù)字和字符串都可以

var ?str="hello world";

console.log(str.charAt(6));//w

console.log(str.charAt('6'));//w

search: 查找,返回的是位置,如果找不到返回的是-1。得到的是傳入的字符串 在原來的字符串的位置,search傳入的都是符合正則驗(yàn)證的字符串

indexOf也是查找,可以傳入任何類型的字符串

var ? str="松江區(qū).泗涇鎮(zhèn).九干路麗德創(chuàng)業(yè)園";

console.log(str.search("泗涇鎮(zhèn)")); ? ? ? ?//4

console.log(str.indexOf("泗涇鎮(zhèn)")); ? ? ? //4

console.log(str.search(".")); ? ? ? ? ? ? ? ? ?//0

console.log(str.indexOf(".")); ? ? ? ? ? ? ? ?//3

字符串的截?。簊lice方法,傳入兩個(gè)參數(shù),一個(gè)代表start,一個(gè)代表end。從start位置開始截取,截取到end位置之前的最后一個(gè)字符。截取出來的字符串長度為end-start。如果參數(shù)為負(fù)數(shù),則將負(fù)數(shù)加上字符串長度,轉(zhuǎn)換成整數(shù)之后再進(jìn)行截取。如果負(fù)數(shù)的絕對值大于字符串的長度,start按照0算。如果start大于end將返回空字符串。

var ? str="hello world";

console.log(str.slice(1,7));

console.log(str.slice(-7,7));

substring和slice的區(qū)別,substring參數(shù)如果為負(fù)數(shù),直接變?yōu)?,然后運(yùn)算。substring兩個(gè)參數(shù)不需要保證前面的一定小于后面的,取兩者中小的作為start。

console.log(str.substring(-7,7));

console.log(str.substring(7,4));

substr第一個(gè)參數(shù)代表起始位置,第二個(gè)參數(shù)代表截取長度。

console.log(str.substr(3,7));

substring 和 slice如果給定一個(gè)參數(shù),將從這個(gè)參數(shù)開始截取到最后

console.log(str.substring(3));

console.log(str.slice(3));

replace 用第二個(gè)參數(shù)將第一個(gè)參數(shù)替換掉

var ? str="hello world";

console.log(str.replace("hello","hi"))

split() 方法用于把一個(gè)字符串分割成字符串?dāng)?shù)組,一般和正則一起用。將字符串按照給定的內(nèi)容精選分割,得到一個(gè)數(shù)組

console.log(str.split(" "));

空字符串全部分割

console.log(str.split(""));

concat()將一個(gè)字符串或多個(gè)字符串拼接起來,獲得一個(gè)新的字符串

+號可以直接拼接,運(yùn)算符重載

console.log(str.concat("hahaha"));

lastIndexOf()返回最后一個(gè)滿足條件的下標(biāo)

indexOf()返回的是第一個(gè)滿足條件的下標(biāo)

var ? ? str="hello world hello hello world";

console.log(str.indexOf("hello"));//0

console.log(str.lastIndexOf("hello"));//18


三、Date()日期對象

1.構(gòu)建日期對象

var ? ?nowDate= new ? ?Date();

console.log(nowDate); ? ? ? ? ?//獲取的的是當(dāng)前時(shí)間

console.log(typeof(nowDate)); ? ? //object

2.將日期字符串轉(zhuǎn)換為日期對象

日期對象有兩種:

yyy/MM/dd hh:mm:ss

yyy-MM-dd hh:mm:ss,在IE下轉(zhuǎn)換失敗

如果字符串yyy/MM/dd里面不給定時(shí)間,默認(rèn)時(shí)間00:00:00

如果字符串yyy-MM-dd里面不給定時(shí)間,默認(rèn)時(shí)間為當(dāng)前時(shí)區(qū)時(shí)間

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.可以直接給定值

可以單獨(dú)給的年月日 時(shí)分秒 毫秒,

月份給值是0~11的,0代表1月,11代表12月

小時(shí) 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位數(shù)的年份

month=d.getMonth();//獲取月份,從0開始,0表示1月

Date=d.getDate();//獲取月份中的天數(shù),日期

Day=d.getDay();//獲取是周幾,從0開始,0是周天

hour=d.getHours();//獲取小時(shí)

Minutes=d.getMinutes();//獲取分鐘

second=d.getSeconds();//獲取秒

m=d.getMilliseconds();//獲取毫秒

time=d.getTime();//獲取從1970年1月1日到現(xiàn)在的毫秒數(shù)

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.日期對象的設(shè)置方法

通過set方法可以將日期對象中的某一個(gè)值改掉

var ? myDate= new ? ? ?Date();

myDate.setFullYear(2017);

console.log(myDate);

myDate.setMonth(1);

console.log(myDate);

6.日期對象轉(zhuǎn)換為字符串對象的方法

var ? myDate= new ? ?Date();

console.log(myDate.toString());

console.log(myDate.toLocaleString())

7.日期對象的兩個(gè)靜態(tài)方法

快捷獲取當(dāng)前日期和1970.1.1之間 的毫秒數(shù)

console.log(Date.now());

快捷獲取某一個(gè)日期與1970.1.1之間 的毫秒數(shù)

console.log(Date.parse("2016/11/22 15:23:00"));


四、函數(shù)

定義:函數(shù)就是有特定功能的代碼段

分類:函數(shù)從定義的角度分,分為庫函數(shù)和自定義函數(shù)

庫函數(shù):Math.random() ? Array slice() ? ? string substring() ? Date ? ?getTime()......

系統(tǒng)提供的函數(shù)遠(yuǎn)遠(yuǎn)滿足不了我們的需求,所以我們需要自定義函數(shù)

函數(shù)的結(jié)構(gòu):定義函數(shù)的關(guān)鍵字 function,函數(shù)名,參數(shù)部分(),沒有參數(shù)()也不能省略,函數(shù)主體部分,大括號內(nèi)部的內(nèi)容

function ? ?alertHello() {

alert("hello");

}

在函數(shù)中,想要定義一個(gè)函數(shù),如果什么是未知的,就將什么聲明為參數(shù)

使用函數(shù),函數(shù)的調(diào)用,

1.自定義函數(shù)的分類

自定義函數(shù)的分類 從兩方面考慮:返回值(就是函數(shù)的內(nèi)部返回到外界的結(jié)果)和 參數(shù)

有參有返,參數(shù)與參數(shù)之間使用逗號隔開

function ? ?sum(num1,num2) {

//返回外界值,使用關(guān)鍵字return

return ? ? num1+num2;

//return之后的語句都不會(huì)執(zhí)行

num1++;

num2++;

}

//聲明一個(gè)變量接收返回值

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 //函數(shù)調(diào)用過程中,只會(huì)發(fā)生單純的值傳遞,形參會(huì)拷貝實(shí)參的值

有參數(shù)無返回值

function ? printNumber(num) {//定義函數(shù)

console.log(num);

}

printNumber(1);//函數(shù)調(diào)用

無參數(shù)有返回值

function ? ?getStuCount() {

return ? 28;

}

var ? stuCount=getStuCount();

console.log(stuCount);

無參數(shù)無返回值

function ? ? helloWorld(){

alert("hello world");

}

helloWorld();

調(diào)用函數(shù)中,為了讓函數(shù)正確執(zhí)行,就算沒有參數(shù),()也不能省略

2.函數(shù)的作用域

var ? ? ? a=10;//全局變量

//函數(shù)的作用域

function ? ? ?test() {

var ? ? ? b=10;//局部變量

alert(a++);

}

test();//10

全局變量必須在調(diào)用函數(shù)的位置之前,才能被使用。定義在函數(shù)內(nèi)部的變量叫局部變量,生命周期為函數(shù)的生命周期,當(dāng)函數(shù)執(zhí)行完之后就會(huì)被回收,所以函數(shù)外界不能使用函數(shù)內(nèi)部的變量。

獨(dú)立于函數(shù)存在的變量叫做全局變量,當(dāng)頁面關(guān)閉時(shí)才會(huì)被回收。所以說函數(shù)內(nèi)部可以訪問外界全局變量,但是必須保證聲明必須在使用之前。當(dāng)出現(xiàn)全局變量與局部變量重名時(shí),就近原則。

全局變量和局部變量只針對于函數(shù),對于for循環(huán)不適用。

3.匿名函數(shù)

匿名函數(shù)就是沒有名的函數(shù),可以直接執(zhí)行,不需要調(diào)用

如果想要匿名函數(shù)產(chǎn)生函數(shù)名,就要定義一個(gè)變量來接收,這個(gè)變量就是函數(shù)名,調(diào)用這個(gè)變量就可以執(zhí)行函數(shù)。

btn.onclick=function() {

alert("哈哈哈");

}

var ? ? ?fn=function() {//如果匿名函數(shù)想要名,

alert("呵呵");

}

fn();

4、函數(shù)遞歸

遞歸一定要有出口,否則將無限執(zhí)行 內(nèi)存崩潰

求5的階乘

function ? ? fact(num){

if(num==1) {

return ? ?1;

}else{

return ? ?num*fact(num-1);

}

}

var ? ?result=fact(5);

console.log(result);

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容