内置对象
JavaScript 中的对象分为3种:自定义对象,内置对象,浏览器对象.
内置对象:指js语言自带的一些对此昂,这些对象供开发者使用,并提供了一些常用的或是最基本而必要的功能(属性和方法)
查文档
MDN提供了有关开放网络技术的信息,包括HTML,CSS和万维网及HTML5应用的API
网址:https://developer.mozilla.org/zh-CN/
Math对象
math对象不是构造函数,它具有数学常数和函数的属性和方法,跟数学相关的运算(求绝对值,取整,最大值等)可以用math中的成员.
常用:
Math.PI | 圆周率 |
Math.floor() | 向下取整 |
Math.ceil() | 向上取整 |
Math.round() | 四舍五入版 就近取整 |
Math.abs() | 绝对值 |
Math.max()/Math.min | 求最大和求最小值 |
重要 随机数方法 random()
应用: 1.得到两个数中的随机整数.包括这两个数
function getRandom(min,max){
return Math.floor(Math.random()*(max - min +1))+min;
}
console.log(getRandom(1,3));
2.点名
var classname = ['杨仙子','杨傻子','杨花花','杨美人'];
function getRandom(min,max){
return Math.floor(Math.random()*(max-min+1))+min;
}
console.log(classname[getRandom(0,classname.length)]);
3.猜数字.猜1-10随机出现的数
function getRandom(min,max){
return Math.floor(Math.random()*(max-min+1)) + min;
}
var random = getRandom(1,10);
while(true){
var num = prompt('请输入你猜的数字');
if(num < random)
alert('你猜的数字小了');
else if(num > random)
alert('你猜的数字大了');
else{
alert('回答正确!');
break;
}
}
日期对象
Date对象和Math对象不一样,需要实例化后才能使用 ,即需要new
Date()方法的使用 :
1.获取当前时间必须实例化.
var now = new Date()
console.log(now);
2.Date()构造函数的参数
如果括号里有时间,就返回参数里面的时间,例如日期格式字符串为'2019-5-1',可以写成new Date('2019-5-1')或者new Date('2019/5/1'). 最好使用字符串格式
日期格式化
案例:输出要求:今天的日期
var date = new Date();
var year = date.getFullYear();
var month = date.getMonth() + 1;
var day = date.getDate();
var arr = ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'];
var week = date.getDay();
console.log('今天是'+ year + '年' + month + '月' + day + '日 ' + arr[week] );
输出现在的时间
var time= new Date();
function getTime(){
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());
3.获得Date总的毫秒数(时间戳) 是距离1970年1月1号过了多少毫秒数
方法一: var date = new Date; date.valueOf();
方法二:var date = +new Date();
方法三:Date.now();
因为不会有两个相同的时间戳,所以可用来代表独一无二的事情.
案例:制作倒计时.
分析 : 可以用 用户输入的时间的总的毫秒数 - 现在时间的毫秒数 = 剩余时间的毫秒数
将剩余时间的毫秒数转换为 天,时,分,秒.
转换公式: 天数 = parselnt(总秒数/60/60/24);
小时 = parselnt(总秒数/60/60%24);
分钟 = parselnt(总秒数/60%60);
秒数 = parselnt(总秒数/60);
function countDown(time){
inputTime = +new Date(time);
nowTime = +new Date();
times = (inputTime - nowTime ) / 1000;
day = parseInt(times/60/60/24);
day = day < 10 ? '0' + day :day ;
hour = parseInt(times/60/60%24);
hour = hour < 10 ? '0' + hour :hour ;
minute = parseInt(times/60%60);
minute = minute < 10 ? '0' + minute :minute;
second = parseInt(times%60);
second = second < 10 ? '0' + second :second ;
return ('还有' + day + '天' + hour + '小时' + minute + '分钟' + second + '秒');
}
time = prompt('请输入格式为:年/月/日 00:00 请输入时间');
alert(countDown(time));
数组对象
一 创造数组的两种方式:
1.利用数组自面量
2.利用 new Array()
二 检测是否为数组:
1.instanceof 运算符
var arr = [];
console.log (arr instanceof Array);
//如果是数组 则true 否则 false
2.Array.isArray(参数) H5以上才支持
var arr = [];
console.log (Array.isArray(arr) );
三 添加删除数组元素的方法
方法名 | 说明 | 返回值 |
push(参数1....) | 末尾添加一个或多个元素,注意修改原数组 | 并返回新的长度 |
pop() | 删除数组最后一个元素,把数组长度减1 无参数,修改原数组 | 返回它删除的元素的值 |
unshift(参数1) | 向数组的开头添加一个或更多元素,注意修改原数组 | 并返回新的长度 |
shift() | 删除数组的第一个元素,数组长度减1无参数,修改原数组 | 并返回第一个元素的值 |
案例:有一个包含工资的数组[1500,1200,2000,2100,1800],要求把数组中工资超过2000的删除,剩余的放到新的数组中.
var arr = [1500,1200,2000,2100,1800];
var crr = [];
for(var i = 0; i<arr.length ; i++){
if(arr[i] < 2000)
// crr[crr.length] = arr[i];
crr.push(arr[i]);
}
console.log(crr);
四 数组排序
方法名 | 说明 | 是否修改原数组 |
reverse() | 颠倒数组中的元素的顺序,无参数 | 该方法会改变原来的数组,返回新数组 |
sort() | 对数组的元素进行排序 | 该方法会改变原来的数组,返回新数组 |
注意:数组名.sort(); 只能在10以内升序排序.以下方法适用:
数组名.sort(function(a,b){
return a-b ;//升序
return b-a ;//降序
})
五 数组索引的方法
方法名 | 说明 | 返回值 |
indexOf() | 数组中查找给定元素的第一个索引 //从前往后查找 | 如果存在返回索引号,如果不存在,则返回-1 |
lastindexOf() | 在数组中的最后一个的索引 //从后往前查找 | 如果存在返回索引号,如果不存在,则返回-1 |
案例:有一个数组[' c ' , ' a ' , ' z ' , ' a ' , ' x ' , ' a ' , ' x ' , ' c ' , ' b '],要求去除数组中重复的元素
var arr = ['c' , 'a' , 'z' , 'a' , 'x' , 'a' , 'x' , 'c' , 'b'];
var newArr = [];
for (var i = 0 ;i < arr.length ;i++) {
if(newArr.indexOf(arr[i]) === -1)
newArr.push(arr[i]);
}
console.log(newArr);
六 数组转换为字符串
方法名 | 说明 | 返回值 |
toString() | 把数组换成字符串,逗号分隔每一项 | 返回一个字符串 |
join('分隔符') | 方法用于把数组中的所有元素转换为一个字符串 | 返回一个字符串 |
字符串对象
一 基本包装类型
基本包装类型:把简单数据类型包装成复杂数据类型这样基本数据类型就有了属性和方法.
特殊的引用类型:String ,Number,Boolean
二 字符串不可变
字符串不可变指的时里面的值不可变,看上去内容变了只是新开辟了一个空间,但地址没有变.
三 根据字符返回位置
字符串所有的方法,都不会修改字符串本身(字符串是不可变的),操作完全返回一个新的字符串.
方法名 | 说明 |
indexOf('要查找的字符',[开始的位置]) | 返回指定内容在原字符串中的位置,如果找不到就返回-1,开始的位置是index索引号 |
lastindexOf() | 从后往前找,只找第一个匹配的 |
案例:字符串"abcoefoxyozzopp"中所有哦出现的位置及次数.
var arr = 'abcoefoxyozzopp';
var temp = arr.indexOf('o') ;
var sum = 0;
for (var i = temp ; i < arr.length ;i++){
if(temp === -1){
break
}
console.log( temp);
temp = arr.indexOf('o',temp + 1);
sum++;
}
console.log(sum);
四 根据位置返回字符(重点)
方法名 | 说明 | 使用 |
charAt(index) | 返回指定位置的字符(index 字符串的索引号) | str.charAt(0) |
str.charCodeAt(index) | 获取指定位置处字符的ASCII码(index索引号) | str.charCodeAt(0) |
str[index] | 获取指定位置处字符 | HTML,IE8+支持和charAt()等效 |
案例:判断一个字符串'abcoefoxyozzopp'中出现次数最多的字符,并统计其次数.
var arr = 'abcoefoxyozzopp';
var o = {};
for (var i = 0;i<arr.length ; i++){
var chars = arr.charAt(i);
if(o[chars]){
o[chars]++;
}else{
o[chars] = 1;
}
}
console.log(o);
var max = 0 ;
var ch = '';
for ( var k in o){
if (o[k] > max){
max = o[k];
ch = k ;
}
}
console.log(max);
console.log('出现最多的字符' + ch);
五 字符串操作的方法(重点)
其他方法:
替换字符 replace('被替换的字符','替换为的字符') 只替换第一个出现的被替换的字符
字符转换为数组 split('分隔符');
简单数据类型 &&复杂数据类型
简单数据类型 又叫 基本数据类型或者值类型 ,复杂数据类型 又叫做引用类型
简单数据类型:
值类型 : 简单数据类型/基本数据类型 , 在存储时变量中存储的是值本身,因此叫做值类型
五大数据类型 都是简单数据类型 :string number , boolean ,undefined , null
注:如果有个变量以后会存储为对象,就先给他附null .
复杂数据类型:
引用类型:复杂数据类型,在存储时变量中存储的仅仅是地址(引用),因此叫做引用数据类型
通过new 关键字创建的对象(系统对象 ,自定义对象 ,如:Object ,Array , Date)
堆 和 栈
栈 : 由操作系统自动分配释放存放函数的参数值,局部变量的值等,其操作方式类似于数据结构中的栈;
简单数据类型存放在栈里面
堆 : 存储复杂类型(对象) ,一般由程序员分配释放,若程序员不释放,由垃圾回收机制回收.
复杂数据类型存放在堆里面