Math对象
是一个对象,可以直接调用其方法
最大值,最小值
Math.max()- - -获取数中的最大值
Math.min()- - -获取数中的最小值
如果()里面什么都不写,会返回 -Infinity
如果()里面有非数值的,字符串型数值会自动转换成数字,其他的话,结果会返回NaN
eg:
<script>
var max = Math.max(3, 5, 99, 10, 66);
console.log(max);
var min = Math.min(99, 80, 23, 18, 6);
console.log(min);
console.log(Math.max(3, 9, '榴莲'));
console.log(Math.max());
console.log(Math.max(1, '9'));
</script>
结果:
绝对值
Math.abs()返回数字绝对值,
括号里是非数字时:
null- - -返回0
什么都不写- - -返回NaN
数字型字符串- - -返回对应数字的绝对值
其他类型字符串- - -返回NaN
eg:
<script>
console.log(Math.abs(-1));
console.log(Math.abs(9));
console.log(Math.abs(null));
console.log(Math.abs());
console.log(Math.abs('lili'));
console.log(Math.abs('666'));
console.log(Math.abs('-666'));
</script>
结果:
取整数
Math.floor()- - -向下取整
Math.ceil()- - -向上取整
Math.round()- - -四舍五入取整
注意:Math.round()取整时,.5比较特别,是往大1的取,不遵守四舍五入,负数取整时尤其要注意.5的情况
eg:
<script>
console.log(Math.floor(2.1));
console.log(Math.floor(2.9));
console.log(Math.ceil(3.1));
console.log(Math.ceil(3.9));
console.log(Math.round(1.5));
console.log(Math.round(-1.5));
console.log(Math.round(-1.6));
</script>
结果为:
获取随机数
Math.random() 可以获取[0, 1)之间的一个随机数,包含0,不包含1
获取一个范围内的随机整数:
<script>
function getRandom(min, max) {
return Math.floor(Math.random() * (max - min + 1) + min);
}
// 例如生成一个[2, 9]之间的随机整数
console.log(getRandom(2, 9));
</script>
猜字游戏
猜一个【1~10】之间的数字,让用户输入猜的数:
如果猜大了,提示大了并重新输入;
如果猜小了,提示小了并重新输入;
如果猜对了,提示猜中了,结束程序;
代码示例:
<script>
function getRandom(min, max) {
return Math.floor(Math.random() * (max - min + 1) + min);
}
var rand = getRandom(1, 10);
var number = prompt('猜一个1~10之间的数字,请输入你猜的数字:');
while (true) {
if (number > rand) {
number = prompt('大了,请重猜:');
} else if (number < rand) {
number = prompt('小了,请重猜:');
} else {
alert('真棒,猜对啦!');
break;
}
}
</script>
Date对象
是一个构造函数,需要通过new Date() 创建一个新的对象,然后创建的对象来调用日期方法
返回当前时间的日期
<script>
var date = new Date();
</script>
返回设定的时间的日期
Date()里面可以传参,传的数字型的日期参数的话,传月份参数时,返回的月份比传的月份参数要多1,因为数字型参数是用 getMonth() 处理的,getMonth() 处理月份是以 [0,11] 处理的
<script>
/*
new 的时候也可以在构造函数Date()写日期参数,一般有 数字型 2021, 6, 25 或 字符串型 ‘ 2021-6-25 10:12:13 ’这种格式
注意new Date(2021, 6, 25)这种格式返回的是7月,比6月多一个月
常用字符串型的
*/
var date2 = new Date(2021, 6, 25);
var date3 = new Date('2021-6-25 10:12:13');
</script>
返回当前时间时间戳(总毫秒数)
时间戳(总毫秒数):从1970年1月1日 00:00:00 起 经过的毫秒数
<script>
// 创建日期对象
var date = new Date();
// 方法1:
var time1 = date.valueOf();
// 方法2
var time2 = date.getTime();
// 方法3
var time3 = +new Date();
// 方法4
var time4 = Date.now();
</script>
日期格式化
有的时候需要自己定义日期的显示格式,可以分别获取日期的- - -年、月、日、时、分、秒,然后组装成想要的格式
获取方式:
年- - -日期对象.getFullYear()
月- - -日期对象.getMonth()
日- - -日期对象.getDate()
时- - -日期对象.getHours()
分- - -日期对象.getMinutes()
秒- - -日期对象.getSeconds()
示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Date对象</title>
<script>
// 使用Date对象需要 new ,通过Date构造函数来创建一个新的Date对象
// 返回当前时间
var date1 = new Date();
console.log(date1);
// 返回当前时间的时间戳(总毫秒数),从1970年1月1日起经过的的毫秒数
// 方法1:
console.log(date1.valueOf());
// 方法2
console.log(date1.getTime());
// 方法3
var date2 = +new Date();
console.log(date2);
// 方法4
console.log(Date.now());
/*
new 的时候也可以在构造函数Date()写日期参数,一般有 数字型 2021, 6, 25 或 字符串型 ‘ 2021-6-25 10:12:13 ’这种格式
注意new Date(2021, 6, 25)这种格式返回的是5月,比6月少一个月
常用字符串型的
*/
var date3 = new Date(2021, 6, 25);
console.log(date3);
var date4 = new Date('2021-6-25 10:12:13');
console.log(date4);
// 日期格式化
var date = new Date();
// 获取年、月、日、时、分、秒
var year = date.getFullYear();
var month = date.getMonth() + 1; // getMonth()获取月份[0,11],返回的月份比实际小1,所以要加1
month = month < 10 ? '0' + month : month; // 如果是个位数,就补 0
var day = date.getDate();
day = day < 10 ? '0' + day : day;
var hour = date.getHours();
hour = hour < 10 ? '0' + hour : hour;
var minutes = date.getMinutes();
minutes = minutes < 10 ? '0' + minutes : minutes;
var seconds = date.getSeconds();
seconds = seconds < 10 ? '0' + seconds : seconds;
// 根据需要组装成所需的日期格式
console.log(year + '-' + month + '-' + day + ' ' + hour + ':' + minutes + ':' + seconds);
</script>
</head>
<body>
</body>
</html>
打印结果:
数组对象
创建数组
方式一:字面量
// 利用数组字面量 [] 创建数组
var arr = [2, 6, 8];
方式二:new Array()
// 创建一个空数组
var arr1 = new Array();
// 创建一个长度为 5 的数组,里面有 5 个空的数组元素
var arr2 = new Array(5);
// 创建一个里面有 5 个元素的数组,等价于 var arr = [5, 6, 7, 8, 10];
var arr3 = new Array(5, 6, 7, 8, 10);
注意:new Array(数字) 里面只有一个数字的时候,该数字代表数组的长度,而不是创建一个数组元素为该数字的数组
检测是否为数组
instanceof
eg:
var arr = [];
console.log(arr instanceof Array);
Array.isArray()
eg:
var arr = [];
console.log(Array.isArray(arr));
添加、删除数组元素
添加数组元素:push()、unshift()
push()- - -在数组末尾添加一个或多个元素,返回值为添加元素后的数组长度
unshift()- - -在数组开头添加一个或多个元素,返回值为添加元素后的数组长度
删除数组元素:pop()、shift()
pop()- - -删除数组末尾一个元素,返回值为被删除的元素值
shift()- - -删除数组开头一个元素,返回值为被删除的元素值
注意:push()、unshift()、pop()、shift()都是对原数组进行操作
eg:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>内置对象-数组</title>
<script>
var arr = [];
console.log(Array.isArray(arr));
// 添加数组元素
var arr1 = ['苹果', '香蕉', '橙子'];
console.log(arr1);
// arr1.push('芒果', '榴莲');
console.log(arr1.push('芒果', '榴莲'));
console.log(arr1);
// arr1.unshift('火龙果', '西瓜');
console.log(arr1.unshift('火龙果', '西瓜'));
console.log(arr1);
// 删除数组元素
var arr2 = [1, 3, 6, 8, 9, 11, 13, 22];
console.log(arr2);
// arr2.pop();
console.log(arr2.pop());
console.log(arr2);
// arr2.shift();
console.log(arr2.shift());
console.log(arr2);
</script>
</head>
<body>
</body>
</html>
打印结果:
示例:筛选数组
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script>
/*
有一个包含工资的数组[1500, 1200, 2000, 2100, 1800],
要求把数组中超过2000的删除,剩余的放到新数组里面
*/
var arr = [1500, 1200, 2000, 2100, 1800];
var newArr = [];
for (var i = 0; i < arr.length; i++) {
if (arr[i] < 2000) {
// newArr[newArr.length] = arr[i];
newArr.push(arr[i]);
}
}
console.log(newArr);
</script>
</head>
<body>
</body>
</html>
打印结果:
数组排序
翻转数组:reverse()
升序/降序排序:sort()
注意:sort()排序,默认的,非个位数之间比较的时候,是从第一位开始,如果第一位的值大一些就认为大一些,所以排序可能会乱,想要的带正常的排序顺序要加上一个函数,如下:
获取数组索引:indexOf()、lastIndexOf()
indexOf(元素值)- - -数组中第一次出现该值的索引,从前往后找,没有找到返回-1
lastIndexOf(元素值)- - -数组中最后一次出现该值的索引,从后往前找,没有找到返回-1
eg:
示例:数组去重
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>数组去重</title>
<script>
// 有一个数组['c', 'a', 'z', 'a', 'x', 'a', 'x', 'c', 'b'],要求去除数组中的重复的元素
var arr = unique(['c', 'a', 'z', 'a', 'x', 'a', 'x', 'c', 'b']);
console.log(arr);
var arr1 = unique(['榴莲', '苹果', '橙子', '榴莲']);
console.log(arr1);
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;
}
</script>
</head>
<body>
</body>
</html>
打印结果:
数组转换成字符串:toString()、join()
toString()- - -返回一个元素以逗号分隔的字符串
join()- - -括号里可以填写分隔符,返回元素以该分隔符隔开的字符串
如果括号里面没写的话,效果和toString()一样,以逗号分隔
eg:
合并多个数组:concat()
返回一个新的数组,对原来的数组没影响
eg:
截取数组:slice()、splice()
slice()- - -slice(a),代表从 索引 a 开始,一直截取到数组最后
-
- – - – - -slice(a, b),代表从 索引 a 开始,一直截取到 索引 b-1,b为负值的话,代表从后往前数的第几个,例如-2代表倒数第二个
返回的是一个新的数组,不会对原数组产生影响
eg:
splice()- - -可以添加,也可以删除数组元素,对原数组进行操作,原数组受影响
splice(开始位置, 要删除的个数, 要添加的元素值)
开始位置可以是正数,也可以是负数,正数代表索引,负数代表倒数第几个,如果正数的值大于数组长度,则代表从数组末尾开始,如果负数的绝对值大于数组长度,则代表从开头开始
要删除的个数:0或负数- - -代表不删除;正数代表要删除个数,正数值大于开始位置后面的元素个数时,代表从开始位置,后面的全部都删除
要添加的值:不写时代表不添加,可以写多个,添加多个数组元素
eg:
字符串对象
字符串是基本类型,但是可以使用一些属性和方法,原因是创建字符串时,自动将其类包装了
注意:对字符操作后,其实没有改变原来的字符串,是生成了一个新的字符串
<script>
var str = '今儿个天气还不错';
/* 相当于以下三句
var temp = new String('今儿个天气还不错');
str = temp;
temp = null; */
</script>
获取字符串长度:length属性
字符串.length
返回字符位置:indexOf()
eg:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>字符串-返回字符位置</title>
<script>
// 查找字符串“abcoefoxyozzopp”中所有o出现的位置及次数
var str = 'abcoefoxyozzopp';
var index = str.indexOf('o');
var num = 0;
while (index !== -1) {
num++;
console.log(index);
index = str.indexOf('o', index + 1);
}
console.log('o出现的次数是:' + num);
</script>
</head>
<body>
</body>
</html>
打印结果:
根据位置返回字符:charAt()、charCodeAt()、字符串[位置]
charAt() 和 字符串[位置] 效果一样,知识兼容性不一样,str[位置]是H5有的
charCodeAt() 返回的是字符对应的 ASCII码
eg:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>根据位置返回字符</title>
<script>
var str = '今儿个天气还不错';
for (var i = 0; i < str.length; i++) {
console.log(str.charAt(i));
}
console.log(str.charCodeAt(0));
for (var i = 0; i < str.length; i++) {
console.log(str[i]);
}
</script>
</head>
<body>
</body>
</html>
打印结果:
拼接及截取字符串
拼接字符串:contact()
字符串1.contact(字符串2,字符串3、、、)
contact()里面可以写一或多个字符串
常用的还是用 + 来连接字符串
截取字符串:substr()、slice()、substring()
MDN网站上显示substr()没有严格被废弃,但是被认为是遗留的函数并且可以的话尽量避免使用。它并非JavaScript核心语言的一部分,未来可能会被移除掉。可以的话,使用substring()替代它
使用方法:
①substr(开始位置, 截取个数)- - -
开始位置可以是正值或负值,正值代表从该索引开始(包含该索引位置),向后截取,
负值,代表 字符串长度 + 负值 得到的索引位置(包含该索引位置),向后截取
截取个数可以接收:正数、0、负数,但是 0 和 负数的情况,代表不截取,返回一个空的字符串;如果不写截取个数,代表截取到字符串结尾
②slice(开始索引, 结束索引)- - -
从开始索引位置开始,截取到 结束索引 前一位
如果索引为负值,索引 = 字符串长度 + 负值
结束索引可以不写,代表一致截取到字符串最后
对原来的字符串没有影响,返回一个新的字符串
③substring(开始位置, 结束位置)- - -
从开始位置索引开始,到结束位置索引前一个
不论是开始还是结束,如果有 负值 或者 NaN 都会转化成 0
两者可以互换顺序,小的值为开始位置,大的值为结束位置
如果只写开始位置,代表一直截取到字符串最后
对字符串没有影响,返回的一个新字符串。
代码示例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>字符串操作方法</title>
<script>
// 连接多个字符串。拼接字符串,等效于+,+更常用
var str1 = '今天是';
var str2 = '大太阳';
var str3 = '呀!';
var newStr = str1.concat(str2, str3);
console.log(newStr);
/*
截取字符串
1.substr(开始位置, 截取个数)
2.slice(开始位置索引号, 结束位置索引号) ,截取到--结束位置索引号前一个
3.substring(开始位置, 结束位置),截取到--结束位置索引号前一个;基本和slice相同,但是不接受复制
*/
var str = 'Even though it may seem silly or wrong, you must try.';
console.log('字符串长度为:' + str.length);
var newStr1 = str.substr(40, 12);
console.log(newStr1);
var newStr2 = str.substr(-13, 12);
console.log(newStr2);
var newStr3 = str.substr(2, 0);
console.log(newStr3);
var newStr4 = str.substr(3, -9);
console.log(newStr4);
var newStr5 = str.substr(12);
console.log(newStr5);
console.log(str);
var stri = 'Boys, you must strive to find your own voice.';
console.log('字符串的长度为:' + stri.length);
var stri1 = stri.slice(6);
// console.log(stri[25]);
console.log(stri1);
var stri2 = stri.slice(25, -1);
console.log(stri2);
var stri3 = stri.slice(25, 44);
console.log(stri3);
console.log(stri);
var strin = '文明其思想,野蛮其体魄。';
var strin1 = strin.substring(0);
console.log(strin1);
// 以下都输出 '文明其思想'
var strin2 = strin.substring(0, 5);
console.log(strin2);
var strin3 = strin.substring(5, 0);
console.log(strin3);
var strin4 = strin.substring(5, NaN);
console.log(strin4);
var strin5 = strin.substring(NaN, 5);
console.log(strin4);
// 野蛮其体魄(。)
var strin6 = strin.substring(6);
console.log(strin6);
var strin7 = strin.substring(6, 11);
console.log(strin7);
var strin8 = strin.substring(11, 6);
console.log(strin7);
console.log(strin);
</script>
</head>
<body>
</body>
</html>
打印结果:
替换字符串:replace()
字符串.replace(要替换的字符串,目标字符串)
不会影响原来的字符串,会返回一个新的字符串
eg:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>替换字符串</title>
<script>
var str = '这个文具盒感觉是流线型的';
var newStr = str.replace('感觉是流线型的', '想要飞向天空');
console.log(newStr);
console.log(str);
</script>
</head>
<body>
</body>
</html>
打印结果:
字符串转换成数组:split()
字符串.split(分隔符)
没有写分隔符的话就是转换成只有一个,以该字符串为值的数组
eg:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script>
var str = '史迪仔*蓝胖子*皮卡丘*小狐狸*猫咪老师*龙猫*小白龙';
console.log(str.split('*'));
console.log(str);
var str1 = '红橙黄绿青蓝紫';
console.log(str1.split());
</script>
</head>
<body>
</body>
</html>
打印结果: