1.内置对象
js中的对象分为3种:自定义,内置对象,浏览器对象
前面两种对象是js基础内容,属于ECMAScript:第三个浏览器对象属于JS独有的
- js提供了多个内置对象:
Math,Date,Array,String
等
1.2 Math对象
Math对象不是构造函数,它具有数学常数和函数的属性和方法.
属性、方法名 | 功能 |
---|---|
Math.PI | 圆周率 |
Math.floor() | 向下取整,1.1-1,1.9-1 |
Math.ceil() | 向上取整 1.1-2,1.9-2 |
Math.round() | 四舍五入版 就近取整 注意 -1.5 结果是 -1,会往大取 值,.5比较特殊 |
Math.abs() | 绝对值,隐式转换 会把字符串型-1转换为数字型 |
Math.max()/Math.min() | 求最大和最小值 |
Math.random() | 获取范围在[0,1)内的随机值 |
**获取指定范围内的随机整数**:
Math.random()
Math.random() * 5 = [0,5)
Math.random() * (10-5)+5= [5,10)
总结 Math.random()*(max - min) + min;
function getRandom(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
1.4 日期对象
Date 对象和Math对象不一样,Date是一个构造函数,所以使用时需要new实例化后才能使用其中具体方法和属性.
Date 实例用来处理日期和时间
- 使用Date实例化日期对象
- 获取当前时间
必须new实例化
:
- 获取当前时间
var now = new Date();
- 获取指定时间的日期对象
var date2 = new Date('2019/5/1');
注意:如果创建实例时并未传入参数,则得到的日期对象是当前时间对应的日期对象
1.41 封装函数 格式化日期 年月日 时分秒
function getTime(){
var date = new Date();
var year = date.getFullYear();
var month = date.getMonth() + 1;
var date1 = date.getDate();
var arr = ['星期天','星期一','星期二','星期三','星期四','星期五','星期六' ]
var day = date.getDay();
var h = date.getHours();
h = h < 10 ? '0' + h : h;
var m = date.getMinutes();
m = m < 10 ? '0' + m : m;
var s = date.getSeconds();
s = s < 10 ? '0' + s : s;
return year +'年' + month + '月' + date1 +'日' + arr[day] + h + ':' + m + ':' + s
}
console.log(getTime());
1.42 通过Date实例数去总毫秒数
- 总毫秒数基于:1970年1月1日起的毫秒数
// 实例化Date对象
var now = new Date();
// 1.用于获取对象的原始值
console.log(date.valueOf());
console.log(date.getTime());
// 2.简单写法(最常用的)
var now = +new Date();
// 3.HTML5中的方法,兼容问题
var now = Date.now();
1.5 倒计时
// 1.核心算法: 输入的时间减去现在的时间就是剩余的时间,即倒计时,但是不能拿分秒相减,会是负值
// 2. 用时间戳来做.用户输入的时间总的毫秒数减去现在时间的总的毫秒数,得到的就是剩余的毫秒数
// 3. 把剩余时间总的毫秒数转换为天时分秒(时间戳转为时分秒)
// 创建函数
function countTime(times) {
// 1.获取现在的时间戳
var nowTime = +new Date();
// 2. 用户输入的时间戳
var inputTime = +new Date(times);
// 3. 计算剩余时间戳
var times = (inputTime - nowTime) / 1000; // 转为秒
// 4. 计算天时分秒 一定要记得转换成parseInt类型不然输出的就是小数类型~!!!!!!!!
var d = parseInt(times / 60 / 60 / 24);
d = d < 10 ? '0' + d : d;
var h = parseInt(times / 60 / 60 % 24);
h = h < 10 ? '0' + h : h;
var m = parseInt(times / 60 % 60);
m = m < 10 ? '0' + m : m;
var s = parseInt(times % 60);
s = s < 10 ? '0' + s : s;
// 5.返回值
return d + '天' + h + '时' + m + '分' + s + '秒';
}
console.log(countTime('2020,7,26 19:00:00'));
1.6 数组对象
1.61创建数组的两种方式
- 字面量
var arr = [1,'test',true];
- new Array()
var arr = new Array();
注意:上面arr创建的数组是一个空数组,如果需要使用构造函数Array创建非空数组,可以在创建数组时传参
var arr = new Array(2);
如果只给一个参数,则参数规定了数组长度
var arr = new Array(2,3);
如果给了多个参数,则参数称为数组的元素,相当于[2,3]
1.62 检测是否为数组
- 1.
instanceof
运算符 它可以用来检测是否为数组
var arr = [ ];
var obj = [ ];
console.log(arr instancof Array);
console.log(obj instancof Array);
- 2.
Array.isArray(参数)
;H5增加 IE9以上支持.
console.log(Array.isArray(arr));
console.log(Array.isArray(obj));
1.63 添加删除数组元素方法
1.push()
在数组的末尾 添加一个或者多个数组元素
push完毕之后,返回值时新数组的长度,
原数组也会发生变化
var arr = [1,2,3];
console.log(arr.push('zzm','black'));//返回的结果是新数组的长度
console.log(arr);//原数组会发生变化
2.unshift()
在数组的开头,添加一个或者多个数组元素
1.unshift()参数直接写数组元素就可以了
2.结束后返回的结果是新数组的长度,原数组也会发生改变
2.1concat()
链接两个或多个数组
1.不会改变现有数组,而仅仅返回被链接数组的一个副本
2.里面的参数可以是具体的值,也可以是数组对象,可任意多个
3.返回的是一个新的数组,该数组时通过把所有arrX参数添加到arr中生成的.如果要进行concat()操作的参数时数组,那么添加的时数组中的元素,而不是数组
arr.concat(arr2,arr3,arr4);
3.pop()
删除数组的最后一个元素
1.删除数组最后一个元素,一次只能删除一个元素
2.没有参数,完毕后,返回结果是删除的那个元素
3.原数组也发生改变
4.shift(
);删除数组第一个元素
同上
5.slice(start,end)
可从已有的数组中返回选定的元素
1.start必须,规定从何处开始选取.不包括开始的那个数,如果是负数,那么它规定从数组尾部开始算起的未知,-1指的最后一个元素,-2指的是倒数第二个元素,以此类推.
2.end,可选,规定从何处结束,如果没有指定那么一直到数组所有元素,如果是负数,那么从数组尾部开始算起得元素
var arr = [1,2,3,4,5];
console.log(arr.slice(3,end));// 返回值[4,5]
//语法 arr.slice(start,end);
6.splice()
向/从数组中添加/删除项目,然后返回被删除的项目
1.该方法会改变原数组
2.返回值 Array,包含被删除项目的新数组,如果有的话
arr.splice(index,howmany,item1,...,itemsX)
index .必须 ,整数,规定添加/删除项目的位置,使用负数可从数组结尾处规定位置
howmany .必须.要删除的项目数量.如果设置为0,则不会删除项目
item1,...,itemX. 可选.像数组添加的新项目
1.64 筛选数组
有一个包含工资的数组[1500,2000,2100,1800],要求把数组中工资超过2000的删除,剩余的放到新数组里面
var arr = [1000,1200,1400,1600,2000,2200];
var newArr = [];
for (var i = 0 ; i <= arr.length; i++){
if(arr[i] < 2000){
newArr,push(arr[i]);
}
}
console.log(newArr);
1.65 数组排序
- 1.翻转数组
var arr = [1,2,3,4,5];
arr.reverse();
console.log(arr);
- 2.数组排序(冒泡排序)
var arr = [1,10,100,200];
arr.sort(function(a,b){
return a-b;//升序排列
return b -a;//降序排列
})
console.log(arr);
1.66 数组去重
1.目标:把旧数组里面不重复的元素选取出来放到新数组中,重复的元素只保留一个
2.核心算法:遍历数组,然后拿旧数组元素去查询新数组,如果该元素在新数组中不存在就添加
3.利用 新数组.indexOf(数组元素) 如果返回-1就说明没有该元素
function unique(arr) {
var newArr = [];
for (var i = 0 ; i < arr.length; i++{
if (newArr.indexOf(arr[i]) === -1){
newArr.push(arr[i]);
}
}
return newArr;
var arr1 = unique(['c','a','z','x','a','b'])
console.log(arr1);
1.67 数组转换为字符串
1.toString() 将数组转换为字符串
var arr = [1,2,3];
console.log(arr.toString()); //输出字符串类型 1,2,3
2.join(分隔符);
var arr1 = ['green','pink','red'];
console.log(arr1.join()); // green,pink,red;
console.log(arr1.join('&'));// green&pink&red;
2.字符串对象
2.1 基本包装类型
js提供了三个特殊的引用类型:string,Number和Boolean.
基本包装类型就是把简单数据类型包装称为复杂数据类型,这样基本数据类型就有了属性和方法
var str = 'zzm';
console.log(str.length);
基本数据类型无属性和方法,而对象才有,但上面却可以执行,因为js把基本数据类型包装为了复杂类型,
1.生成临时变量,把简单类型包装为复杂数据类型
var temp = new String('zzm');
2.赋值给我们声明的字符变量
str = temp;
3.销毁临时变量
temp = null;
2.2字符串的不可变
里面的值不可变,虽然看上去内容改变了,但其实是地址值变了,内存中新开辟了一个内存空间
当重新给字符串赋值的时候,变量之前保存的字符串不会被修改,依然在内存中重新给字符串赋值,会重新在内存中开辟空间,这个特点就是字符串的不可变
由于字符串的不可变,在大量拼接字符串的时候会有效率问题