js学习笔记(7)——js内置对象(Math、Date、Array、字符串)

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>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章