数组
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是简单类型保存在栈中,栈中存储的是对象的地址