一、内置对象
3种内置对象:
自定义对象(ECMAScript)
内置对象(ECMAScript)
浏览器对象(JS API)
二、Math对象
Math对象不是构造函数,所以不需要new来调用,可以直接使用里面的属性和方法
Math对象 不需要通过new就可以直接使用
1、圆周率:Math.PI
2、求最大和最小值:Math.max(参数)/Math.min(参数)
Math.max():括号中可以有参数也可以没有参数。
不带参数时输出的是-Infinity
带参数时:若里面参数都是数字,返回最大值;若里面参数有字符串,则返回NaN
3、绝对值:Math.abs() 有一个隐式转换
4、向下取整:Math.floor()
5、向上取整:Math.ceil()
注意:如果是小数,小数点后面跟了15个0 那么是取整数
6、四舍五入 就近取整:Math.round()
注意:其他数字都是四舍五入,但是 .5特殊 它往大了取(当数为负数时:如 -3.5 结果是 -3)
7、获取范围在[0,1)内的随机值:Math.random()
注意:
1、Math对象随机数方法 random() 返回一个随机的小数 0=<X<1
2、这个方法里不跟参数
//[0,1]内的随机值:Math.floor(Math.random() * (max - min + 1)) + min;
例题1:得到两个数之间的随机整数,并且包含这两个整数
function getRandom(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
console.log(getRandom(1, 10));
例题2:随机点名:
var arr = ["张三", "李四", "王五", "老刘"];
function getRandom(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
console.log(arr[getRandom(0, arr.length - 1)]);
例题3: 猜数字游戏
function getRandom(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
// console.log(getRandom(1, 10));
var random = getRandom(1, 10);
//死循环 所有需要有一个break退出程序
while (true) {
var num = prompt("你来猜?输入1~10之间的一个数字");
if (num > random) {
alert("你猜大了");
} else if (num < random) {
alert("你猜小了");
} else {
alert("你猜对啦");
break; //退出整个循环 结束程序
}
}
三、日期对象
Date() 日期对象是一个构造函数 必须使用new 来调用创建日期对象
var date=new Date();
1、使用Date 如果没有参数 返回当前系统的当前时间
2、参数常用的写法:1、数字型:2021,01,06(返回的比实际的月份大一个月)
2、字符串型:'2020-01-06 21:22:33' '2020/01/08'
3、格式化日期年月日
//若要输出 2021年 1月7日 星期四
var year = date.getFullYear();
var month = date.getMonth() + 1;//返回当前的月份 注意:getMonth()返回的月份比当前月份小一个月
var dates = date.getDate();
var arr = ["星期日","星期一","星期二","星期三","星期四","星期五","星期六",];
var day = date.getDay();
console.log("今天是:" + year + "年" + month + "月" + dates + "日 " + arr[day]);
4、格式化日期时分秒
//要求封装一个函数返回当前的时分秒 格式*:08:08:08
function getTime() {
var time = new Date();
var h = time.getHours();
h = h < 10 ? "0" + h : h;
var m = time.getMinutes();
m = m < 10 ? "0" + m : m;
var s = time.getSeconds();
s = s < 10 ? "0" + s : s;
return h + ":" + m + ":" + s;
}
console.log(getTime());
5、获取日期的总的毫秒形式(Date对象毫秒数是从1070年开始的)
获取Date总的毫秒数 不是当前时间的毫秒数 而是距离1970年1月1日过了多少毫秒数
// 1、通过valueOf()或通过getTime()获取Date总的毫秒数
var date = new Date();
console.log(date.valueOf());
console.log(date.getTime());
// 2、简单写法(最常用的写法)
var date1 = +new Date(); //+new Date() 返回的就是总的毫秒数
// 3、H5新增的 获取总的毫秒数
console.log(Date.now());
6、倒计时
核心算法:输入的时间减去现在的时间就是剩余的时间,即倒计时(不能拿时分秒相减)
1、可以用时间戳来做,用户输入时间总的毫秒数减去现在的时间的总的毫秒数得到的就是剩余时间的毫秒数
2、把剩余时间总的毫秒数转换为天、时、分、秒(时间戳转换为时分秒)
转换公式:
天数: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; //剩余时间总的毫秒数(1秒=1000毫秒)
var times = (inputTime - nowTime) / 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-1-30 12:12:12"));
四、数组对象
1、创建数组的方式:
1、利用new Array()创建数组
var arr = new Array(); //创建了一个空的数组
var arr = new Array(2); //创建了一个长度为2的数组 即里面有2个空的数组元素
var arr = new Array(2,3); //等价于 var arr =[2,3] 即里面有两个数组元素 是2
即:如果小括号里写了一个值 那么代表的是 新数组的长度 这个时候没有值 全是empty
如果写了两个及两个以上的值(值与值之间用逗号隔开)那么就是新数组里边的元素了
2、利用数组字面量创建数组[](最常用)
var arr = [1,2,pink,true];//创建了一个数组
2、检测是否为数组方法
1、instanceof 运算符 它可以用来检测是否为数组
var arr = [];
var obj = {}; //对象
console.log(arr instanceof Array); //true
console.log(obj instanceof Array); //flase
2、Array.isArray(参数) ie及以上版本支持
console.log(Array.isArray(arr));//true
function fn() {
console.log(arguments instanceof Array); //false 说明arguments不是数组
}
fn(1, 2, 3, 4);
3、添加删除数组元素方法
1、push()在数组末尾添加一个或多个数组元素
2、unshift()在数组开头添加一个或多个数组元素
注意:
1、push给数组追加新的元素
2、数组元素直接写在push()里
3、push完毕后,返回的结果是新数组的长度
4、push完毕后,原数组会发生变化
unshift()同理
4、 删除数组元素方法
1、pop()只能删除数组的最后一个元素
注意:
1、pop()删除数组的最后一个元素,一次只能删一个元素
2、pop()没有参数
3、pop完毕后,返回的结果是删除的那个元素
4、pop完毕后,原数组会发生变化
2、shift()只能删除数组开头的第一个元素
注意:
1、shift()删除数组的最后一个元素,一次只能删一个元素
2、shift()没有参数
3、shift完毕后,返回的结果是删除的那个元素
4、shift完毕后,原数组会发生变化
5、数组筛选
// 要求把大于7的数字删除,剩余的放到新数组里
var arr = [1, 5, 6, 7, 2, 3, 4, 8, 9, 10];
var newArr = [];
for (var i = 0; i < arr.length; i++) {
if (arr[i] < 7) {
// newArr[newArr.length] = arr[i];
newArr.push(arr[i]);
}
}
console.log(newArr);
6、数组排序:sort()
// 1、翻转数组
var arr = ["pink", "purple", "red"];
arr.reverse();
console.log(arr);js
// 2、数组排序(冒泡排序)
var arr1 = [13, 4, 77, 1, 7];
arr1.sort(function (a, b) {
// return a - b; //升序
return b - a; //降序
});
console.log(arr1);
7、获取数组元素的索引号:indexof()
但是只返回第一个满足条件的索引号,
如果在该数组中找不到元素,则返回-1
var arr = ["red", "green", "blue", "pink"];
console.log(arr.indexOf("blue"));
了解:lastindeOf()从后面开始查找
数组去重:
// 核心算法:遍历旧数组,然后拿着旧数组元素去查询新数组,如果该元素在新数组中没有出现过就添加,否则不添加
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", "n", "c", "g", "a"]);
console.log(demo);
8、数组转换为字符串:toString()
// 1、toString()
var arr = [1, 2, 3];
console.log(arr.toString()); //1,2,3
// 2、join(分隔符)
var arr1 = [1, 2, 3];
console.log(arr1.join("&")); //1&2&3
9、concat(str1,str2...):连接两个或多个数组 不影响原数组 返回一个新的数组
10、substr(start,length):从start位置开始(索引号),length取得个数 重点记住这个
11、slice(start,end):从start位置开始(索引号),截取到end位置(索引号),end取不到。返回被截取项目的新数组
12、(重点看)splice():数组删除splice(从第几个开始,要删个数) 返回被删除项目的新数组 注意 这个会影响原数组
12、基本包装类型:把简单数据类型包装成复杂数据类型(可以使用里面的属性和方法)
基本包装类型:String、Number、Boolean
步骤
1、把简单数据类型包装成复杂数据类型
2、把临时变量的值给str
3、销毁这个临时变量
//var str = "andy";
var temp = new String("andy");
str = temp;
temp = null;
console.log(str.length); //4
五、字符串对象
1、字符串的不可变
指的是里面的值不可变,虽然看上去可以改变内容,但其实是地址变了,内存中新开辟了一个内存空间
2、根据字符返回位置
str.indexOf('要查找的字符',[索引号的起始位置])
案例:查找字符串"jseabchsdakascj"中所有a出现的位置以及次数
// 核心算法:
// 1、先查找第一个a出现的位置,
// 2、只有indexOf返回的结果不是-1就继续往后查找
// 3、因为indexOf只能查找到第一个,所以后面的查找,需要利用第二个参数,当前索引加1,从而继续查找
var str = "jseabchsdakascj";
var index = str.indexOf("a");
var num = 0;
// console.log(index);//3
while (index !== -1) {
console.log(index); //3 9 11
num++;
index = str.indexOf("a", index + 1);
}
console.log("a出现的次数是:" + num);
3、根据位置返回字符(重点)
1、charAt(index索引号)返回指定位置的字符
2、charCodeAt(index索引号)获取指定位置处字符的ASCII码 目的:判断用户按下了哪个键
注:A:65 a:97
3、str[index索引号]获取指定位置处字符
4、判断是否有某个属性 对象['属性名']
// 案例: 统计出现最多的字符和次数'hjkccsc'
// 核心算法:
// 1、利用charAt()遍历这个字符串
// 2、把每个字符都存储给对象,如果对象没有该属性,就为1,如果存在了就+1
// 3、遍历对象,得到最大值和该字符
// 1、利用charAt()遍历这个字符串,把每个字符都存储给对象
var str = "hjkccsc";
var a = {};
for (var i = 0; i < str.length; i++) {
var chars = str.charAt(i); //chars是字符串的每一个字符
if (a[chars]) {
//a[chars]得到的属性值
a[chars]++;
} else {
a[chars] = 1;
}
}
console.log(a);
//2、遍历对象
var max = 0;
var ch = "";
for (var k in a) {
//K 得到的是属性名
//a[k] 得到的是属性值
if (a[k] > max) {
max = a[k];
ch = k;
}
}
console.log(max);
console.log("最多的字符是:" + ch);
5、字符串操作方法(重点)
concat(str1,str2...):拼接字符串 等价于'+'
重点:substr(start,length是取得个数)
slice(start,end取不到)
substring(start,end取不到)和slice基本相同,但是不接受负值
6、替换字符replace('被替换的字符','替换为的字符') 它只会替换第一个字符
案例: 把一个字符串中的a都替换为*
var str='hagafadasa'
while(str.indexOf('a')!==-1){
str=str.replace('a','*')
}
console.log(str)
7、字符转换为数组split('分隔符')
之前学的: 数组转换为字符串join('分隔符')
var str='red,pink,blue'
colsole.log(str.split(','))
var str='red&pink&blue'
colsole.log(str.split('&'))
7、toUpperCase()//转换大写
toLowerCase()//转换小写