我们学习数组就得知道什么是数组。
一、数组初识/特点
- .数组:一组数据的集合,数组的每一个数据叫做一个元素;Array[4]:数组和长度;
- 数组元素可以是任意类型,同一个数组中的不同元素可能是对象或数组;
- 每个数组都具有一个length属性,length属性就是数组元素的个数(数组的长度);
- 数组中每个元素在数组中有一个位置,以数字表示,称为索引(下标);
- 索引从0开始排列,[0]表示第一个数据,以此类推;
- 数组最大的索引,始终比数组长度小1;
- 数组的数据类型是一个对象,其实就是加了个数字索引和length属性的特殊对象。
<script>
var arr=["小张","小王","小李","小明"];
alert(typeof arr);
alert(arr.length);
alert(arr[3]);
console.log(arr);
</script>
二、数组的创建
1.隐式方式创建的数组,最常用的方式;
<script>
var arr=["小张","小王","小李","小明"];
var arr=[1,2,3,4];
var arr=["小张",2,true,["小明","小李"],{}]; //数组中的数组和对象
var arr=[]; //空数组
console.log(arr);
</script>
2.直接实例化,通过构造函数Array()创建。(1)直接把数组元素写到括号里;(2)创建数组并给数组元素赋值;(3)规定了数组的初始长度,并给数组元素赋值(数组长度动态调整)。
<script>
//例子
//1.直接写
var arr=new Array("小张","小王","小明");
//2.给赋值
var arr=new Array();
arr[0]="小张";
arr[1]="小王";
arr[2]="小李";
arr[3]="小明";
//3.数组长度
var arr=new Array[3];
arr[0]="小张";
arr[1]="小李";
arr[2]="小王";
arr[3]="小明";
arr[4]="校花";
console.log(arr);
</script>
三、数组修改和增加
1.数组中数据的修改,直接使用下标对数组元素重新赋值;
2.数组中数据的增加:下标一样,不受影响,主义本质;
<script>
var arr=["小张","小王","小明","小李"];
//1.修改
arr[2]="小花";
//2.增加
arr[4]="小孙";
arr[5]="小红";
arr[6]="小赵";
arr[arr.length]="小花";
arr[arr.length]="小王";
</script>
四、普通for循环遍历数组
要求:在数组的每个数据后加上“写作业去”,并输出;
<script>
var arr=["小张","小王","小李","小明"];
//1.for循环(普通)
for(var i=0;i<4;i++){
document.write(arr[i]+"写作业去"+"<br>");
};
//2.for循环(length数组长度)
for(var i=0;i<arr.length;i++){
document.write(arr[i]+"写作业去"+"<br>");
};
//3.for循环(优化版)
var len=arr.length;
for(var i=0;i<len;i++){ //避免重复获取数组长度,提高效率
document.write(arr[i]+"写作业去"+"<br>");
};
</script>
五、其他方式遍历数组
<script>
var arr=["小张","小王","小李","小明"];
//4.for-in遍历(使用下标,使用的人很多,在所有遍历方式中效率最低)
for(i in arr){
document.write(arr[i]+"写作业去"+"<br>");
};
//5.for-of遍历(ES6,使用数据,for-of遍历比for-in遍历效率高,但比普通for循环效率低)
for(value of arr){
document.write(value+"写作业去"+"<br>");
};
</script>
六、获取数组中最大、最小值
直接看代码
<script>
//例子
var zxw=[21,35,13,86,72,64];
var xhw=zxw[0];
for(var i=0;i<zxw.length;i++){
if(xhw<zxw[i]){
xhw=zxw[i];
};
};
alert(xhw);
//使用函数封装
var zxw=[21,35,13,86,72,64];
function bdx(arr){
var xhw=arr[0];
for(var i=0;i<arr.length;i++){
if(xhw>arr[i]){
xhw=arr[i];
};
};
return xhw;
};
alert(bdx(zxw));
</script>
七、数组排序(从小到大,冒泡排序)
直接看代码
<script>
//从小到大排序
var zxw=[21,35,93,86,72,64,21,35];
function paixu(arr){
for(var i=0;i<arr.length-1;i++){
if(arr[i]>arr[i+1]){
var a=arr[i];
arr[i]=aarr[i+1];
arr[i+1]=a;
};
};
return arr;
};
alert(paixu(zxw));
</script>
八、二维数组
二维数组:数组里的数据还是数组;
直接看代码理解
<script>
var zxw[["小赵","小钱","小孙","小李"],["小周","小王","小吴","小郑"],["小冯","小陈","小卫","小杨"],["小蒋","小沈","小韩","小杨"]];
alert(zxw.length); //4:zxw数组长度;
alert(zxw[0][2]);//第一个下标0:数组元素索引;第二个下标2:数组的元素中的元素索引;
alert(zxw[2].length);
console.log(zxw);
</script>
九、二维数组的遍历
<script>
var zxw=[[],[],[],[]];
for(var i=0;i<zxw.length;i++){
for(var b=0;b<zxw[i].length;b++){
document.write(zxw[i][b]+"写作业去"+"<br>");
};
};
</script>
十、获取二维数组中最大、最小值
<script>
var zxw=[[],[],[]];
var xhw=zxw[0][0];
//function adx(arr){ 函数封装
for(var i=0;i<zxw.length;i++){ //换 i<zxw.length=>i<arr.length
for(var b=0;b<zxw[i].length;b++){
if(xhw<zxw[i][b]){ //换 b<zxw.length=>i<arr.length
xhw=zxw[i][b]; //换 xhw=arr[i][b];
};
};
//return xhw;
}; //};
//bdx(zxw);
alert(xhw);
</script>
接下来,我们学习对象,先从定义开始
一、对象初识
在js中,对象是王。如果理解了对象,就理解了JavaScript;在js中,几乎“所有事物”都是对象。自符串、布尔值、数字(如果用new关键字定义)、对象、函数、日期、数组、正则表达式、页面中的元素都是对象。
<script>
//var zxw="我要自学网";
//String
var zxw1=new String("我要自学网");
var zxw2=zxw1+"123456";
document.write(zxw2);
alert(typeof zxw1);
//Number
var zxw1=new Number(123);
var zxw2=zxw1+1;
doucment.write(zxw2);
alert(zxw1);
//Boolean
var zxw1=new Boolean(true);
document.write(zxw1);
alert(typeof zxw1);
</script>
二、对象创建的方法
js对象是包含很多属性的变量。js对象属性指的是与对象相关的值,js对象是无序属性的集合。
属性语法格式:名称:值(名称和值以冒号分隔)。
1.json模式创建对象,创建对象用大括号{};(最主要形式)
<script>
var ren={name:"小明",sex:"男",age:12,height:1.8};
</script>
2.直接实例化,通过构造函数object()创建对象。
<script>
var ren=new Object();
ren.name="小明";
ren.sex="男";
alert(typeof ren);
console.log(ren);
</script>
三、对象属性访问及添加
<script>
var ren={name:"小明",sex:"男",age:12,height:1.8};
//访问对象属性:(1)对象名["属性名"];(2)对象名.属性名(用的最多);
var a=ren["age"];
var a=ren.sex;
alert(a);
//对象添加属性
ren.gcd=true;
ren["yifu"]="red";
alert(ren.gcd);
console.log(ren);
</script>
四、对象属性修改及删除
<script>
var ren={name:"小明",sex:"男",age:12,height:1.8};
//修改对象属性
ren.age=13;
ren["height"]=185;
//删除对象属性:delete关键词从对象中删除属性,会同时删除属性的值和属性本身
delete ren.height;
delete ren["age"];
alert(ren.age);
alert(ren.height);
console.log(ren);
</script>
五、对象的易变性
<script>
//变量不易变
var a="我要自学网";
var b=a;
b=123; //
alert(a); //a=我要自学网;b=123;
document.write(b);
//对象的易变形
var c={name:"小明",sex:"男",age:12,height:1.8};
var d=c;
d.name="小红";//c和d是同一个对象,对d的任何改变都将改变c;
console.log(c);
console.log(d);
</script>
六、遍历对象
<script>
var ren={name:"小明",sex:"男",age:12,height:1.8};
//for-in遍历,for...in循环会为每个属性执行一次
for(i in ren){ //属性名 in 对象
document.write("我的"+i+"是"+ren[i]+"<br>");
}
</script>
七、构造函数初识
构造函数:主要功能初始化对象,可以想象成一套模板或一套方案。通过new函数名来实例化对象的函数叫构造函数,new就是在创建对象,从无到有,构造函数就是在为初始化的对象添加属性和方法。
规范:构造函数定义时首字母大写;
<script>
function Ren(){ //规范
this.name=""; //this:表示现在还不知道,没有具体的名称。
this.sex="男";
this.age="20";
};
var xiaoMing=new Ren(); //通过new()方法来创建具体的叫“xiaoMing”的人。通过new()方法创建具体的对象时,this才有具有提的名称,现在this就表示xiaoMing.
xiaoMing.name="小明";
xiaoMing["age"]=21; //修改
xiaoMing.zzmm="共产党"; //添加
delete xiaoMing.sex; //删除
xiaoMing.benling=function(){
alert("会开车、会做饭、会泡妞");
};
console.log(xiaoMing);
</script>