22-内置对象
一、Math对象
1.获取π
Math.PI
2.最大值/最小值
Math.max()
Math.min()
3.取整
Math.floor():地板函数,向下取整 1.9999 => 1
Math.round():四舍五入 1.5 => 2
Math.ceil():天花板函数,向上取整 1.000001 => 2
4.生成一个随机数
Math.random():生成[0,1)范围的随机数
- 和取整搭配使用,生成一个n~m的随机数
- Math.floor(Math.random()*m-n+1)+n
5.绝对值
Math.abs()
6.次幂和平方
Math.pow(num, power);//求num的power次方
Math.sqrt(num);//对num开平方
7.案例时间
猜数字小游戏
function getNum() {
// 获取0 - 100的随机整数
var num = Math.floor(Math.random() * 101);
var a = prompt('请输入你猜的数字0~100');
// 次数
var i = 5;
while (true) {
if (i > 1) {
if (a === num) {
// alert('恭喜您猜对啦,只用了' + 5 - i + '次,正确数字是' + num + '');
alert(`恭喜您猜对啦,只用了${5 - i}次,正确数字是${num}`);
break;
} else if (a > num) {
// 猜错了就减一次机会
a = prompt(`${a}太大了,您还有${--i}次机会`);
} else if (a < num) {
a = prompt(`${a}太小了,您还有${--i}次机会`);
}
} else {
alert('次数超过,游戏失败');
break;
}
}
}
getNum();
</script>
随机颜色
<script>
// 获取一个随机rgba颜色和十六进制
//取值0-255
function getColor() {
var r = Math.floor(Math.random() * 256);
var g = Math.floor(Math.random() * 256);
var b = Math.floor(Math.random() * 256);
var a = Math.floor(Math.random() * 10) / 10;
// return 'rgb(' + r + ',' + g + ',' + b + ')';
return `rgba(${r},${g},${b},${a})`
}
console.log(getColor());
var arr = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'];
var str = '#';
function getColor2() {
// 六位数
for (var i = 0; i < 6; i++) {
// 索引数 = 长度 - 1
str += arr[Math.floor(Math.random() * 16)];
}
return str;
}
console.log(getColor2());
</script>
二、date对象
用日期对象的时候一定要先new出来
<script>
// js中提供一个对象专门用来处理时间日期 Date对象
// Math对象是一个静态对象。就是使用的时候不需要new的对象
//使用日期对象的时候一定要先new出来
var date = new Date(); //date对象中存有日期相关的所有的数据
console.log(date);//Fri Apr 24 2020 07:14:42 GMT+0800 (中国标准时间)
console.log(date.toDateString()); //Fri Apr 24 2020
console.log(date.toLocaleDateString()); //2020/4/24
console.log(date.toTimeString()); //07:14:42 GMT+0800 (中国标准时间)
console.log(date.toLocaleTimeString()); //上午7:14:42
</script>
getTime() 返回毫秒数和valueOf()结果一样
getMilliseconds() 当地时间返回时间的毫秒
getSeconds() 返回0-59
getMinutes() 返回0-59
getHours() 返回0-23
getDay() 返回星期几 0周日 6周6
getDate() 返回当前月的第几天,当月的几号
getMonth() 返回月份,从0开始
getFullYear() 返回4位的年份 如 2016
var date = new Date();
//获取毫秒数
console.log(date.getTime()); //返回当前时间对应毫秒数
//获取毫秒
console.log(date.getMilliseconds()); //当前日期中的毫秒数 1秒= 1000毫秒
//获取当前时间的秒数
console.log(date.getSeconds());
//获取当前时间的分钟
console.log(date.getMinutes());
//获取当前的小时
console.log(date.getHours());
//获取日期(多少号)
console.log(date.getDate());
console.log(date.getDay()); //星期几 而且是从0开始的,一周的第一天是周日
//获取当前的月份
console.log(date.getMonth()); //月是从0开始算
// 获取当前的年份 返回的是一个4位的年份
console.log(date.getFullYear());
4.案例
封装格式化时间
<script>
// 补0
let addZero = a => a < 10 ? '0' + a : a;
//格式化时间
let date = new Date();
// 星期天是第一天
let arr = ['星期天', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六']
let y = date.getFullYear();
let mon = date.getMonth() + 1;//月从0开始
let d = date.getDate();
let h = date.getHours();
let min = date.getMinutes();
let s = date.getSeconds();
let w = date.getDay();
console.log(`${y}-${addZero(mon)}-${addZero(d)}\t${addZero(h)}:${addZero(min)}:${addZero(s)}\t${arr[w]}`);
</script>
倒计时
<script>
let addZero = a => a < 10 ? '0' + a : a;
let date = new Date();
//倒计时的时间
let date2 = new Date(2020, 11, 31);//设置的时候,月份要减1
// 倒计时距离现在的秒
let time = (date2 - date) / 1000;
// 将秒转化成天,小时,分钟
let d = Math.floor(time / 60 / 60 / 24);
// 将不够天数的转为小时
let h = Math.floor(time / 60 / 60 % 24);
let m = Math.floor(time / 60 % 60);
var s = Math.floor(time % 60);
console.log(`距离2020-12-31还剩${addZero(d)}天${addZero(h)}时${addZero(m)}分${addZero(s)}秒`);
</script>
计算程序耗费时间
<script>
// 开始的时间戳
let start = +new Date();
//程序体
for (let i = 0; i < 9999; i++) {
console.log('小艾同学');
}
// 结束的时间戳
let end = +new Date();
// 耗费的毫秒
let time = end - start;
console.log(`耗时${time}毫秒`);
</script>
三、String对象
String可以遍历,但不能根据索引修改内容
- String的所有方法都不会修改原字符串
1.indexOf()
查询字符在字符串中的索引
let str = '小艾6866同学666';
console.log(str.indexOf('艾'));//1
// 当字符串有多个该字符,只会返回第一个的索引
console.log(str.indexOf(6));//2
// 跟两个参数是,前一个是要查询的字符,后一个是start的索引
console.log(str.indexOf(6, 6));//8
// 当查询连续字符串时候,是将它作为一个整体查询,返回的第一个字符出现的索引
console.log(str.indexOf(66));//4
console.log(str.indexOf(9));//-1
2.trim()
去掉首尾的空格,用于搜索条
let str2 = ' 小 艾 同 学 '
console.log(str2);// 小 艾 同 学
// 只会去除首尾空格,中间的不回会去
console.log(str2.trim());//小 艾 同 学
3.大小写
let str3 = 'abcdEFG'
console.log(str3.toUpperCase());//ABCDEFG
console.log(str3.toLowerCase());//abcdefg
4.concat()字符串拼接
console.log(str.concat(str2, str3));
5.截取字符串
<script>
let str = 'abcdefg';
// 一个参数:就是开始截取的索引start,从strat开始全部提取
console.log(str.slice(2));//cdefg
console.log(str.substring(2));//cdefg
console.log(str.substr(2));//cdefg
//二个参数:第一个参数是开始的索引strat,第二个是结束的索引end
// 从start开始截取到end,取不到end
console.log(str.slice(2, 4));//cd
console.log(str.substring(2, 4));//cd
//二个参数:第一个参数是开始的索引strat,第二个是截取的个数
console.log(str.substr(2, 4));//cdef
// substring不能跟负数
console.log(str.substring(-1));//abcdefg
// 跟负数表示从后到前截取多少个
console.log(str.substr(-2));//fg
console.log(str.slice(-3));//efg
// 始终不会改变原字符串
console.log(str); //abcdefg
</script>
6.replace()字符串替换
// 前面是要把谁替换,后面是替换他的新字符,不限个数
console.log(str.replace('d', 'DD'));//abcDDefg
// 始终不会改变原字符串,需要重新赋值才行
console.log(str); //abcdefg
7.split()字符串切割
<script>
let str = 'a-b-c-d-e-f-g';
// 参数是空字符串,代表将字符串中的每一项都分开到一个新的数组中
console.log(str.split(''));//["a", "-", "b", "-", "c", "-", "d", "-", "e", "-", "f", "-", "g"]
// 参数是符号,就是将字符串以该符号进行分割
console.log(str.split('-'));//["a", "b", "c", "d", "e", "f", "g"]
console.log(str);//不会改变原字符串//a-b-c-d-e-f-g
</script>
8.charAt()
// 根据索引查找该位置的字符串
console.log(str.charAt(2));//b
四、基本包装类型
只有Number、String、Blooean有基本包装类型,undefined和null没有
var num = 123;
var result = num.toString();
// // 发生了三件事情
// 1. 把简单类型转换成复杂类型:var s = new Number(num);
// 2. 调用包装类型的toString方法:var result = s.toString();
// 3. 销毁刚刚创建的复杂类型