JS基礎第二節

一、數組

數組是一個有序列表,所以有下標.

并且數組在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);

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,748評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,165評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,595評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,633評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,435評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,943評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,035評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,175評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,713評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,599評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,788評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,303評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,034評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,412評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,664評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,408評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,747評論 2 370

推薦閱讀更多精彩內容