javascript 中的对象分为3种: 自定义对象、内置对象、浏览器对象;
内置对象: 就是JS自带的对象, 提供常用的属性和方法,帮助我们快速开发;
常见内置对象:
Math
,Date
,Array
,String
等;查文档:MDN,地址:https://developer.mozilla.org/zh-CN/ 看去吧;
Math对象
Math不是构造函数,所以不用new,可以直接使用属性和方法;
Math.PI
,就是PI属性,直接用;
console.log(Math.PI); //3.141592653589793
Math.max
取最大值;有非数字时返回NaN; 不带参数时返回:-Infinity;
console.log(Math.max(1,3,89)); //89
console.log(Math.max(23, 'a')); // NaN 有非数字的,就返回NaN
console.log(Math.max()); // -Infinity 不带参数的结果;
Math.abs
取绝对值;
console.log(Math.abs(-1)); // 1
console.log(Math.abs('-1')) ; // 1 隐式转换
console.log(Math.abs('abc'));// NaN
Math.floor
向下取整;
console.log(Math.floor(1.9)); // 1
console.log(Math.floor(1.1)); // 1
Math.ceil
向上取整;
console.log(Math.ceil(1.1)); // 2
console.log(Math.ceil(1.9)); // 2
Math.round
四舍五入取整;
console.log(Math.round(1.1)); // 1
console.log(Math.round(1.9)); // 2
console.log(Math.round(-1.1)); // -1
console.log(Math.round(-1.5)); // -1 为负数时,往大里取;
Math.random
取随机数,伪随机数范围 [0,1)之间的浮点数;注意开闭区间;不用参数;
console.log(Math.random()); // 0.3607823740109528
习题:得到两个数之间的随机整数,包括这两个数在内;
公式: Math.floor(Math.random()*(max - min +1))+min;
代码:得到 [3-9]之间的随机整数;
console.log(Math.floor(Math.random()*(9-3+1))+3);
封装:getRandom() 函数,得到[min-max]之间的随机整数;
function getRandom(min,max){
return Math.floor(Math.random()*(max-min+1))+min;
}
console.log(getRandom(2,5)); // 生成 [2-5]之间随机数,包含2和5;
let arr = ['张三', '李四', '王五', '赵六', '马大骨']; // 随机点名
console.log(arr[getRandom(0, arr.length -1)]);
/*猜数字游戏*/
let myNum = getRandom(0, 10);
console.log(myNum);
while (true) {
let num = parseInt(prompt('请输入 0-10 之间数:'));
if (num == myNum) {
alert('对了');
break;
} else if (num > myNum) {
alert('大了');
} else {
alert('小了');
}
}
封装一个Math对象:myMath;
let myMath = {
PI: 3.1415926,
max: function() {
let max = arguments[0];
for (let i = 0; i < arguments.length; i++) {
if (max < arguments[i]) {
max = arguments[i];
}
}
return max;
}
}
console.log(myMath.PI); //3.1415926
console.log(myMath.max(2, 3, 4)); // 4
Date() 对象
日期对象,构造函数,必须要用 new 来创建对象,即实例化;
- 不带参数,返回当前时间;
- 带参数,常用字符串时间;
- 基于1970年1月1日(标准时间)起的毫秒数;为啥是这个时间?
let myd1 = new Date();
console.log(myd1); // Sun Nov 22 2020 16:34:30 GMT+0800 (中国标准时间)
let myd2 = new Date('2222-22-22 22:22:22');
console.log(myd2); // Fri Feb 22 2222 22:22:22 GMT+0800 (中国标准时间)
格式化时间的方法
getFullYear()
,getMonth()
,getDate()
,getDay()
,getHours()
,getMinutes()
,getSeconds()
- getMonth() 月份是从0开始计数,所以11月显示为10;
- 星期一到星期六是:1-6;星期天是0;
let myd = new Date();
console.log(myd.getFullYear()); // 2020
console.log(myd.getMonth() + 1); // 10
console.log(myd.getDate()); // 22
console.log(myd.getDay()); // 0 -> 星期天
console.log(myd.getHours()); // 16
console.log(myd.getMinutes()); // 45
console.log(myd.getSeconds()); // 10
/*生成中文日期: 2020年5月1日 星期五*/
let year = myd.getFullYear();
let month = myd.getMonth() + 1;
let day = myd.getDate();
let week = myd.getDay();
let arr = ['星期天', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六', ]
console.log('今天是:' + year + '年' + month + '月' + day + '日 ' + arr[week]); // 今天是:2020年11月22日 星期天
/*封装时间:数字小于10时补0;*/
function myGetTime(time) {
let hour = time.getHours();
hour = hour < 10 ? '0' + hour : hour;
let min = time.getMinutes();
min = min < 10 ? '0' + min : min;
let sec = time.getSeconds();
sec = sec < 10 ? '0' + sec : sec;
return '时间是:' + hour + ':' + min + ':' + sec;
}
console.log(myGetTime(myd)); // 时间是:17:02:47
得到毫秒数
valueOf()
,getTime()
,+new Date()
,Date.now()
代码演示实例:
let myd = new Date();
console.log(myd.valueOf()); // 1606037095639
console.log(myd.getTime()); // 1606037095639
let myd1 = +new Date();
console.log(myd1); // 1606037095639
console.log(Date.now()); // 1606037095639
倒计时实例:
function countDown(time) {
let curTime = Date.now(); // 当前时间毫秒
let iptTime = +new Date(time); // 输入时间毫秒
let times = (iptTime - curTime) / 1000 // 时间差的秒数
/*通过公式获得倒计时:天、时、分、秒*/
let d = parseInt(times / 60 / 60 / 24); // 天
d = d < 10 ? '0' + d : d;
let h = parseInt(times / 60 / 60 % 24); // 时
h = h < 10 ? '0' + h : h;
let m = parseInt(times / 60 % 60); // 分
m = m < 10 ? '0' + m : m;
let s = parseInt(times % 60); // 秒
s = s < 10 ? '0' + s : s;
return d + '天' + h + '时' + m + '分' + s + '秒';
}
/*注意字符串时间取值*/
console.log(countDown('2020-11-23 00:00:00')); // 00天06时12分46秒
Array() 数组对象
创建数组的方法: 数组子面量、 利用new Array();
let arr =[1,2,3];
console.log(arr);
let arr1 = new Array(2);
let arr2 = new Array(2,3);
封装翻转数组的函数, 翻转数组的方法
reverse()
function reverseArr(arr) {
let newArr = [];
for (let i = arr.length - 1; i >= 0; i--) {
newArr[newArr.length] = arr[i];
}
return newArr;
}
console.log(reverseArr([1, 2, 3, 4])); // [4, 3, 2, 1]
console.log([1,2,3].reverse()); // [3,2,1]
检查是否是数组:
instanceof
,Array.isArray()
console.log([1, 2, 3] instanceof Array); // true
console.log(Array.isArray([1,2,3])); // true
添加删除数组元素:
push()
,unshift()
,pop()
,shif()
- push和unshift 添加数组元素,一个在后面添加,一个在前面,都返回数组长度;
- pop和shif 删除数组元素,一个从后面删除,一个从前面,都返回删除的数组元素;
let arr = [1,2,3];
let num = arr.push(4,'Jack');
console.log(arr); // [1,2,3,4,'Jack']
console.log(num); // 5 返回新数组长度;
let num = arr.unshift('red','green');
console.log(arr); // ["red", "green", 1, 2, 3, 4, "Jack"]
console.log(num); // 7 返回新数组长度;
let tmp = arr.pop();
console.log(arr); // ["red", "green", 1, 2, 3, 4]
console.log(tmp); // Jack
let tmp = arr.shif();
console.log(arr); // ["green", 1, 2, 3, 4]
console.log(tmp); // red
/*
工资数组: [1500,1200,1800,2000,2300,2800]
筛选工资少于2000的,并放在新数组
*/
let arr = [1500, 1200, 1800, 2000, 2300, 2800];
let newArr = [];
for (let i = 0; i < arr.length; i++) {
if (arr[i] < 2000) {
newArr.push(arr[i]);
// newArr[newArr.length] = arr[i];
}
}
console.log(arr);
console.log(newArr); // [1500, 1200, 1800]
数组排序(冒泡排序)
let arr = [2,3,1,5]
arr.sort(function(a,b){
return a-b; // 升序
// return b-a; // 降序
})
console.log(arr); // [1, 2, 3, 5]
数组索引:
indexOf()
,lastIndexOf()
let arr = [2, 3, 1, 5, 3]
console.log(arr.indexOf(3)); // 1 返回第一个索引;
console.log(arr.indexOf(6)); // -1 找不到的话,返回-1;
console.log(arr.lastIndexOf(3)); // 4 从后面查;
数组实例: 封装数组去重函数;
unique()
function unique(arr) {
let newArr = [];
for (let i = 0; i < arr.length; i++) {
if (newArr.indexOf(arr[i]) == -1) {
newArr.push(arr[i]);
}
}
return newArr;
}
let arr = ['c', 'a', 'z', 'a', 'x', 'a', 'x', 'c', 'b'];
/* let arr = ['blue','green','blue']; */
console.log(unique(arr)); // ["c", "a", "z", "x", "b"]
数组转字符串:
toString()
,join()
let arr = ['c', 'a', 'z', 'a', 'x', 'a', 'x', 'c', 'b'];
console.log(arr.toString()); // c,a,z,a,x,a,x,c,b
console.log(arr.join('-')); // c-a-z-a-x-a-x-c-b
String() 对象
基本包装类型:把简单类型包装成复杂数据类型;
字符串的不可变性:看上去内容可变,其实是地址变了,内存中新开辟了内存空间;
let str = 'andy';
console.log(str.length); // 4
/* 以上代码等同于 */
let tmp = new String('andy');
str = tmp; // 临时变量给str
tmp = null; // 销毁tmp
查找字符串: indexOf()
,lastIndexOf()
let str = 'hello';
console.log(str.indexOf('e')); // 1
/* 判断o出现的位置和总次数*/
let str = 'adolkjolwoawfo';
let index = str.indexOf('o');
let num = 0;
while (index != -1) {
console.log(index);
num++;
index = str.indexOf('o', index + 1);
}
console.log('共出现次数:' + num);
/*
把字符串换成数组与一样
例如:['red','blue','red','green','red']
查询 'red' 出现的位置和总次数
*/
根据位置返回字符:
charAt(index)
,charCodeAt(index)
,str[index]
- charCodeAt(index) 返回索引号字符的ASCII值,可以判断用户按下的哪个键 ;
let str = 'andy';
console.log(str.charAt(3)); // y
console.log(str.charCodeAt(0)); // 97
console.log(str[0]); // a
for (let i = 0; i < str.length; i++) {
console.log(str.charAt(i));
}
/* 把数组中的字符与出现的次数存为对象,取出出现次数最多的 */
let str = 'adolkjolwoawfo';
let o = {};
for (let i = 0; i < str.length; i++) {
let chars = str.charAt(i);
if (o[chars]) {
o[chars]++;
} else {
o[chars] = 1;
}
}
console.log(o); // {a: 2,d: 1,f: 1,j: 1,k: 1,l: 2,o: 4,w: 2 ... }
let max = 0; // 出现次数;
let ch = '' // 对应字符;
for (let key in o) {
if (o[key] > max) {
max = o[key];
ch = key;
}
}
console.log(max);
console.log('出现最多的是:' + ch);
实例截图:
字符串操作:
concat()
,substr()
,replace()
,split()
,toUpperCase()
,toLowerCase()
let str = 'hello';
console.log(str.concat(' world')); // hello world
console.log(str.substr(2, 2)); // ll 从第2个位置,取2个;
console.log(str.replace('l', '*')); // he*lo , 只能替换一个字符;
while (str.indexOf('l') != -1) {
str = str.replace('l', '*');
}
console.log(str); // he**o 使用循环替换
let str = 'red,blue,gree';
console.log(str.split(',')); // ["red", "blue", "gree"]