1.内置对象
JavaScript中的对象分为3种:自定义对象、内置对象、浏览器对象,前两种对象是js基础内容,属于ECMAScript;第三种浏览器对象属于js独有。
内置对象:就是指js语言自带的一些对象,这些对象供开发者使用,并提供了一些常见的或是基本而必须要的功能(属性和方法)
内置对象最大的优点:帮助我们快速开发
JavaScript提供了多个内置对象:Math.Date.Array.String等。
2.Math概述
Math对象不是构造函数,它具有数学常数和函数的属性和方法,跟数学相关的运算(求绝对值,取整,最大值等)可以使用Math中的成员。
Math.PI 圆周率
Math.floor()向下取整
Math.ceil()向上取整
Math.round()四舍五入 就近取整
Math.abs()绝对值
Math.max()//Math.min()求最大值和最小值
<script>
//1.绝对值方法
console.log(Math.abs(1));
console.log(Math.abs('-1')); //隐式转换 会把字符串型-1转换成数字型
console.log(Math.abs('pink')); //NaN
//2.三个取整方法
//(1)Math.floor() 向下取整,往小了取
console.log(Math.floor(1.9));
//(2)Math.ceil() 向上取整
console.log(Math.ceil(1.1));
//(3)Math.round 四舍五入 其他数字都是四舍五入 但是.5 特殊 他往大了取
console.log(Math.round(1.1));
console.log(Math.round(1.9));
console.log(Math.round(-1.5)); //-1
</script>
3.Date概述
(1)Date对象和Math对象不一样,他是一个构造函数,我们需要实例化后才能使用;
(2)Date实例用来处理日期和时间;
(3)Date()方法的使用:1)获取时间必须实例化;2)Date构造函数的参数;3)日期格式化
<script>
//格式化日期 年月日
var date = new Date();
console.log(date.getFullYear()); //返回当前的年
console.log(date.getMonth() + 1); //月份 返回的月份小一个月 月份+1
console.log(date.getDate());
console.log(date.getDay()); //周一返回的1 周日返回 0
//我们写 xx年xx月xx日 星期x
var year = date.getFullYear();
var month = date.getMonth() + 1;
var dates = date.getDate();
var arr = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六']
var day = date.getDay();
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
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());
</script>
(4)获得Date总的毫秒数(时间戳)
<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>
倒计时效果:
function conutDown(time) {
var nowTime = +new Date(); //返回的是当前时间总的毫秒数
var inputTime = +new Date(time); //返回的是用户输入时间总的毫秒数
var times = (inputTime - nowTime) / 1000; //time是剩余时间总的毫秒数
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(conutDown('2020-3-18 15:00:00'));
var date = new Date();
console.log(date);
</script>
4.数组概述
检测是否为数组的两种方法:(1) instanceof 运算符 它可以用来检测是否为数组
(2)Array.isArray(参数) H5新增方法 ie9以上版本支持
<script>
//创建数组的两种方式
//1.利用数组字面量
var arr = [1, 2, 3];
console.log(arr[0]);
//2.利用 new Array()
// var arr1 = new Array(); //创建了一个空的数组
// var arr1 = new Array(2); //这个2表示数组长度为2 里面有2个空的数组元素
var arr1 = new Array(2, 3);
console.log(arr1);
</script>
<script>
function reverse(arr){
if (arr instanceof Array){
var newArr = [];
for(var i = arr.length; i >= 0; i--){
newArr[newArr.length] = arr[i];
}
return newArr;
}else{
return '这个参数要求必须是数组形式';
}
}
var arr1 = reverse(1, 3, 4, 5, 9);
console.log(arr1);
var arr2 = reverse(['pingk', 'blue', 'green']);
console.log(arr2);
//检测是否为数组
//(1) instanceof 运算符 它可以用来检测是否为数组
var arr = [];
var obj = {};
console.log(arr instanceof Array);
console.log(obj instanceof Array);
//(2)Array.isArray(参数) H5新增方法 ie9以上版本支持
console.log(Array.isArray(arr));
console.log(Array.isArray(obj));
</script>
(1)添加删除数组的方法
<script>
//添加删除数组方法
//1.push() 在我们数组末尾 添加一个或者多个数组元素
var arr = [1, 2, 3];
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>
(2)数组的翻转排序
<script>
//数组排序
//1.数组翻转
var arr = ['pink', 'red', 'blue'];
arr.reverse();
console.log(arr);
//2.数组排序
var arr1 = [13, 4, 77, 1, 7];
arr1.sort(function(a, b){
// return a - b; //按照升序排列
return b - a;
});
console.log(arr1);
</script>
(3)数组的索引
<script>
//返回数组元素索引号方法 indexOf(数组元素)返回该数组元素的索引号
//它只返回第一个满足条件的索引号
//它如果在数组中找不到元素 则返回 -1
var arr = ['red', 'green', 'pink'];
console.log(arr.indexOf('blue'));
var arr = ['red', 'green', 'pink', 'blue'];
console.log(arr.lastIndexOf('blue')); //从后面进行查找 3
</script>
利用索引实现数组去重:
<script>
//封装一个去重的数组 unique
function unique(arr){
var newArry = [];
for(var i = 0; i < arr.length; i++){
if(newArry.indexOf(arr[i]) === -1){
newArry.push(arr[i]);
}
}
return newArry;
}
// var demo = unique(['c', 'a', 'z', 'a', 'x', 'c', 'b']);
var demo = unique(['red', 'blue', 'red']);
console.log(demo)
</script>
(4)数组转换成字符串
<script>
//数组转换成字符串
//1.toString() 将给我们的数组转换成字符串
var arr = [1, 2, 3];
console.log(arr.toString()); //1,2,3
//2.join (分隔符)
var arr1 = ['green', 'blue', 'pink'];
console.log(arr1.join());
console.log(arr1.join('-'));//green-blue-pink
</script>
5.字符串对象
(1)基本包装类型
为了方便操作基本数据类型,JavaScript还提供了三个特殊的引用类型:String、Number和Boolean。基本包装类型就是把简单数据类型包装成为复杂数据类型,这样基本数据类型就有了属性和方法。
(2)字符串的不可变
指的是里面的值不可变,虽然看上去可以改变内容,但其实地址变了,内存中新开辟了一个内存空间。
<script>
//字符串的不可变性
var str = 'andy';
console.log(str);
str = 'red';
console.log(str);
//因为我们字符串不可变所以不要大量拼接字符串
var str = '';
for(var i = 1; i < 100; i++){
str += i;
}
console.log(str);
</script>
(3)根据字符返回位置
字符串所有方法,都不会修改字符串本身(字符串是不可变的),操作完成会返回一个新的字符串
<script>
//字符串对象 根据字符返回位置 str.indexOf('要查找的字符',[起始位置])
var str = '改革春风吹满地,春天来了';
console.log(str.indexOf('春'));
console.log(str.indexOf('春', 3));//从索引号是3的位置开始查找
</script>
<script>
//查找字符串"abcoefoxyozzopp"中所有o出现的位置以及次数
//核心算法:先查找第一个o出现的位置
//然后只要indexOf返回结果不是-1 就继续往后找
//因为indexOf只能查找第一个,所以后面的查找,一定是当前索引加一,从而继续查找
var str = "oabcoefoxyozzopp";
var index = str.indexOf('o');
var num = 0;
// console.log(index);
while(index !== -1){
console.log(index);
num++;
index = str.indexOf('o', index + 1);
}
console.log('o出现的次数是:' + num);
</script>
(4)根据位置返回字符
1)charAt:返回指定位置的字符(index字符串的索引号)str.charAt(0)
2)charCodeAt(index):获取指定位置字符的ASCll码(index索引号)str.charCodeAt(0)
3)str[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));
}
//2.charCodeAt(index)返回相应索引号的字符ASCll值, 目的:判断用户按下了哪个键
console.log(str.charCodeAt(0));
//3.str[index] H5新增
console.log(str[1]);
</script>
<script>
//有一个对象 来判断是否有该属性 对象['属性名']
var o = {
age:18
}
if(o['age']){
console.log('里面有该属性');
} else {
console.log('里面没有该属性');
}
//判断一个字符'abcofoxyozzopp'中出现次数最多的字符,并统计出现次数
//核心算法:利用charAt()遍历这个字符串
//把每个字符串都存储给对象,如果对象没有该属性,就为1,如果存在了就+1
//遍历对象,得到最大值和该字符
var str = 'abcofoxyozzopp';
var o = {};
for(var i = 0; i < str.length; i++){
var chars = str.charAt(i); //chars字符串的每一个字符
if(o[chars]){ // o[chars]得到的是属性
o[chars] ++;
} else {
o[chars] = 1;
}
}
console.log(o);
//2.遍历对象
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);
</script>
(5)字符串的操作方法
concat(str1, str2, str3……) concat()方法用于连接两个或多个字符串,拼接字符串,等效于+,+更常用
substr(start, length) 从start位置开始(索引号),length取的个数,重点记住这个
slice(start, end) 从start位置开始,截取到end位置,end取不到(他们俩都是索引号)
substring(start, end) 从start位置开始,截取到end位置,end取不到 基本和slice相同 但不接受负值
<script>
//字符串操作方法
//1.concat('字符串1','字符s串2' ....)
var str = 'andy';
console.log(str.concat('red'));
//2.substr('截取起始位置', '截取几个字符');
var str1 = '改革春风吹满地';
console.log(str1.substr(2, 2)); //第一个2 是索引号的2 从第几个开始
//第二个2 是取几个字符
</script>
<script>
//1.替换字符replace('被替换字符','替换为的字符') 它只会替换第一个字符
var str = 'andyandy';
console.log(str.replace('a','b'));
//有一个字符'abcoefoxyozzopp'要求把里面所有的o替换为*
var str1 = 'abcoefoxyozzopp';
while(str1.indexOf('o') !== -1){
str1 = str1.replace('o', '*');
}
console.log(str1);
//2.字符串转换为数组 split('分隔符') 前面我们学过join 把数组传换成字符串
var str2 = 'red, pink, blue';
console.log(str2.split(','));
var str3 = 'red&pink&blue';
console.log(str3.split('&'));
</script>