一.概述
1.对象(Object):属于引用数据类型
(1)对象是一种复合型的数据类型,在对象中可以保存多个不同数据类型的属性
2.对象的分类:
(1)内建对象:由ES标准中定义的对象,在任何的ES的实现中都可以使用
- 例如:Math,String,Number,Boolean,Function,Object等
(2)宿主对象:由JS的运行环境提供的对象,目前来讲主要是指浏览器提供的对象
- 例如:BOM DOM等
3.一切皆对象,对象由属性和行为构成
二.对象的基本使用
1.创建对象:
(1)利用字面量创建对象:就是{}中里包含了表达这个具体事物(对象)的属性和方法
- 语法:var obj = {};//创建一个空对象,可以在括号内以键值对的方式写内容
方法的值是一个匿名函数
var obj = {
name:"李丽",
age:18,
sayHi:function(){
console.log("hi");
}
}
(2)利用new Object创建对象:
var obj = new Object();//创建一个空对象—也属于通过构造函数创建对象
利用=赋值来添加属性和方法
var obj = new Object();
obj.name = "Tim";
obj.age = 19;
obj.sayHi = function(){
console.log("hi");
}
(3)利用构造函数创建对象:以上两种方法每次只能创建一个对象,用构造函数来创建可以弥补
语法:function 构造函数名(){this.属性 = 值,this.方法 = 匿名函数}
- 调用时就要用 new 构造函数名(); 来调用
- 通过构造函数创建对象的过程叫对象的实例化
- 构造函数首字母大写
- 构造函数不需要return也能返回
每new一次就可以创建一个对象,可以实现大量创建一个对象
function Star(sname,age,sex){
this.name = sname;
this.age = age;
this.sex = sex;
this.sing = function(sang){
console.log(sang);
}
}
var ldh = new Star("刘德华",18,"男)//调用构造函数返回的是一个对象
console.log(ldh.name);
ldh.sing("刚刚好");
2.使用对象:
(1)调用对象的属性,用:对象名.属性名 或 对象名[‘属性名’]
(2)调用对象的方法,用:对象名.方法名();
(3)删除对象的属性, 用:delete 属性名;3.对象的遍历:用for in
(1)语法:for(变量 in 对象)
(2)例如:for(var i in obj){console.log(i);}//直接变量输出属性名
for(var i in obj){console.log(obj[i]);}//类名[变量]输出属性值4.垃圾回收:将null赋值给对象,js的垃圾回收机制会自动进行垃圾回收,不给null则不会
(1)var obj = new Object(); obj = null;
三.原型对象
1.我们所创建的每一个函数,解析器都会向函数内添加一个属性prototype,这个属性对应着一个对象-原型对象
2.当以构造函数的形式调用函数时,他所创建的对象都有一个隐含的属性,指向该构造函数的原型对象,可以通过proto访问该属性
3.原型对象就相当于一个公共的区域,所有同一类的实例都可以访问到这个原型对象
4.当我们访问对象的属性或方法时,他会现在对象自身寻找,有的话直接用,没有则会去原型对象中找,原型对象也没有,再去原型对象的原型中找,以此类推,知道Object的原型;若还是没有,则返回undefined
5.检查属性是否存在:
(1)”属性” in 对象:用in检查是否存在某个属性时,即使本身没有,原型对象中有,也会返回true
(2)对象.hasOwnProperty(“属性”):检查对象本身是否含有该属性四.内置对象
1.概述:
(1)内置对象就是go自带的对象,可以直接使用
(2)内置对象文档:用于查询内置对象,以下网站可以进行查询w3school:https://www.w3school.com.cn/
2.Math对象:不用实例化可以直接使用 括号内有字符串返回NaN
(1)Math.max():都是数字但会最大值
(2)Math.min():都是数字但会最小值
(3)Math.PI:圆周率
(4)Math.floor():向下取整
(5)Math.ceil():向上取整
(6)Math.round():就近取整(四舍五入)
(7)Math.abs():取绝对值
(8)random():生成0-1的随机数若想返回想要的两个数间的随机数,就要封装一个对象,代码如下:
function getRandom(min,max){
return Math.floor(Math.random() * (max-min+1) + min);
}
3.Date对象:只能通过new来实例化对象
(1)date():返回系统的当前时间
(2)date(‘2019-5-1’):输出括号内的日期//可以以数字形式填入,例如:2019,5,1 但是返回的日期会增加一个月
(3)date.getFullYear():获取当前年份
(4)date.getMonth():获取当前月份的前一个月
(5)date.getDay():获取当前星期几(返回0-6)
(6)date.getDate():获取当天几号
(7)date.getHours():获取当前小时
(8)date.getMinutes():获取当前分钟
(9)date.getSeconds():获取当前秒钟
(10)date.valueOf()或date.getTime():返回距1970年1月1日的总毫秒数
- HTMl5新增Date.now(),不用实例化就可以返回距1970年1月1日的总毫秒数
var date = new Date();
var year = date.getFullYear();
var month = date.getMonth() + 1;
var dates = date.getDate();
var arr = ['星期日','星期一','星期二','星期三','星期四','星期五','星期六']
var day = date.getDay();
console.log('今天是:' + year + '年' + month + '月' + dates + '日' + arr[day]);
function getNowTime(){
var h = date.getHours();
h = h<10?'0'+h:h;//小于十前面加个0
var m = date.getMinutes();
m = m<10?'0'+m:m;
var s = date.getSeconds();
s = s<10?'0'+s:s;
return h + ':' + m + ':' + s;
}
console.log(getNowTime());
function countDown(time){
var date = new Date();
var nowTime = +new Date();//返回当前时间总毫秒数
var inputTime = +new Date(time);//返回输入时间的毫秒数
var times = (inputTime - nowTime) / 1000;//剩余时间的总的秒数 除1000了就是求得秒数
var day = parseInt(times/60/60/24);
var hour = parseInt(times/60/60%24);
hour = hour<10?'0'+hour:hour;//小于十前面加个0
var minute = parseInt(times/60%60);
minute = minute<10>'0'+minute:minute;
var second = parseInt(times%60);
second = second<10>'0'+second:second;
return day+'天'+hour+'小时'+minute+'分'+second+'秒';
}
console.log(countDown('2022-5-26 08:30:00'));
4.Array对象:不用实例化可以直接使用
(1)Array.isArray():判断括号内的值是否为一个数组,返回true或false
(2)增删数组元素:以下四个方法都会改变原数组
方法 | 说明 | 返回值 |
---|---|---|
push(参数1…) | 末尾添加一个或多个元素 | 返回新数组的长度 |
pop() | 删除数组的最后一个元素,不用参数 | 返回删除元素的值 |
unshift(参数1…) | 向数组的开头增加一个或多个元素 | 返回新数组的长度 |
shift() | 删除数组的第一个元素 | 返回第一个元素的值 |
(3)数组排序:以下2个方法都会改变原数组,返回新数组
方法 | 说明 |
---|---|
reverse() | 颠倒数组中元素的顺序,无参数 |
sort() | 对数组排序,从小到大排序,但是只排第一位 |
若想实现完美排序,要在sort()内加函数
Array.sort(function(a.b){ return a-b;//升序排列 降序排列就改成b-a });
(4)indexOf():在数组中查找给定元素第一次出现的位置,返回索引;若不存在返回-1;
同理,lastindexOf()就是返回最后一次出现的索引,不存在返回-1;
利用该方法可实现数组去重
//思想:拿出元素,检查新数组是否存在,不存在就填入新数组 var arr = [1500,1200,2000,2100,1800,1890,1500,6000,3000,2000,2600,1500,1200,999,555,111,555]; function unique(arr){ var newarr = []; for (var i = 0;i<arr.length;i++){ var flag = newarr.indexOf(arr[i]); if (flag != -1){ continue; }else{ newarr.push(arr[i]); } } return newarr; } console.log(unique(arr))
(5)数组转换为字符串:
数组名.toString()
- 数组名.join(分隔符) 不写默认逗号分隔
(6)连接数组:数组名1.concat(数组名2,数组名3…)
- 该方法不影响原数组,会返回一个新数组
(7)数组截取:数组名.slice(start,end)
- 只写一个参数表示开始位置
- 括号内是左闭右开区间
(8)数组删除:数组名.splice(start,要删除的个数,要替换的元素)
const months = ['Jan', 'March', 'April', 'June'];
months.splice(1, 0, 'Feb');
// inserts at index 1
console.log(months);
// expected output: Array ["Jan", "Feb", "March", "April", "June"]
months.splice(4, 1, 'May');
// replaces 1 element at index 4
console.log(months);
// expected output: Array ["Jan", "Feb", "March", "April", "May"]
5.字符串对象:
(1)字符串不可变,再次赋值只是更改了指向的地址,字符串所有的方法也不会改变字符串,同样是返回一个新的字符串
(2)根据字符返回位置:indexOf(‘要查找的字符’,start):在字符串中从start索引开始查找给定元素第一次出现的位置,返回索引;若不存在返回-1;
- 同理,lastindexOf()就是返回最后一次出现的索引,不存在返回-1;
- 不指定索引就从头开始查找
(3)根据位置返回字符:
方法名 | 说明 | 使用 |
---|---|---|
charAt(index) | 返回指定位置的字符 | str.charAt(0) |
charCodeAt(index) | 获取指定位置的ASCII | str.charCodeAt(0) |
str[index] | 获取指定位置的字符 | str[0] |
(4)字符串的截取:substr(start,length):从start开始,截取length个
(5)字符串替换:str.replace(‘被替换掉的’,’替换为的字符’) 但是只能替换一次
(6)字符串转为数组:字符串.split(分隔符) 分隔符要看字符串的分割符
(7)大小写转换:
- toUpperCase():转换大写
- toLowerCase():转换为小写