JavaScript对象(一)
- 对象简介
JavaScript 中的所有事物都是对象:字符串、数值、数组、函数...
JavaScript 提供多个内建对象,比如 String、Date、Array 等等。
对象只是带有属性和方法的特殊数据类型。如果我们使用基本数据类型,可以将一个人的信息保存下来,但是他们是独立的没有联系的数据。
-对象属于一种复合的数据类型,在对象中可以存储多个不同数据类型的属性
1.对象的分类:
-内建对象:
-由ES标准中定义的对象,在任何ES的实现中都可以使用
例如:Math Strin g Number Boolean Function Objict.......
-宿主对象:
-由JS的运行环境提供的对象,目前来讲主要指由浏览器提供的对象
例如:BOM(浏览器对象模型) DOM(文档对象模型)
我们常用的console.log()就是DOM中的对象
- 自定义对象:
-由开发人员自己定义的对象
- 对象的创建:
使用new关键字调用的函数,是构造函数constructor
构造函数是专门用来创建对象的函数
Typeof:用于检测数据类型
var obj=new Object();
- 属性:在对象中保存的值
向对象添加属性:①对象.属性名=属性值 ②对象[“属性名”]=属性值
读取对象属性:①对象.属性名 ②对象[“属性名”]-注意:如果对象中没有的实现,不会报错而是返回undefined
4.in运算符
通过该运算符检查一个对象中是否含有指定的属性
如果含有则返回true,如果没有则返回false语法 :"属性名" in 对象
5.对象的保存
JS中的变量都是保存在栈内存中的
基本数据类型的值直接在栈内存中存储
值与值之间是独立存在的,修改一个变量不会影响到其他的变量
对象是保存在堆内存中的,每创建一个新的对象,就会在堆内存中开辟新的空间。而变量保存的是对象的内存地址(对象的引用),如果两个变量保存的是同一个对象引用,当其中一个通过变量修改属性时,另外一个也会受到影响。
- 数组(Array)
Array 对象用于在单个的变量中存储多个值。
- 、数组的基本操作
-创建数组
var arr=new Array();
1.向数组中添加元素
数组[索引]=值
2.读取元素:
数组[索引]注意:如果读取不存在的索引,不会报错,而是返回undefined;
3.获取数组长度length:
数组.length
对于连续数组,使用Length可获取到数组的长度
非连续数组,使用length会获取到数组的最大(索引+1),尽量不要创 建非连续数组
4.修改length:
如果修改的length大于原长,多出部分会空出
如果修改的length小于原长,多出部分会被删除
- 、与普通对象区别
1.它和普通的对象功能类似,也是用来存储一些值的,不同的是普通对象使 用字符串作为属性名,而数组是使用数字作为索引操作元素
2.索引:从0开始的整数
3.数组的存储性能比普通对象要好。
(三)、数组字面量
1.创建数组
Var arr=new Array();
-.使用字面量创建数组,可在创建时就指定数组中的元素
Var arr=[x,y,z,i];
-使用构造函数创建数组时,也可同时添加元素,将要添加的元素作为构造函数的参数传递,元素之间用逗号隔开
Var arr=new Array(x,y,z,i);
注意:当数组中只有一个数字元素时,该元素为该数组的长度length,非数字元素正常显示。
2.数组的值:
-可以是任意的数据类型,包括对象。
Var arr=[“hi”,23,true,undefined,null];
也可以存放函数
Var arr = [function(){alert:(“123”);},function(){console.log(123);}];
3.二维数组
var arr=[
[],
[]
];
- 、数组的方法
- 连接两个数组,并返回结果concat()
Var arr1=[1,2,3];
Var arr2=[4,5,6];
Var arr3=arr1.concat(arr2);//arr3=[1,2,3,4,5,6](arr1在前)
||var arr3=arr2.concat(arr1);//arr3=[4,5,6,1,2,3](arr1在后)
谁连接谁,谁就在前。
- 把数组的所有元素串联成一个字符串,元素通过指定的分隔符进行分隔join()
Var str=arr1.join(“~~”);/(“--”)//[1~~2~~3];/[1--2--3];
3.push()向数组的末尾添加一个或多个元素,并返回新的长度。
其他更多的方法:
方法 | 描述 |
concat() | 连接两个或更多的数组,并返回结果。 |
join() | 把数组的所有元素放入一个字符串。元素通过指定的分隔符进行分隔。 |
pop() | 删除并返回数组的最后一个元素 |
push() | 向数组的末尾添加一个或更多元素,并返回新的长度。 |
reverse() | 颠倒数组中元素的顺序。 |
shift() | 删除并返回数组的第一个元素 |
slice() | 从某个已有的数组返回选定的元素 |
sort() | 对数组的元素进行排序 |
splice() | 删除元素,并向数组添加新元素。 |
toSource() | 返回该对象的源代码。 |
toString() | 把数组转换为字符串,并返回结果。 |
toLocaleString() | 把数组转换为本地数组,并返回结果。 |
unshift() | 向数组的开头添加一个或更多元素,并返回新的长度。 |
valueOf() | 返回数组对象的原始值 |
- 、数组的遍历
数组的遍历就是将数组中所有的元素都取出来
1.for循环
for(var i=0;i<arr.length;i++){
console.log(arr[i]);
}
或
for(var o in arr){
console.log(o);
console.log(arr[o]);
}例如:创建一个函数,可以将arrPerson中年满18岁的Person提取出来,然后封装到到一个新的数组并返回
- forEach();
该方法只支持IE8以上的浏览器,如果考虑到兼容问题还是使用for循环。
forEach()需要一个函数作为参数
这种由我们创建但不由我们调用的函数称为回调函数。
-数组中有几个元素函数就会调用几次,每次执行,浏览器将会遍历到的元素以实参的形式传递进来,我们可以通过定义形参读取这些内容,浏览器会在回调函数中传递三个参数:元素、索引、数组
Arr.forEach(function(value,index,obj){});
- Date对象
表示一个时间,如果使用构造函数创建Date()对象,则会封装为当前代码执行的时间。
1.创建对象
Var d=new Date();
-创建一个指定的时间对象,需要在构造函数中传递一个表示时间的字符串作为参数。
Var date=new Date(2021/05/03 10:04:00);
2.时间戳
getTime()指从格林威治1970.1.1 0:0:0到当前日期所花费的毫秒书(1秒=1000毫秒),计算机底层保留的都是时间戳。
Var time =d.getTime();
Console.log(time/1000/60/60/24/365); 、
毫秒、秒、分、时、年可用时间戳测试代码性能
常用方法:
get FullYear()年
get Month()月0~11值
get Date()日
get Hours()时
get Minutes()分
get Secinds()秒
get Day()星期几,返回0~6值
实例:
部分js代码: