一、内置对象概念
-
JavaScript中对象分为三种:自定义对象、内置对象、浏览器对象。
-
前面两种对象是JS基础内容,属于ECMASScript;第三个浏览器对象属于我们JS独有的。
-
内置对象:就是指js语言自带的一些对象,这些对象供开发者使用,并提供了一些常用的或者是最基本而必要的功能(属性和方法)。
-
JavaScript提供了很多个内置对象:Math,Date,Array,String等。
-
查文档 MDN (http://developer.mozilla.org/zh-CN/)
二、Math对象
Math对象不是一个构造函数,所以不需要new来调用,而是直接使用里面的属性和方法。
1.Math的最大值属性
console.log(Math.PI); // 一个属性 圆周率
console.log(Math.max(1,99,3)); //99
console.log(Math.max(-1,-10)); //-1
console.log(Math.max(1,99,'pink')); //NaN
console.log(Math.max()); //Infinity
1.封装自己的数学对象
var myMath = {
PI: 3.141592653,
max: function() {
var max = arguments[0];
for (var i = 1; i < arguments.length; i++)
if (max < argumengts[i]) {
max = arguments[i];
}
return max;
}
min: function() {
var min = arguments[0];
for (var i = 1; i < arguments.length; i++)
if (min > argumengts[i]) {
min = arguments[i];
}
return min;
}
}
console.log(myMath.PI);
console.log(myMath.max(15,5,9,62));
console.log(myMath.min(15,5,9,62));
2.Math的绝对值属性
console.log(Math.abs(1));// 1
console.log(Math.abs(-1));// 1
console.log(Math.abs('-1'));// 隐士转换 会把字符串型-1转换为数字型
console.log(Math.abs('pink'));//NaN
3.三个取整方法
//向下取整 往小取整
console.log(Math.floor(1.1));// 1
console.log(Math.floor(1.9));// 1
//向上取整 往大的取
console.log(Math.ceil(1.1));// 2
console.log(Math.ceil(1.5));// 2
//四舍五入往 .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(数值大的取)
4.随机数方法random()
-
返回一个随机小数【0,1)
-
不跟参数
console.log(Math.random());
案例1:想要得到两个数之间的随机整数,并且包含这2个整数
function getRandom(min,max) {
return Math.floor(Math.random() * (max - min + )) + min;
}
console.log(getRandom(1,10));
案例2:随机点名
var arr = ['张三','李四','南希','南佩','艾克','丽丽'];
console.log(arr[getRandom(0,arr.length-1)]);
案例3:猜数字游戏
function getRandom(min,max) {
return Math.floor(Math.random() * (max - min + )) + min;
}
var suijishu = getRandom(1,10);
while (true) {//死循环
var aa = prompt('你来猜?输入一个1~10的数字')
if (suijishu > aa ) {
console.log('宝贝,太小了');
} else if (suijishu < aa) {
console.log('宝贝,太大了');
} else {
console.log('宝贝,真棒');
break;
}
}
三、日期对象Date()
是一个构造函数,必须使用new来调用创建日期对象
1.使用Date (如果没有参数则返回系统当前时间)
var Date = new Date();
console.log(Date);//返回系统当前时间
2.参数常用写法
①数字型 2020,08,13 ②字符串型 ‘2020-08-13 10:43:59’
var shijian = new Date(2020-08-18 8:8:8);
console.log(shijian);
3.日期格式化
var date = new Date();
console.log(date.getFullYear());//返回当前日期的年
console.log(date.getMonth() + 1);//返回当前日期的月(小一个月)
console.log(date.getDate());//返回当前几号
console.log(date.getDay());//返回当前星期 周日是0
console.log(date.getHours());
console.log(date.getMinutes());
console.log(date.getSeconds());
// 写一个完整规范的日期
var date1 = new Date();
var year = date1.getFullYear();
var month = date1.getMonth() + 1;
var Date = date1.getDate();
var Day = date1.getDay();
var arr = ['星期一','星期二','星期三','星期四','星期五','星期六','星期日'];
console.log('今天是' + year + '年' + month + '月' + Date + '日' + arr[Day] );
//封装一个函数返回当前时间
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());
4.获取当前时间总的毫秒数(距离1970年1月1日)
注意:3里面的D要大写
案例:倒计时
四、数组对象
1.检测是否为数组
①instanceof 运算符
②Array.isArray(参数)
var arr[];
var obj {};
console.log(arr instanceof Array);
console.log(obj instanceof Array);
console.log(Array.isArray(arr));
console.log(Array.isArray(obj));
2.添加删除数组元素方法
1.添加
push() / unshift() 在我们数组的 末尾 / 开头 添加一个或者多个数组元素
push() / unshift() 完毕之后,返回的结果是 新数组的长度
var arr = [1, 2, 3];
arr.push(4,'pink');
console.log(arr.push(4,'pink'));
console.log(arr);
console.log(arr.unshift('red','purple'));
console.log(arr);
2.删除
pop() / shift()它可以删除数组的最后一个元素 没有参数
pop() / shift()完毕之后,返回的结果是删除的那个元素
var arr = [1, 2, 3];
console.log(arr.pop());
console.log(arr);
console.log(arr.shift());
console.log(arr);
3.筛选数组
4.数组排序
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);
5.获取数组的索引
案例:数组去重
①目标:把旧数组里面不重复的元素选取出来放到新数组中,重复的元素只保留一个,放到新数组中去重。
②核心算法:我们遍历旧数组,然后拿着旧数组元素去查询新数组, 如果该元素在新数组里面没有出现过,我们就添加,否则不添加。
旧数组[‘c’,‘a’, ‘z’,‘a’, ‘x’, ‘a’, ‘x’, ‘c’, ‘b’]
新数组[]
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','a','z','a','x','a','x','C','b'])
console.log(demo);
6.数组转换为字符串
7.扩展
方法名 | 说明 | 返回值 |
---|---|---|
concat() | 连接两个或多个数组不影响原数组 | 返回一个新的数组 |
slice() | 数组截取slice(begin, end) | 返回被截取项目的新数组 |
splice() | 数组删除splice(第几个开始,要删除个数) | 返回被删除项目的新数组注意,这个会影响原数组 |
slice()和splice0目的基本相同,重点看下splice()
五、字符串对象
1.基本包装类型
为了方便操作基本数据类型, JavaScript还提供了三个特殊的引用类型: String. Number和 Boolean。
基本包装类型:就是把简单数据类型包装成为复杂数据类型,这样基本数据类型就有了属性和方法。
2.字符串不可变
指的是里面的值不可变,虽然看上可以改变内容,但实是地址变了,内存中新开辟了一个内存空间。
var str = 'abc';
str = 'hello';
//当重新给str赋值的时候,常量'abc'不会被修改,依然在内存中
//重新给字符串赋值,会重新在内存中开辟空间,这个特点就是字符串的不可变
//由于字符串的不可变,在大量拼接字符串的时候会有效率问题
var str='';
for(var i = 0; i < 100000; i++){
str += i;
console.log(str); //这个结果需要花费大量时间来显示,因为需要不断的开辟新的空间
3.字符串位置
str.index0f( ‘要查找的字符’,起始的位置)
lastIndexOf() 同理
var str = '改革春风吹满地,春天来了';
console.log(str.index0f('春'));
console.log(str.indexOf('春',3)); //从索引号是3的位置开始往后查找
案例:返回字符串位置
查找字符串" abcoefoxyozopp"中所有o出现的位置以及次数
①核心算法:先查找第一个o出现的位置
②然后只要indexOf返回的结果不是-1就继续往后查找
③因为indexOf 只能查找到第一个,所以后面的查找,利用第二个参数,当前索引加1 , 从而继续查找
var str = "abcoefoxyozzopp";
var index = str.indexOf('o');
var num = 0;
while (index !== -1) {
console.log(index);
index = str.indexOf('o',index + 1);
num++;
}
console.log('o出现的次数是' + num);
4.根据位置返回字符(重点)
方法名 | 说明 | 使用 |
---|---|---|
charAt(index) | 返回指定位置的字符(index字符串的索引号) | str. .charAt(0) |
charCodeAt(index) | 获取指定位置处字符的ASCII码(index索引号) | str.charCodeAt(O) |
str[index] | 获取指定位置处字符 | HTML5, IE8+支持和charAt()等效 |
案例:判断一个字符串’abcoefoxyozzopp’中出现次数最多的字符,并统计其次数
①核心算法:利用charAt()遍历这个字符串
②把每个字符都存储给对象,如果对象没有该属性,就为1 ,如果存在了就+1
③遍历对象,得到最大值和该字符
//有一个对象来判断是否有该属性对象['属性名']
var0={
age: 18
}
if (o['sex']) {
console.log('里面有该属性');
} else {
console.log('没有该属性');
}
//案例
var str = 'abcoefoxyozzopp';
var = {};
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(varkino){
// k得到是属性名
// o[k]得到的是属性值
if (o[k] > max) {
max = o[k];
ch = k;
}
}
console.log(max);
console.log('最多的字符是' + ch);
5.字符串的操作方法(重点)
方法名 | 说明 |
---|---|
concat(str1,tr2,str3…) | concat()方法用于连接两个或多个字符串。拼接字符串,等效于+, +更常用 |
substr(start,length) | 截取字符串,从start位置开始(索引号),length 取的个数重点记住这个 |
slice(start, end) | 从start位置开始,截取到end位置,end取不到(他们俩都是索引号) |
substring(start, end) | 从start位置开始,截取到end位置,end取不到基本和slice 相同但是不接受负值 |
replace(str1,str2) | 替换字符,一次只替换一个字符 |
split(‘分隔符’) | 字符转换为数组 |
toUpperCase() | 转换大写 |
toLowerCase() | 转换小写 |