目录
JavaScript中的对象分为3种:自定义对象、内置对象、浏览器对象
前面两种对象时JS基础内容 属于ECMAScript,而浏览器对象是属于JS独有的
内置对象就是指JS语言自带的一些对象,这些对象供开发者使用,并提供了一些常用的或是最基本而必要的功能(属性和方法)
内置对象最大的优点就是帮助快速开发
1、Math数学对象
// Math数学对象 不是一个构造函数 所以不需要用new来调用 而是直接使用里面的属性和方法
console.log(Math.PI); // 圆周率 3.141592653589793
console.log(Math.SQRT2); // 2的平方根 1.4142135623730951
console.log(Math.max(1,0,-3,4,99)); // 最大值 99
console.log(Math.min(-1,-3,-9,0,1)); // 最小值 -9
console.log(Math.max(1,4,'幼兒园扛把子')); // 带有非数字类型的 输出NaN
console.log(Math.max()); // 不带任何值 输出 -Infinity
1.1、封装数学对象
var myMath = {
PI: 3.141592653589793,
max: function() {
var max = arguments[0];
for(var i = 1; i <= arguments.length; i++) {
if (arguments[i] > max) {
max = arguments[i];
}
}
return max;
},
min: function() {
var min = arguments[0];
for(var i = 1; i <= arguments.length; i++) {
if (arguments[i] < min) {
min = arguments[i];
}
}
return min;
}
}
console.log(myMath.PI);
console.log(myMath.max(1,4,8,77,55));
console.log(myMath.min(-2,-3,4,0,99));
1.2、Math绝对值和三个取整方法
Math对象不是构造函数,它具有数学常数和函数的属性和方法。
跟数学相关的运算(求绝对值,取整,最大值等)可以使用Math中的成员
Math.PI // 圆周率
Math.floor() // 向下取整 往最小取
Math.ceil() // 向上取整 往最大取
Math.round() // 四舍五入
Math.abs() // 绝对值
Math.max() // 求最大值
Math.min() // 求最小值
![](https://i-blog.csdnimg.cn/blog_migrate/ceb427208c290b460b6c474aacdeaa57.png)
1.3、取随机整数方法random( )
// 取随机数random
// 1. Math对象随机数方法 random() 返回一个随机的小数 0 =< x < 1
// 2. 取随机数方法里面不跟参数
// 3. 代码体验
console.log(Math.random());
// 4. 想要得到两个数之间的随机整数 并且包含这2个整数
公式: Math.floor(Math.random() * (max - min + 1)) + min;
function getRandom(min,max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
console.log(getRandom(1,10));
// 5. 随机点名
var arr = ['张三','李四','小明','小薛','流星'];
console.log(arr[getRandom(0,arr.length - 1)]);
1.4、猜数字案例
随机生成 1-10 之间的任意数字
弹出输入框 让用户输入一个数字
如果与结果大 则提示大了 继续猜 小了就提示小了 继续猜
如果猜中了 则退出循环 结束程序
// 先套用公式
function getRandom(min,max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
var random = getRandom(1,10);
while (true) {
var num = prompt('请输入1-10之间的数字:');
if (num > random) {
alert('你猜的大了');
} else if (num < random) {
alert('你猜的小了');
} else {
alert('你真厉害!');
break; // 猜中结束退出全部循环
}
}
// 猜1-50之间的数字 机会只有10次
for (var i = 1;i <= 10; i++) {
var num = prompt('请输入1-50之间的数字:');
if (num > random) {
alert('你猜的大了,你还有'+ (10-i) +'次机会');
} else if (num < random) {
alert('你猜的小了,你还有'+ (10-i) +'次机会');
} else {
alert('猜对了,你真厉害!,只用了'+ (10-i) +'次机会就猜对了');
break;
}
}
2、Date日期对象
// Date() 日期对象 是一个构造函数 必须使用new 来调用创建我们的日期对象
var arr = new Array(); // 创建一个数组对象
var obj = new Object(); // 创建一个对象实例
// 1. 使用Date 如果没有输入参数 则返回当前系统的当前时间
var date = new Date();
console.log(date);
// 2. 参数常用的写法 数字型 2021,08,26 字符串型'2021-08-26 10:18:08'
// 例
var date1 = new Date(2021,08,26);
console.log(date1); // 返回的是9月 而不是 8月 星期也不对 不推荐此写法
var date2 = new Date('2021-08-26 10:18:08'); // 或者2021/08/26
console.log(date2);
2.1、格式化日期 (年月日 时分秒)
// 格式化日期 年月日
var date = new Date();
console.log(date.getFullYear()); // 获取当前日期的年份
console.log(date.getMonth() + 1); // 获取当前日期的月份 但是返回的月份是小一个月的 所以需要+1
console.log(date.getDate()); // 返回的是当前日期的几号
console.log(date.getDay()); // 一周从周日开始 周日是0 周一返回的是1 周六返回的是6
// 写一个日期 2021年8月26日 星期四
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]);
// 格式化日期 时分秒
var date = new Date();
console.log(date.getHours());
console.log(date.getMinutes());
console.log(date.getSeconds());
// 封装一个函数 返回当前系统时间的时分秒 格式 00:00:00
function getTime() {
var time = new Date();
var hour = time.getHours();
hour = hour < 10 ? '0' + hour : hour;
var minute = time.getMinutes();
minute = minute < 10 ? '0' + minute : minute;
var second = time.getSeconds();
second = second < 10 ? '0' + second : second;
return hour + ':' + minute + ':' + second;
}
console.log(getTime());
2.2、获取日期的总的毫秒形式
Date对象时基于1970年1月1日(世界标准时间)起的毫秒数
我们经常利用总的毫秒数来计算时间,因为这样更精确
// 获得Date总的毫秒数(时间戳) 是当前的时间距离1970年1月1号总的毫秒数
// 1. 通过 valueOf() getTime()
var date = new Date();
console.log(date.valueOf());
console.log(date.getTime());
// 2. 简单的写法(也是最常用的写法)
var date1 = +new Date(); // +new Date() 返回的就是总的毫秒数
console.log(date1);
// 3. H5新增的 获得总的毫秒数
console.log(Date.now());
2.3、做一个倒计时案例
1. 核心算法:输入的时间减去现在的时间就是剩余时间,
即倒计时,但是不能拿着时分秒详见,比如05分减去25分,结果会是负数的。
2. 用时间戳来做。用户输入时间总的毫秒数减去现在时间的总的毫秒数,得到的就是剩余时间的毫秒数
3. 把剩余时间总的毫秒数转换为天、时、分、秒 (时间戳转换为时分秒)
转换公式如下:
d = parseInt(总秒数 / 60 / 60 / 24); // 计算天数
h = parseInt(总秒数 /60 /60 % 24); // 计算小时
m = parseInt(总秒数 / 60 % 60); //计算分数
s = parseInt(总秒数 % 60); // 计算当前秒数
function countDown(time) {
var nowTime = +new Date(); // 返回的是当前时间的总毫秒数
var inputTime = +new Date(time); // 返回的是用户输入时间的总毫秒数
var times = (inputTime - nowTime) / 1000; // times是剩余时间总的毫秒数 毫秒换算成秒 /1000
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;
return d + '天' + h + '时' + m + '分' + s + '秒';
}
console.log(countDown('2021-8-30 15:00:00'));
var date = new Date;
console.log(date);
3、数组对象
3.1、检测是否为数组
// 检测是否为数组
// (1) instanceof 运算符 它可以用来检测是否为数组
var arr = [];
var obj = {};
console.log(arr instanceof Array);
console.log(obj instanceof Array);
// (2) Array.isArray(参数) H5新增的方法 ie9以上版本支持
console.log(Array.isArray(arr));
console.log(Array.isArray(obj));
// 案例 翻转数组
function reverse(arr) {
// if (arr instanceof Array) {
if (Array.isArray(arr)) {
var newArr = [];
for (var i = arr.length - 1; i >= 0; i--) {
newArr[newArr.length] = arr[i];
}
return newArr;
} else {
return '这个参数要求必须是数组格式[1,2,3]'
}
}
console.log(reverse([1,2,3]));
console.log(reverse(1,2,3));
3.2、添加删除数组
添加数组
// 1. push() 在数组的末尾添加一个或者多个数组元素
var arr = [1,2,3];
// arr.push(4,5,6);
console.log(arr.push(4,5,6));
console.log(arr);
// (1) push 是可以给数组结尾追加新的元素
// (2) push() 参数直接写数组元素就可以
// (3) push完毕之后,返回的结果是 新数组的长度
// (4) 原数组也会发生变化
// 2. unshift 在数组的开头添加一个或者多个数组元素
console.log(arr.unshift(9,8,7))
console.log(arr);
// (1) unshift 是可以给数组开头追加新的元素
// (2) unshift() 参数直接写数组元素就可以
// (3) unshift完毕之后,返回的结果是 新数组的长度
// (4) 原数组也会发生变化
删除数组
// 3. pop() 可以删除数组的最后一个元素
console.log(arr.pop());
console.log(arr);
// (1) pop可以删除数组的最后一个元素 记住一次只能删除一个元素
// (2) pop()
// (3) pop完毕之后,返回的结果是 删除的那个数组元素
// (4) 原数组也会发生变化
// 4. shift() 可以删除数组的第一个元素
console.log(arr.shift());
console.log(arr);
// (1) shift可以删除数组的第一个元素 记住一次只能删除一个元素
// (2) shift() 没有参数
// (3) shift完毕之后,返回的结果是 删除的那个数组元素
// (4) 原数组也会发生变化
筛选数组 把大于等于2000的数值删除
var arr = [1500,1200,2000,2100,1800];
var newArr = [];
for (var i = 0; i < arr.length; i++) {
if (arr[i] < 2000) {
newArr.push(arr[i]);
// newArr[newArr.length] = arr[i]; 老方法
}
}
console.log(newArr);
3.3、数组排序
翻转数组
var arr = [1,2,3];
arr.reverse();
console.log(arr);
数组排序(冒泡排序)
var arr1 = [33,4,5,6,7,8,9];
arr1.sort(); // sort方法只适用于单个数字排序 双位则失效
console.log(arr1)
// 解决方法
var arr2 = [7,4,8,6,88,65,9];
arr2.sort(function(a,b){
return a - b; // 升序排序
return b - a; // 降序排序
})
console.log(arr2)
获取数组元素索引号
// 返回数组元素索引号方法 indexOf(数组元素) 作用就是返回该数组元素的索引号 从前面开始查找
// 它值返回第一个第一个满足条件的索引号
// 它如果在该数组里面找不到元素,则返回的是 -1
var arr = ['red','blue','green','orange','darkred'];
onsole.log(arr.indexOf('orange')); // 返回3
// 返回数组元素索引号方法 lastIndexOf(数组元素) 作用就是返回该数组元素的索引号 从后面开始查找
var arr = ['red','blue','green','orange','darkred','orange'];
console.log(arr.lastIndexOf('orange')); // 返回5
数组去重案例
分析
// 封装一个去重函数 unique(独一无二的)
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 demo = unique(['c','x','b','x','c','b','b']);
console.log(demo);
数组转换为字符串
// 数组转换为字符串
// 1. toString() 将数组转换为字符串
var arr = [1,2,3];
console.log(arr.toString());
// 2. join(分隔符)
var arr1 = ['yellow','orange','blue'];
console.log(arr1.join()); // 默认逗号
console.log(arr1.join('-')); // 用横杠分隔
4、字符串对象
4.1、基本包装类型
var str = 'andy';
console.log(str.length);
// 对象 才有属性和方法 复杂数据类型才有属性和方法
// 那么简单数据类型为什么会有length属性呢?
// 基本包装类型:就是把简单数据类型 包装成为了复杂数据类型
// (1) 把简单数据类型包装为复杂数据类型
var temp = new String('andy');
// (2) 把临时变量的值 给str
str = temp;
// (3) 销毁这个临时变量
temp = null;
4.2、根据字符返回位置
// 根据字符返回位置 str.indexOf('要查找的字符',[起始的位置])
var str = '改革春风吹满地,春天来了';
console.log(str.indexOf('春'));
console.log(str.indexOf('春',3)); // 从索引号是 3 的位置开始往后查找
4.3、求字符串出现的次数及位置
// 思路:先查找第一个o出现的位置
// 然后 只要indexOf 返回的结果不是 -1 就继续往后查找
// 因为indexOf 只能查找到第一个 所以后面的查找 一定是当前索引加1 从而继续查找
// 查找字符串"abcoefoxyozzopp"中所有o出现的位置以及次数
var str = "avcoefoxyzzopp";
var index = str.indexOf('o');
var num = 0;
while (index !== -1) {
console.log(index);
num++;
index = str.indexOf('o',index + 1);
}
console.log('o出现的次数为:'+ num);
// 求red出现的次数和位置
var str = ['red','blue','red','green','orange','red'];
var index = str.indexOf('red');
var num = 0;
while (index !== -1) {
console.log(index);
num++;
index = str.indexOf('red',index + 1);
}
console.log('red出现的次数为:'+ num);
4.4、根据位置返回字符
// 1. charAt(index) 根据位置返回字符
var str = 'aqet';
console.log(str.charAt(3));
// 遍历所有的字符
for (var i = 0; i < str.length; i++) {
console.log(str.charAt(i));
}
// 2. charCodeAt(index) 返回相应索引号的字符ASCII值 目的: 判断用户按下了什么键
console.log(str.charCodeAt(0)); // a在ASCII码值里是97
// 3. str[index] H5新增的
console.log(str[0]);
4.5、判断一个字符串出现次数最多的字符并统计次数
// o.a = 1, o.b = 1, o.c = 1, o.o = 4
// 思路 利用charAt() 遍历这个字符串
// 把每个字符都存储给对象,如果对象没有该属性,就为1,如果存在了就 +1
// 遍历对象 得到最大值和该字符
// 判断一个字符串'abcoefoxyozzopp'中出现次数最多的字符 并统计次数
var str = 'abcoefoxyozzopp';
var o = {};
for (var i = 0; i < str.length; i++) {
var chars = str.charAt(i); // chars是字符串的每一个字符
if (o[chars]) { // o[chars]得到的是属性值
o[chars]++;
} else {
o[chars] = 1;
}
}
// 2. 遍历对象
let max = 0;
let ch = '';
for (let k in o) {
// k 得到的是属性名
// o[k] 得到的是属性值
if (o[k] > max) {
max = o[k];
ch = k;
}
}
console.log(max);
console.log('最多的字符是' + ch);
4.6、拼接及截取字符串
// 字符串操作方法
// 1. concat('字符串1','字符串2'...)
let str = '改革春风吹满地 ';
console.log(str.concat('中国人民真争气'));
// 2. substr('截取的起始位置','截取几个字符');
let str1 = '改革春风吹满地';
console.log(str1.substr(2,2)) // 第一个2是索引号 第二个2是取几个字符
4.7、替换字符串及字符转换成数组
// 有一个字符串'abcoefoxyozzopp' 要求把里面所有的o替换为c
let str1 = 'abcoefoxyozzopp';
while (str1.indexOf('o') !== -1) {
str1 = str1.replace('o','g')
}
console.log(str1);
// 2. 字符转换为数组 split('分隔符') 前面学过的join是把 数组转换为字符串
let str2 = 'red,blue,yellow';
console.log(str2.split(','));
let str3 = 'red&yellow&blue';
console.log(str3.split('&'));
// 转换大小写
let str4 = 'anc';
console.log(str4.toUpperCase('anc'));
let str5 = 'PVE';
console.log(str5.toLowerCase('pve'));
4.8、总结综合练习
// 字符串 'abaasdffggghhjjkkgfddsssss3444343'
let str6 = 'abaasdffggghhjjkkgfddsssss3444343';
// 1. 字符串的长度
console.log(str6.length);
// 2. 取出指定位置的字符,如:0,3,5,9等
console.log(str6.charAt(0));
console.log(str6.charAt(3));
console.log(str6.charAt(5));
console.log(str6.charAt(9));
// 3. 查找指定字符是否在以上字符串中存在,如:i,c,b等
let index = str6.indexOf('i');
if (index !== -1) {
console.log('存在');
} else {
console.log('不存在');
}
// 4. 替换指定的字符,如:g替换为22,ss替换为b等操作方法
while (str6.indexOf('g') !== -1) {
str6 = str6.replace('g',22);
}
console.log(str6);
// 5. 截取指定开始位置到结束位置的字符串,如:取得1-5的字符串
console.log(str6.substring(0,5)); // 因为数组索引号是从0开始
// 6. 找出以上字符串中出现次数最多的字符和出现的次数
let o = {};
for (let i = 0; i < str6.length; i++) {
let chars = str6.charAt(i);
if (o[chars]) {
o[chars]++;
} else {
o[chars] = 1;
}
}
console.log(o)
// 出现的次数
let max = 0;
let ch = '';
for (let k in o) {
if (o[k] > max) {
max = o[k];
ch = k;
}
}
console.log('出现最多的字符为'+ ch);
console.log('次数为'+ max);