1.内置对象
- JavaScript中的对象分为三种:自定义对象、内置对象、浏览器对象
- 前面两种对象是JS基础内容,属于ECMAScript;第三个浏览器对象属于JS独有的
- 内置对象就是指JS语言自带的一些对象,这些对象供开发者使用,并提供了一些常用的或是额最基本而必要的功能(属性和方法)
- 内置对象最大的优点就是帮助我们快速开发
- JavaScript提供了多个内置对象:Math、DATE、Array、String等
2. 查文档
2.1 MDN
MDN:https://developer.mozilla.org/zh-CN/
2.2 如何学习对象中的方法
3.Math对象
<script>
// Math数学对象 不是一个构造函数 所以不需要new来调用 直接使用里面的属性和方法即可
console.log(Math.PI); //3.141592653589793
console.log(Math.max(1, 99, 3)); //99
console.log(Math.max(1, 99, '郭老师')); //NaN
console.log(Math.max()); //-Infinity
</script>
案例:封装自己的数学对象
利用对象封装自己的数学对象 里面有PI、最大值和最小值
<script>
var myMath = {
PI: 3.1415926,
getMax: function () {
var max = arguments[0];
for (var i = 0; i < arguments.length; i++) {
max = max > arguments[i] ? max : arguments[i];
}
return max;
},
getMin: function () {
var min = arguments[0];
for (var i = 0; i < arguments.length; i++) {
min = min < arguments[i] ? min : arguments[i];
}
return min;
}
}
console.log(myMath.PI); //3.1415926
console.log(myMath.getMax(1, 5, 9)); //9
console.log(myMath.getMin(1, 5, 9)); //1
</script>
3.1 Math概述
Math对象不是构造函数,它具有数学常数和函数的属性和方法,跟数学相关的运算(求绝对值,取整,最大值等)可以使用Math中的成员
Math.PI //圆周率
Math.floor() //向下取整
Math.ceil() //向上取整
Math.round() //四舍五入版 就近取整 注意-3.5 结果是-3
Math.abs() //绝对值
Math.max()/Math.min() //求最大值和最小值
<script>
// 1.绝对值
console.log(Math.abs(1));// 1
console.log(Math.abs(-1)); // 1
console.log(Math.abs('-1')); // 1 隐式转换
console.log(Math.abs('pink')); // NaN
// 2.三个取整方法
// (1)Math.floor() 地板 往小了取
console.log(Math.floor(1.1)); // 1
console.log(Math.floor(1.9)); // 1
console.log(Math.floor(-1.1)); // -2
console.log(Math.floor(-1.9)); //-2
// (2)Math.ceil() 天花板 往大了取
console.log(Math.ceil(1.1)); // 2
console.log(Math.ceil(1.9)); // 2
console.log(Math.ceil(-1.1)); // -1
console.log(Math.ceil(-1.9)); // -1
// (3)Math.round() 四舍五入 其他数字都是四舍五入 但是.5特殊 它往大了取
console.log(Math.round(1.1)); // 1
console.log(Math.round(1.5)); // 2
console.log(Math.round(1.9)); // 2
console.log(Math.round(-1, 1)); // -1
console.log(Math.round(-1.5)); // -1
</script>
3.2 随机数方法 random()
<script>
// 1.Math对象随机数方法 random() 返回一个随机的小数 0<=x<1
// 2.这个方法里面不跟参数
console.log(Math.random());
// 3.想得到两个数之间的随机整数,并且包含这两个整数
// 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, 19));
// 4.随机点名
var arr = ['张三', '张三丰', '李四', '李思思'];
console.log(arr[getRandom(0, arr.length - 1)]);
</script>
案例:猜数字游戏
<script>
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;
}
}
</script>
<script>
function getRandom(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
var random = getRandom(1, 10);
var i = 0;
while (i < 3) {
var num = prompt('请猜一个1到10的数,你有3次机会');
if (num < random) {
alert('你猜小了');
} else if (num > random) {
alert('你猜大了');
} else {
alert('你猜对了');
break;
}
i++;
}
</script>
4.日期对象
4.1 Date概述
- Date对象和Math对象不一样,他是一个构造函数,所以我们需要实例化之后才能使用
- Date实例用来处理日期和时间
<script>
// Date()日期对象 是一个构造函数 必须使用new 来调用创建日期对象
// 1.使用Date 如果没有参数 返回当前系统的当前时间
var date = new Date();
console.log(date);
// 2.参数常用写法 数字型 2019,1o,01 或者是字符串型 '2019-10-01'
var date1 = new Date(2019, 10, 1);
console.log(date1); //返回的是11月不是10月
var date2 = new Date('2019-10-1');
console.log(date2);
</script>
4.2 Date()方法的使用
1.获取当前时间必须实例化
2.Date()构造函数的参数
如果括号里面有时间,就返回参数里面的时间,例如日期格式字符串为'2019-5-1',可以写成new Date('2019-5-1')或者new Date('2019/5/1')
4.3 日期格式化
我们想要2019-8-8 8:8:8 格式的日期怎么办?
需要获取日期指定的部分,所以我们要手动的得到这种格式
<script>
var date = new Date();
console.log(date.getFullYear()); // 2022 返回当前日期的年
console.log(date.getMonth() + 1); //4 月份 返回的月份少1 所以要+1
console.log(date.getDate()); //16 返回当前的日期
console.log(date.getDay()); //6 周一返回的是1 周六返回的是6 周日返回的是0
// 要写一个2022年4月16日 星期六
var year = date.getFullYear();
var month = date.getMonth() + 1;
var dates = date.getDate();
var day = date.getDay();
var arr = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'];
console.log('今天是:' + year + '年' + month + '月' + dates + '日 ' + arr[day]);
</script>
<script>
var date = new Date();
console.log(date.getHours());
console.log(date.getMinutes());
console.log(date.getSeconds());
// 要求封装一个函数返回当前的时分秒 格式:08:08:08
var time = new Date();
function getTimer() {
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());
</script>
4.4 获取日期的总的毫秒形式
<script>
// 获得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());
</script>
案例:倒计时效果
<script>
function countDown(time) {
var nowTime = +new Date(); //返回的是当前时间总的毫秒数
var inputTime = +new Date(time); //返回的是输入时间总的毫秒数
var times = (inputTime - nowTime) / 1000; //times是剩余时间总的秒数
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('2022-4-16 17:30:00'));
</script>
5. 数组对象
5.1 数组对象的创建
创建数组对象的两种方式:
- 字面量方式
- new Array()
<script>
// 创建数组的两种方式
// 1.利用数组字面量
var arr = [1, 2, 3];
console.log(arr[0]);
// 2.利用new Array()
// var arr1 = new Array(); //创建了一个空的数组
// var arr1 = new Array(2); //创建了一个长度为2的数组
var arr1 = new Array(2, 3);
console.log(arr1); //[2,3]
</script>
5.2 检测是否为数组
<script>
// 翻转数组
function reverse(arr) {
if (arr instanceof Array) {
var newArr = [];
for (var i = arr.length - 1; i >= 0; i--) {
newArr[newArr.length] = arr[i];
}
return newArr;
} else {
return '请输入一个数组';
}
}
console.log(reverse([1, 2, 3, 4])); // [4,3,2,1]
console.log(reverse(1, 2, 3)); // []
// 检测是否为数组
// (1)instanceof 运算符 它可以用来检测是否为数组
var arr = [];
var obj = {};
console.log(arr instanceof Array); // true
console.log(obj instanceof Array); // false
// (2)Array.isArray(参数); H5新增的方法 ie9以上版本支持
console.log(Array.isArray(arr)); // true
console.log(Array.isArray(obj)); // false
</script>
5.3 添加删除数组元素的方法
方法名 | 说明 | 返回值 |
---|---|---|
push(参数1....) | 末尾添加一个或多个元素,注意修改原数组 | 并返回新的长度 |
pop() | 删除数组最后一个元素,把数组长度减1 无参数、修改原数组 | 返回它删除的元素 |
unshift(参数1...) | 向数组的开头添加一个或更多元素,注意修改原数组 | 并返回新的长度 |
shift() | 删除数组的第一个元素,数组长度减1 无参数、修改原数组 | 并返回第一个元素 |
<script>
// 添加删除数组元素方法
// 1.push() 在数组的末尾 添加一个或者多个数组元素
var arr = [1, 2, 3];
console.log(arr.push(4, 'pink'));
console.log(arr);
// (1) push是可以给数组追加新的元素
// (2)push()参数直接写数组元素就可以了
// (3)push完毕之后,返回的结果是新数组长度
// (4)原数组也会发生变化
// 2.unshift在数组的开头 添加一个或多个数组元素
console.log(arr.unshift('red', 'purple'));
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)原数组也会发生变化
</script>
案例:筛选数组
<script>
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]);
}
}
console.log(newArr);
</script>
5.4 数组排序
方法名 | 说明 | 是否修改原数组 |
---|---|---|
reverse() | 颠倒数组中元素的顺序,无参数 | 该方法会改变原来的数组 返回新数组 |
sort() | 对数组的元素进行排序 | 该方法会改变原来的数组 返回新数组 |
<script>
// 数组排序
// 1.翻转数组
var arr = ['red', 'pink', 'blue'];
arr.reverse();
console.log(arr);
// 2.数组排序(冒泡排序)
var arr1 = [44, 13, 1, 7];
// arr1.sort(); //sort()只能对个位数排序 如果位数多了会出错
arr1.sort(function (a, b) {
// return a - b; //升序的顺序排列
return b - a; //降序的顺序排列
})
console.log(arr1);
</script>
5.5 数组索引方法
方法名 | 说明 | 返回值 |
---|---|---|
indexOf() | 数组中查找给定元素的第一个索引 | 如果存在返回索引号,如果不存在,则返回-1 |
lastIndexOf() | 在数组中的最后一个的索引 | 如果存在返回索引号,如果不存在,则返回-1 |
<script>
var arr = ['red', 'yellow', 'blue', 'pink', 'blue'];
console.log(arr.indexOf('blue')); // 2 只返回第一个
console.log(arr.indexOf('green')); // -1
console.log(arr.lastIndexOf('blue')); //4
</script>
案例:数组去重(重点)
<script>
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;
}
console.log(unique(['c', 'a', 'z', 'a', 'x', 'a', 'x', 'c', 'b']));
</script>
5.6 数组转换为字符串
方法名 | 说明 | 返回值 |
---|---|---|
toString() | 把数组转换成字符串,逗号分隔每一项 | 返回一个字符串 |
join('分隔符') | 方法用于把数组中的所有元素转换为一个字符串 | 返回一个字符串 |
<script>
var arr = [1, 2, 3];
console.log(arr.toString());
var arr1 = ['red', 'yellow', 'pink'];
console.log(arr1.join()); //默认使用逗号连接
console.log(arr1.join('-'));
</script>
5.7 补充
6.字符串对象
为了方便操作基本数据类型,JavaScript还提供了三个特殊的引用类型:String、Number和Boolean
6.2 字符串的不可变
指的是里面的值不可变,虽然看上去可以改变内容,但其实是地址变了,内存中新开辟了一个内存空间
var str = 'abc';
str = 'hello';
//当重新给str赋值的时候,常量'abc'不会被修改,依然在内存中
//重新给字符串赋值,会重新在内存中开辟空间,这个特点就是字符串的不可变
//由于字符串的不可变,在大量拼接字符串的时候会有效率问题
var str = '';
for (var i = 0; i< 1000000; i++) {
str +=i;
}
console.log(str); // 这个结果需要花费大量时间来显示,因为需要不断地开辟新的空间
6.3 根据字符返回位置
字符串所有的方法,都不会修改字符串本身(字符串是不可变的),操作完成会返回一个新的字符串
方法名 | 说明 |
---|---|
indexOf('要查找的字符',[开始的位置]) | 返回指定内容在元字符串中的位置,如果找不到就返回-1,开始的位置是index索引号 |
lastIndexOf() | 从后往前找,只找第一个匹配的 |
<script>
// 字符串对象 根据字符返回位置 str.indexOf('要查找的字符',[起始的位置]);
var str = '改革春风吹满地,春天在哪里';
console.log(str.indexOf('春')); // 2
console.log(str.indexOf('春', 3)); // 8 从索引号是3的位置开始往后查找
</script>
案例:返回字符位置
<script>
var str = 'abcoefokfdaodaoa';
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);
</script>
var arr = ['red', 'blue', 'red', 'yellow', 'pink', 'red', 'purple'];
var index = arr.indexOf('red');
var num = 0;
while (index !== -1) {
console.log(index);
num++;
index = arr.indexOf('red', index + 1);
}
console.log('red出现的次数为:' + num);
6.4 根据位置返回字符(重点)
方法名 | 说明 | 使用 |
---|---|---|
charAt(index) | 返回指定位置的字符(index字符串的索引号) | str.charAt(0) |
charCodeAt(index) | 获取指定位置处字符的ASCII码(index索引号) | str.charCodeAt(0) |
字符串名[index] | 获取指定位置处字符 | HTML5,IE8+支持 和charAt()等效 |
<script>
// 根据位置返回字符
// 1.charAt(index)根据位置返回字符
var str = 'andy';
console.log(str.charAt(3));
// 遍历所有字符
for (var i = 0; i < str.length; i++) {
console.log(str.charAt(i));
}
</script>
// 2.charCodeAt(index) 返回相应索引号的字符ASCII值 目的:判断用户按下了哪个键
var str = 'andy';
console.log(str.charCodeAt(0)); //97
// 3.字符串名[index] h5新增的
var astr = 'andy';
console.log(astr[1]); //n
案例:返回字符位置
<script>
// 有一个对象 来判断是否有该属性 对象['属性名']
var o = {
age: 18
}
if (o['age']) {
console.log('里面有该属性');
} else {
console.log('没有该属性');
}
</script>
<script>
var str = 'avdsfoasdoedg';
var o = {};
for (var i = 0; i < str.length; i++) {
var chars = str.charAt(i);
if (o[chars]) { //o[chars]得到的是属性值
o[chars]++;
} else {
o[chars] = 1; // 相当于给o里的这个对象赋值1
}
}
console.log(o);
// 遍历对象 求最大值对应的字母
var max = 0;
var ch = '';
for (var k in o) {
// k得到的是属性名
// o[k]得到的是属性值
if (o[k] > max) {
max = o[k];
ch = k;
}
}
console.log(max);
console.log('最多的字符是:' + ch);//因为k是局部变量 出了for循环就不能使用
</script>
6.5 字符串操作方法(重点)
方法名 | 说明 |
---|---|
concat(str1,str2,str3,...) | concat()方法用于连接两个或多个字符串。拼接字符串,等效于+,+更常用 |
substr(start,length) | 从start位置开始(索引号),length取的个数 |
slice(start,end) | 从start位置开始,截取到end位置,end取不到(start end都是索引号) |
substring(start,end) | 从start位置开始,截取到end位置,end取不到,基本和slice相同,但是不接受负值 |
<script>
// 1.concat('字符串1','字符串2',...)
var str = 'andy';
console.log(str.concat('red')); //andyred
// 2.substr('截取的起始位置','截取几个字符');
var str1 = '改革春风吹满地';
console.log(str1.substr(2, 2)); //吹风
</script>
<script>
// 1.替换字符 replace('被替换的字符','替换为的字符'); 他只会替换第一个字符
var str = 'andyandy';
console.log(str.replace('a', 'b')); // bndyandy
// 'dasdadaadas'把所有a替换成o
var str1 = 'dasdadaadas';
while (str1.indexOf('a') !== -1) {
str1 = str1.replace('a', 'o');
}
console.log(str1); // dosdodoodos
// 2.字符转换为数组 split('分隔符') 前面学过join把数组转换为字符
var str2 = 'red,pink,blue';
console.log(str2.split(',')); // ['red', 'pink', 'blue']
</script>