JS中對象分為3種:1.自定義對象 2.內置對象 (1、2都是JS基礎對象,屬於ECMAScript)
3.瀏覽器對象(JS獨有的)。
內置對象就是指JS語言自帶的一些對象,這些對象供開發者使用,並提供了一些常用的或是最基本而必要的功能(屬性和方法)。
最大的優點:幫助我們快速開發。
JS提供了多個內置對象:Math、Date、Array、String等
一:Math 數學對象,不是構造函數,直接使用
//案例:猜數字游戲 //程序隨機生成一個1-10之間的數字,並讓用戶輸入一個數字 //1.如果大於該數字,就提示,數字大了,繼續猜; //2.如果小於該數字,就提示數字小了,繼續猜; //3.如果等於該數字,就提示猜對了,結束程序 function getSuiji(min,max){ return Math.floor(Math.random()*(max-min+1)+min); } //console.log(getSuiji(1,10)); var suiji=getSuiji(1,10); while(true){//死循環 var num=prompt('你來猜:輸入1-10之間的一個數字'); if(num>suiji){ alert('猜大了'); }else if(num<suiji){ alert('猜小啦'); }else if(num==suiji){ alert('你猜對啦'); break;//退出整個循環 } }
Math案例
//案例:猜數字游戲 //程序隨機生成一個1-10之間的數字,並讓用戶輸入一個數字 //1.如果大於該數字,就提示,數字大了,繼續猜; //2.如果小於該數字,就提示數字小了,繼續猜; //3.如果等於該數字,就提示猜對了,結束程序 function getSuiji(min,max){ return Math.floor(Math.random()*(max-min+1)+min); } //console.log(getSuiji(1,10)); var suiji=getSuiji(1,10); while(true){//死循環 var num=prompt('你來猜:輸入1-10之間的一個數字'); if(num>suiji){ alert('猜大了'); }else if(num<suiji){ alert('猜小啦'); }else if(num==suiji){ alert('你猜對啦'); break;//退出整個循環 } }
二:Date 日期對象 是構造函數,需實例化后使用
//Date()日期對象 是一個構造函數 必須使用new來調用 var arr = new Array(); //創建一個數組對象 var obj = new Object(); //創建一個對象實例 //1.使用Date 如果沒有參數 返回當前系統的當前時間 var date = new Date(); console.log(date); //2.參數常用的寫法 數字型 2021,10,06或者是字符串型'2021-10-6 6:6:6' var date1 = new Date(2021, 10, 6); console.log(date1); //返回11月不是10月 var date2 = new Date('2021-10-6 6:6:6'); console.log(date2); //總結一下:Date對象和Math對象不一樣,它是構造函數,需要對象實例化后才能使用,用來 處理日期和時間 //格式化日期 年月日 var date = new Date(); console.log(date.getFullYear()); //返回當前日期的年 console.log(date.getMonth() + 1); //返回月,月份加一呦 console.log(date.getDate()); //返回幾號 console.log(date.getTime()); //獲取時間 //寫2021年10月10日 星期日 var year = date.getFullYear(); var month = date.getMonth() + 1; var dates = date.getDate(); var days = date.getDay(); console.log('今天是:' + year + '年' + month + '月' + dates + '日 ' + '星期' + days); //自己寫的不大行哦 //采用數組整一波 var arr = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六']; i = date.getDay(); console.log('今天是:' + year + '年' + month + '月' + dates + '日 ' + arr[i]); //還是自己寫的,結果滿意過程和pink不一樣 console.log('今天是:' + year + '年' + month + '月' + dates + '日 ' + arr[days]); //最好版 //格式化日期 時分秒 var date = new Date(); console.log(date.getHours()); //時 console.log(date.getMinutes()); //分 console.log(date.getSeconds()); //秒 //要求分裝一個函數返回當前的時分秒 格式06:06:06 function getTime() { var time = new Date(); var h = time.getHours(); h = h > 10 ? h : '0' + h; //這一步我想不到耶 var m = time.getMinutes(); m = m > 10 ? m : '0' + m; var s = time.getSeconds(); s = s > 10 ? s : '0' + s; return h + ':' + m + ':' + s; } console.log(getTime()); //獲得Date總的毫秒數 不是當前時間的毫秒數 而是距離1970年1月1日過了多少毫秒數 //1.通過valueOf() getTime() var date = new Date(); console.log(date.valueOf()); //就是我們現在時間距離1970.1.1總的毫秒數 console.log(date.getTime()); //2.簡單寫法(最常用的寫法) var date1 = +new Date(); //+new Date()返回的就是總的毫秒數 console.log(date1); //3.H5新值的 獲得總的毫秒數 console.log(Date.now());
倒計時案例(重點案例!!!)
//倒計時案例 是個重點哦!!!!!!!!!!!!!!!! //①核心算法:輸入的時間減去現在的時間就是剩余的時間,即倒計時,但是不能拿着時分秒相減,比如05分減去25分,結果會是負數的。 //②用時間戳來做,用戶輸入時間總的毫秒數減去現在時間的總的毫秒數,得到的就是剩余時間的毫秒數 //③把剩余時間總的毫秒數轉換為天、時、分、秒(時間戳轉換為時分秒) //轉換公式如下: //· d=parseInt(總秒數/60/60/24);//計算天數 //· h=parseInt(總秒數/60/60%24);//計算小時 //· m=parseInt(總秒數/60%60);//計算分數 //· s=parseInt(總秒數%60);//計算當前秒數 function countDown(time){ var nowTime= +new Date();//返回的是當前時間總的毫秒數 var inputTime= +new Date(time);//返回的是用戶輸入時間總的毫秒數、 var times=(inputTime - nowTime)/1000;//time是剩余時間總的秒數 var d=parseInt(times/60/60/24);//計算天數 d = d<10?'0'+d:d; var h=parseInt(times/60/60%24);//計算小時 h = h<10?'0'+h:h; var m=parseInt(times/60%60);//計算分數 m = m<10?'0'+m:m; var s=parseInt(times%60); s = s<10?'0'+s:s; return d+'天'+h+'時'+m+'分'+s+'秒'; } console.log(countDown('2021-10-11 18:00:00')); var date =new Date(); console.log(date);
三:Array 數組對象
//創建數組的兩種方式 //1.利用數組字面量 var arr = [1, 2, 3]; console.log(arr[0]); //2.利用new Array() //var arr1=new Array();創建了一個空的數組 //var arr1=new Array(2);//這個2表示數組的長度為2 里面有兩個空的數組元素 var arr1 = new Array(2, 3); //等價於[2,3] 這樣寫表示里面有2個數組元素是2和3 console.log(arr1); //檢測是否為數組 //(1)instanceof 運算符 可以用來檢測是否為數組 var arr = []; var obj = {}; console.log(arr instanceof Array); console.log(obj instanceof Array); //(2)Array.isArray(參數);H5新增方法ie9以上版本才支持 console.log(Array.isArray(arr)); console.log(Array.isArray(obj)); //添加數組元素 //1.push()在數組末尾添加一個或多個數組元素 push推 var arr = [1, 2, 3]; //arr.push(4,'XYY'); console.log(arr.push(4, 'XYY')); //5 console.log(arr); //push可以給數組追加新的元素 //push()參數直接寫 數組元素就可以 //push完畢之后,返回的結果是新數組的長度 //原數組也會發生變化 //2.unshift 在數組開頭添加一個或多個數組元素 console.log(arr.unshift(0, 'hh')); console.log(arr); //unshift在數組前面追加新的元素 //unshift()參數直接寫 數組元素 //unshift完畢后返回新數組的長度 //原數組也會發生變化 //添加數組元素總結:吼吼吼,push()和unshift()不就是一個后一個前嘛 //刪除數組元素 //pop()刪除數組最后一個元素,一次只能刪除一個元素 //pop()沒有參數 //pop完畢之后返回結果是刪除的那個元素 //原數組會發生變化 console.log(arr.pop()); //XYY ,返回的結果是刪除的那個元素 console.log(arr); //shift()刪除數組最后一個元素,一次只能刪除一個元素 //shift()沒有參數 //shift完畢之后返回結果是刪除的那個元素 //原數組會發生變化 console.log(arr.shift()); //篩選數組 //有一個包含工資的數組[1500,1200,2000,2100,1800],要求把數組中工資超過2000的刪除,剩余的放到新數組中 var arr = [1500, 1200, 2000, 2100, 1800]; var newArr = []; for (var i = 0; i <= arr.length - 1; i++) { if (arr[i] < 2000) { //newArr[newArr.length]=arr[i]; newArr.push(arr[i]); } } console.log(newArr); //數組排序 //翻轉數組 var arr1 = ['ha', 'hia', 'he']; arr1.reverse(); console.log(arr1); //數組排序(冒泡排序) var arr2 = [3, 2, 1, 5, 4]; arr2.sort(); console.log(arr2); var arr3 = [13, 2, 11, 5, 4]; arr3.sort(function(a, b) { return a - b; //升序 return b - a; //降序 }); console.log(arr3); //獲取數組元素索引 //indexOf(數組元素)返回該數組元素的索引號 從前面開始查找 //只返回第一個滿足條件的索引號 //如果在該數組里找不到元素,就返回-1 var arr = [1, 2, 3, 4, 5, 6, 7, 8]; console.log(arr.indexOf(8)); //返回7,果真不假呢 console.log(arr.indexOf(0)); //返回-1 //indexOf(數組元素)返回該數組元素的索引號 從后面開始查找 console.log(arr.lastIndexOf(8));//7 console.log(arr.indexOf(0)); //返回-1 console.log(arr.lastIndexOf(6));//5 //重點案例!!!!!!!!!! //數組去重數組[1,4,5,63,5,7,9]要求去掉重復元素 //核心算法:遍歷舊數組,然后拿着舊數組元素去查詢新數組,如果該元素在新數組里面沒有出現過,我們就添加,否則不添加 //如何知道該元素存不存在嘞?利用 新數組.indexOf(數組元素) 如果返回時 -1就說明新數組沒有改元素 //封裝一個去重的函數 unique 獨一無二 function unique(arr){ var newArr=[]; for(var i=0;i<arr.length;i++){ if(newArr.indexOf(arr[i])=== -1){ newArr.push(arr[i]); } } return newArr; } var demo=unique([1,4,5,63,5,7,9]); console.log(demo); //數組轉換為字符串 //1.toString()將數組轉為字符串 var arr=[1,2,3]; console.log(arr.toString()); //2.join分隔符 var arr1=['1','2','3']; console.log(arr.join());//1,2,3 console.log(arr.join('-'));//1-2-3 console.log(arr.join('&'));//1&2&3
Array對象常用方法總結:unshift( ) 數組開頭增加 shift( ) 數組開頭刪除一項
push( ) 數組末尾增加 pop( )數組末尾刪除一項
concat( ) 數組的拼接 arr1.concat( arr2,arr3....)
使用concat可以實現數組的克隆,concat()中不傳參數
splice(index, howmany, item1, ...itemx)
splice 可以根據參數實現數組的刪除,增加,替換
前兩個參數 index 和 howmany 是必需的參數,后面的參數可選參數
splice(index, 0 ,item1, item2...) 增加
從索引 index 開始增加,增加的內容插入到索引 index 前面
splice(index, n) 刪除
從索引 index 開始刪除n個,如果只有一個參數splice(index),就是從索引 index 開始后面的內容全部刪除
splice(index, n,item1,item2...) 替換
從索引 index開始替換 n 個,替換的內容為item1, item2....
slice(n,m) 截取
從索引 n 截取到索引 m 但不包括 m ,原數組不發生改變
slice(0)或splice()可以實現數組的克隆
reverse() 數組翻轉
返回值是翻轉后的新數組,原數組發生改變
sort() 數組排序
使用方法:sort(function (a,b){return a-b}) 從小到大排
sort(function (a,b){return b-a}) 從大到小排
toString( ) 數組轉字符串
把數組轉成以逗號分隔的字符串
join(拼接形式) 拼接
把數組拼接成以其他形式分割的字符串,配合eval()可以實現數學運算 eval(join(‘+’))
數組常用但不兼容的方法:
indexOf(查找內容) 查找
arr.indexOf(查找內容) 查找數組中是否有某項,有的話返回該項的所引,沒有話返回-1;
forEach() 遍歷
forEach接收兩個參數,一個callback,thisArg
callback接收三個參數:1)item 2)index 3)input
thisArg用來改變callback中的this指向;
forEach 沒有返回值,但是map有返回值
map()遍歷
四:String 字符串對象
var str='xyyyyy'; console.log(str.length); //對象才有屬性和方法 復雜數據類型才有屬性和方法 //簡單數據類型為什么會有length屬性呢? //基本包裝類型: 就是把簡單數據類型包裝成為了復雜數據類型 //1.把簡單數據類型包裝成復雜數據類型 var temp=new String('xyyyyy'); //2.把臨時變量的值給str str=temp; //3.銷毀這個臨時變量 temp=null; //基本包裝類型就是把簡單數據類型包裝成復雜數據類型,這樣基本數據類型就有了屬性和方法 //案例:查找字符串‘abcoefoxyozzopp’中所有o出現的位置以及次數 //①核心算法:先查找第一個o出現的位置 //②然后只要indexOf返回的結果不是-1就繼續往后查找 //③因為indexOf只能查找到第一個,所以后面的查找,利用第二個參數,當前索引加1,從而繼續查找 var str='abcoefoxyozzopp'; var index=str.indexOf('o'); var num=0; //console.log(index); while(index !== -1){ console.log(index); num++; index=str.indexOf('o',index+1); } console.log('o出現次數:'+num); //根據位置返回字符 //1.charAt(index)根據位置返回字符 var str='XYY'; console.log(str.charAt(2));//Y //遍歷所有的字符 for(var i=0;i<str.length;i++){ console.log(str.charAt(i)); } //2.charCodeAt(index)返回相應索引號的字符ASCII值 目的:判斷用戶按下了那個鍵 console.log(str.charCodeAt(0));//88 //3.str[index] H5新增 console.log(str[0]); //字符串操作方法 //1.concat('字符串','字符串2'···) var str='Xyy'; console.log(str.concat('ing')); //2.substr('截取的起始位置','截取幾個字符'); var str1='夏穎宇宙最帥'; console.log(str1.substr(2,2));//宇宙 //3.replace('被替換的字符','替換為的字符')只會替換第一個字符 var str='Xying'; console.log(str.replace('X','Y')); //4.字符串轉換為數組 split('分隔符') var str='red,pink,yellow'; console.log(str.split(',')); var str='red&pink&yellow'; console.log(str.split('&'));
字符串方法總結:
charAT(index) 通過索引找字符
charCodeAt(index) 通過索引找到字符的 Unicode 編碼。這個返回值是 0 - 65535 之間的整數。
方法 charCodeAt() 與 charAt() 方法執行的操作相似,只不過前者返回的是位於指定位置的字符的編碼,而后者返回的是字符子串。
indexOf() 從前往后找,找到返回內容的索引,找不到返回-1;
lastIndexOf() 從后往前找,找到返回內容的索引,找不到返回-1;
slice(n,m) 從索引n 查找到索引m 但不包括m,slice可以取負值
substring(n,m) 從索引n 查找到索引m ,但不包括m, 不可以取負值
substr(n,m) 從索引n開始截取m 個
split(切割形式) 把一個字符串分割成字符串數組。
toUpperCase()轉大寫字母 toLowerCase() 轉小寫字母