數組
1.定義數組:
a)通過字面量的方式定義數組
let ary=[1,2,3,4]
b)通過定義構造函數的方式定義數組:
let 數組名=new Array(值,值,值);
數組的操作方式
a)增
//在數組末尾添加值
arr.push(新增的內容)
//在數組的開始添加值
arr.unshift(新增的內容)
b)刪
//刪除數組末尾的值
arr.pop()
//刪除數組首部的值
arr.shift()
//刪除指定的值
arr.splice(操作的下標,刪除的個數)
排序
冒泡排序(js提供的實現方式)
//對數組進行冒泡排序:js提供了一個方法 sort()
//1.升序排列寫法
sort(function(a,b){
return a-b;})
//2.降序排列寫法
arr。sort(function(a,b){
return b-a;})
函數
注意點:+prompt(),prompt前面加?,變字符串類型為數值
//定義一個函數
//行參可以直接在函數名()中聲明,前面不用加let關鍵字
//調用函數的時候,給實參賦值即可
//形參的本質上就是一個變量,所以形參的命名完全可以按照變量的命名規則設置(叫什么都可以)
functtion 函數名(形參,形參){功能};
函數返回值
//如果希望在函數外部使用函數內部變量的值,則必須加返回值
//1.在函數內部將需要返回的值前面加return
//2.在函數外部定義一個變量接收函數內部的返回值:let變量=函數()
//舉例
function fn()
{
let a=123;
let b=456;
let c='abc';
//如果要返回多條數據
return [a,b,c];
}
//返回一個數組
let res=fn();
函數補充
1.兩個相同的函數,后面的會覆蓋前面的
2.實參和形參的個數不一致時,如果形參過多,會自動填上undefined
3.函數一旦碰到return 就不會往下執行了,函數的結束用return
匿名函數(沒有名字的函數)
function(){}
//函數只有被調用才可以執行,匿名函數連名字都沒有,如何調用執行的呢
//解決方案:
//a)將匿名函數賦值給一個變量
let fn=function(){}
//然后變量名()
fn();
//b)讓我們的匿名函數自己調用自己:自調用函數(自執行函數)
//語法:(函數體)();
//注意:自調用函數后面必須寫分號;
(function(){})();
作用域
1.let定義的變量或者const定義的變量,在同一個作用域中不能重復
2.程序在執行代碼的時候,先從當前的作用域中找變量,如果當前作用域中沒有變量,則要去全局作用域中找變量,找到就執行,否則報錯
對象
對象定義
通俗理解:對象也是一個容器,對象容器中保存的就是各種數據(比數組還要強大)
專業理解:對象是一種數據類型(以鍵值對形式保存數據的一種數據類型且數據是沒有順序的)
對象可以解決更復雜的問題----從Ajax開始遇到的所有數據90%以上都是對象格式
定義對象
//寫法1(推薦)
let 自定義對象名={
屬性名:屬性值,
方法名:函數
}
//構造函數寫法
let 自定義對象名=new Object();//例子
對象的使用
//查
對象.屬性值
//改
對象.屬性=值
//增
對象名.新屬性名=新值
//刪(很少這么用)
delete 對象名.屬性名
增加對象中的值
a)在對象中新增屬性:對象名['自定義屬性名']=值;
b)對象名.自定義屬性名=值
c)在對象中新增方法:對象名['自定義方法名']=function(){}
d)對象名.方法名=function(){}
遍歷對象
//通過遍歷對象來獲取對象中的每一個值
for(let 變量(隨意) in 要被遍歷的對象)
{
}
//語法解釋:
//1.for in語法也是一個循環,循環次數會自動根據對象中的屬性個數進行遍歷
//2.for in語法中 變量就是對象中的屬性名(方法名)
//3.哪個對象要被遍歷,就把當前對象寫到in后面
//4.獲取對象中的值,必須通過對象名[變量]獲取let obj={
uname:'張三',
age:23,
myheight:180
//如果出現方法,還需要特殊處理eat: function () { console.log('chifan'); }
}
//要求:將對象中的每一個屬性值輸出到控制臺中
for(let abc in obj)
{
//abc這個變量保存了對象中所有的屬性和方法
console.log(abc);}
//獲取對象中的每一個屬性對應的值
console.log(obj[abc]);
獲取數組中的對象
<script>// 輸出數組中的每一個值let ary = ['a', 'b', 'c'];for (let i = 0; i < ary.length; i++) {console.log(ary[i]);}// 遍歷數組中的每一個對象let students = [{ name: '小米', age: 18, gender: '男', hometown: '河北省' },{ name: '小軍', age: 18, gender: '女', hometown: '山西省' },{ name: '小飛', age: 21, gender: '男', hometown: '山東省' },{ name: '小超', age: 18, gender: '男', hometown: '河男省' }]for (let j = 0; j < students.length; j++) {console.log(students[j]);// 分貝輸出每一個對象的姓名和年齡// students[j]代表每一個對象for (let abc in students[j]) { console.log(students[j][abc]) }}</script>
將數組中的對象渲染成表格
<script>// 輸出數組中的每一個值// let ary = ['a', 'b', 'c'];// for (let i = 0; i < ary.length; i++) {// console.log(ary[i]);// }// 遍歷數組中的每一個對象let students = [{ name: '小米', age: 18, gender: '男', hometown: '河北省' },{ name: '小軍', age: 18, gender: '女', hometown: '山西省' },{ name: '小飛', age: 21, gender: '男', hometown: '山東省' },{ name: '小超', age: 18, gender: '男', hometown: '河男省' }]//1.表格中有多少條數據,就要創建愛你多少個tr標簽//2.tr標簽中有5個td標簽//3.td標簽中的數據不是隨便寫的,td標簽中的數據,就是對象中的每一個屬性值document.write(`<table>`);document.write(`<tr><th>序號</th><th>姓名</th><th>年齡</th><th>性別</th><th>家鄉</th></tr>`)//根據數組中的數據,動態的在頁面中創建tr標簽for (let i = 0; i < students.length; i++) {document.write(`<tr><td>${i + 1}</td><td>${students[i].name}</td><td>${students[i].age}</td><td>${students[i].gender}</td><td>${students[i].hometown}</td></tr>`);}document.write(`</table>`);</script>
Math
Math為內置對象
提供的方法
a)random:生成0-1之間的隨機數(包含0,不包含1)
b)ceil:向上取整
c)floor:向下取整
//max:找最大數
//min:找最小數
//pow:冪運算
//abs:絕對值
生成任意范圍內的隨機數
//生成N-M之間的隨機數
Math.floor(Math.random()*(M-N+1))+N
點名 解決名字總是重復出現,可以將已經出現過的名字從數組中刪除
專業術語
數據類型的存儲方式
數據類型的分類:簡單類型(數字、字符串、布爾、undefined)+引用類型(對象)
簡單類型在棧上保存數據,引用類型在堆上保存數據
這里的對象是復雜類型保存在堆上,而對象賦值給obj,obj是簡單類型保存在棧中,棧中存儲的是對象的地址