复习
作用域:
全局作用域:
全局变量和全局函数
在函数外部声明的变量是全局变量,可以使用var也可以不使用var,但建议使用var
在内部申明的函数叫做全局函数
局部作用域:
局部变量和局部函数
在函数内部申明的变量是局部变量
函数递归:
在一些特殊的常量中,可以通过函数自己调用自己本身来减少循环量
注意事项:
1.必须要有终止递归的条件(必须是带参的函数)
递归的次数尽量控制在10之内
数组
数组的声明:
var obj= new Array();
var obj=[];
数组的声明并赋值:
var arr = new Array(‘hi’,‘hello’);
数组的API:
pop():删除数组最后一个元素
push(value):在数组结尾处添加元素
push():获取数组的长度
join(value):把数组的元素后面添加字符然后转换蹭字符串
shift():删除第一个元素,数组元素下标全部往前移动
unshift(value):添加新的元素,数组元素下标全部往后移动
delete:不是方法;语法:数组名称[下标]:删除对应数组的下标元素
splice():向数组中添加新的元素
concat():合并两个数组称为一个新的数组
数组排序
冒泡排序:每次拿相邻的来那个为数去比较,按要求大(小)的往后排
比较排序:每次循环拿第一个数和后面所有的元素去比较,外循环结束,第一个数确定是第一轮的最大数或者是最小数,第二轮外循环拿第二个数与后面的数依次进行比较
比较排序
拿第一个元素依次和后面的元素进行比较,比自身小的就交换元素,
比如:第一次循环(下标0的元素):拿下标为0的元素5跟下标为1的元素1比较,1比5小,两者换位置,1换到下标为0的位置,5到下标为1的位置;再拿1跟10比较,1比10小,不交换位置;再拿1跟18交换,1比18小,不交换位置,依次类推;1最小,就在下标为0的位置;
第二次循环(下标为1的元素):下标为1的元素5和下标为2的10比较,5比10小,不交换位置,再和下标为3的元素18比较,5比18小,不交换位置;再和下标为4的元素3比较,5比3大,交换位置,3换到下标为1的位置,5换到下标为4的位置;然后再拿3和下标为5的元素12进行比较……
以此类推的进行比较,找出最小数,往前放;从前往后的确定数值
比较排序:第一次循环是先拿下标为0的元素分别与后面的元素进行比较;此时循环结束,确定了一个数,减少一个需要确定的元素和一个下标。还剩n-1个元素比较
第二次循环是拿下标为1的元素分别与后面的元素进行比较;n-2;
第三次循环是拿下标为2的元素分别与后面的元素进行比较;n-3;
第四次循环是拿下标为3的元素与后面的元素进行比较;
/*
比较排序
*/
var arr = [5, 1, 10, 18, 3, 12, 9, 7, 20];
for(var i = 0;i<arr.length-1;i++) {
for(var j=i+1;j<arr.length;j++) {
/*
比较排序的代码:第二个循环里的表达式:arr[j]>arr[j+1];
外循环的第一次循环,拿下标为0的元素分别去与后面的元素进行比较,获得结果,交换位置,再继续用下标为0的元素依次与后面的元素进行比较
冒泡排序的代码:第二个循环里的表达式:arr[i]<arr[j];
外循环的第一次循环,先拿下标为0的与相邻的下标为1的元素进行比较,得结果后,再拿下标为1的元素与下标为2的元素进行比较,依次与后面相邻的元素进行比较
*/
if(arr[i]>arr[j]) {
var t = arr[i];
arr[i]=arr[j];
arr[j]= t;
}
}
}
console.log(arr);
var arr = [2, 3, 9, 4, 8, 6, 1, 5, 7];
for (var i = 0; i < arr.length - 1; i++) {
for (var j = i + 1; j < arr.length; j++) {
if (arr[i] > arr[j]) {
var t = arr[i];
arr[i] = arr[j];
arr[j] = t;
}
}
}
console.log(arr);
冒泡排序
// 冒泡排序
var arr = [10,11,5,1,9,20,3,8,6,15];
for(var i = 0;i<arr.length-1;i++) {
for(var j = 0;j<arr.length-i;j++) {
if(arr[j]<arr[j+1]) {
var temp = arr[j+1];
arr[j+1]=arr[j];
arr[j] = temp;
}
}
}
alert(arr);
js对象
stack:栈内存
普通内存:以键值对类型存储
heep:推内存
通过new创建的对象,对象名存在栈内存里面,内容是存在推内存里面。对象名存的是地址值,是指向在推内存内的内容。
new就是在内存开闭一个空间,给相应的对象;对象存的是地址值,
1.用户自己定义的对象
创建方式:
1.通过关键字new创建
var obj = new Object();
obj.name = ‘xxx’;
obj.age=18;
构造器是一个特殊的函数,必须和对象名称一致当我们创建对象时就会去调用构造器
1.1使用无参的构造器
var p= new Object();
p.name='aa';
p.age=20;
p.sex='女';
p.tel=1564894512;
1.2使用有参的构造器
// 自定义构造器
function Person(name,age,sex) {
this.name=name;
this.age=age;
this.sex=sex;
}
2.通过对象字面量创建
使用字面量来创建:{}表示一个对象,对象的属性采用的是属性名:属性值,属性和属性之间用逗号隔开,最后一个属性不需要。属性名称可以使用双引号,也可以不使用
// 方式一:对象字面量
var p ={
name:'aa',
age:20,
sex:'女',
tel:1564894512
}
/*
用户自定义对的相关介绍
*/
// 初始化对象
var obj = new Object();
obj.name="aaa";
console.log(obj);
console.log(obj.name);
var a = 10;
var b = a;
a=20;
console.log('a:'+a+'b:'+b);
var obja = new Object();
obja.age=20;
var objb = obja;
objb.age = obja.age;
obja.age=30;
console.log('obja:'+obja.age+'objb:'+objb.age);
/*
构造器是一个特殊的函数,必须和对象名称一致,当我们创建对象的时候就会去调用构造器
*/
// 自定义构造器
function Person(name,age,sex) {
this.name=name;
this.age=age;
this.sex=sex;
}
var p = new Person('aa','b',20);
alert('name:'+p.name+'age:'+p.age+'sex:'+p.sex);
// 使用字面量来创建:{}表示一个对象,对象的属性采用的是属性名:属性值,属性和属性之间用逗号隔开,最后一个属性不需要。属性名称可以使用双引号,也可以不使用
var l = {
name:'aaa',
age:20,
sex:'女'
}
console.log()
**练习:**分别用三种创建一个对象,给对象设置属性name,age,sex,tel的值,然后修改name和sex的值。然后输出在控制台
// 方式一:对象字面量
// var p ={
// name:'aa',
// age:20,
// sex:'女',
// tel:1564894512
// }
// 方式二:无参构造器
var p= new Object();
p.name='aa';
p.age=20;
p.sex='女';
p.tel=1564894512;
// 方式三:有参构造器
// function Person(name,age,sex,tel) {
// this.name=name;
// this.age=age;
// this.sex=sex;
// this.tel=tel;
// }
// var p =new Person('aa',20,'女',1564894512);
p.name ='bb';
p.sex='男';
console.log('name:'+p.name+'\nage:'+p.age+'\nsex:'+p.sex+'\ntel:'+p.tel);
2.js提供的学习对象
Math:数学类对象
属性
属性 | 描述 |
---|---|
E | 返回算术常量 e,即自然对数的底数(约等于2.718)。 |
LN2 | 返回 2 的自然对数(约等于0.693)。 |
LN10 | 返回 10 的自然对数(约等于2.302)。 |
LOG2E | 返回以 2 为底的 e 的对数(约等于 1.4426950408889634)。 |
LOG10E | 返回以 10 为底的 e 的对数(约等于0.434)。 |
PI | 返回圆周率(约等于3.14159)。 |
SQRT1_2 | 返回 2 的平方根的倒数(约等于 0.707)。 |
SQRT2 | 返回 2 的平方根(约等于 1.414)。 |
方法
方法 | 描述 |
---|---|
abs(x) | 返回 x 的绝对值。 |
acos(x) | 返回 x 的反余弦值。 |
asin(x) | 返回 x 的反正弦值。 |
atan(x) | 以介于 -PI/2 与 PI/2 弧度之间的数值来返回 x 的反正切值。 |
atan2(y,x) | 返回从 x 轴到点 (x,y) 的角度(介于 -PI/2 与 PI/2 弧度之间)。 |
ceil(x) | 对数进行上舍入。 |
cos(x) | 返回数的余弦。 |
exp(x) | 返回 Ex 的指数。 |
floor(x) | 对 x 进行下舍入。 |
log(x) | 返回数的自然对数(底为e)。 |
max(x,y,z,…,n) | 返回 x,y,z,…,n 中的最高值。 |
min(x,y,z,…,n) | 返回 x,y,z,…,n中的最低值。 |
pow(x,y) | 返回 x 的 y 次幂。 |
random() | 返回 0 ~ 1 之间的随机数。random()*10:1-10的随机数 |
round(x) | 四舍五入。 |
sin(x) | 返回数的正弦。 |
sqrt(x) | 返回数的平方根。 |
tan(x) | 返回角的正切。 |
练习:定义两个数组(全是数组)
1.求出两个数组的最大值,然后把这两个最大值一起通过Math类进行比较出最大值之间的最大值
2.请求两个数组的平均值,然后通过Math类对两个数组的平均值进行四舍五入,还有向上舍入和向下舍入。
3.通过Math类生成随机数添加到两个数组中
var arr1 = [13, 2, 16, 6, 18, 2, 5, 29];
var arr2 = [9, 14, 22, 19, 24, 2, 5, 27];
var max1 = arr1[0];
var max2 = arr2[0];
var sum1=0;
var sum2=0;
for (var i = 0; i < arr1.length; i++) {
var num = arr1[i];
if (max1 < arr1[i]) {
max1 = arr1[i];
}
sum1+=num;
}
for (var i = 0; i < arr2.length; i++) {
var num = arr2[i];
if (max2 < arr2[i]) {
max2 = arr2[i];
}
sum2+=num;
}
console.log('arr1的最大值:'+max1);
console.log('arr2的最大值:'+max2);
console.log('max1和max2之间的最大值:'+Math.max(max1,max2));
var avg1=sum1/arr1.length;
var avg2=sum2/arr2.length;
console.log('arr1的平均值'+avg1);
console.log(avg1+"的四舍五入为:"+Math.round(avg1));
console.log(avg1+"的上舍入为:"+Math.ceil(avg1));
console.log(avg1+"的下舍入为:"+Math.floor(avg1));
console.log('arr2的平均值'+avg2);
console.log(avg2+"的四舍五入为:"+Math.round(avg2));
console.log(avg2+"的上舍入为:"+Math.ceil(avg2));
console.log(avg2+"的下舍入为:"+Math.floor(avg2));
var number1=parseInt(Math.random()*10);
arr1.push(number1);
console.log('arr1添加的随机数为:'+number1);
var number2=parseInt(Math.random()*10);
arr2.push(number2);
console.log('arr2添加的随机数为:'+number2);
console.log(arr1);
console.log(arr2);
Date时间类
方法
方法 | 描述 |
---|---|
Date() | 返回当日的日期和时间。 |
getDate() | 从 Date 对象返回一个月中的某一天 (1 ~ 31)。 |
getDay() | 从 Date 对象返回一周中的某一天 (0 ~ 6)。 |
getMonth() | 从 Date 对象返回月份 (0 ~ 11)。 |
getFullYear() | 从 Date 对象以四位数字返回年份。 |
getYear() | 请使用 getFullYear() 方法代替。 |
getHours() | 返回 Date 对象的小时 (0 ~ 23)。 |
getMinutes() | 返回 Date 对象的分钟 (0 ~ 59)。 |
getSeconds() | 返回 Date 对象的秒数 (0 ~ 59)。 |
getMilliseconds() | 返回 Date 对象的毫秒(0 ~ 999)。 |
getTime() | 返回 1970 年 1 月 1 日至今的毫秒数。 |
getTimezoneOffset() | 返回本地时间与格林威治标准时间 (GMT) 的分钟差。 |
getUTCDate() | 根据世界时从 Date 对象返回月中的一天 (1 ~ 31)。 |
getUTCDay() | 根据世界时从 Date 对象返回周中的一天 (0 ~ 6)。 |
getUTCMonth() | 根据世界时从 Date 对象返回月份 (0 ~ 11)。 |
getUTCFullYear() | 根据世界时从 Date 对象返回四位数的年份。 |
getUTCHours() | 根据世界时返回 Date 对象的小时 (0 ~ 23)。 |
getUTCMinutes() | 根据世界时返回 Date 对象的分钟 (0 ~ 59)。 |
getUTCSeconds() | 根据世界时返回 Date 对象的秒钟 (0 ~ 59)。 |
getUTCMilliseconds() | 根据世界时返回 Date 对象的毫秒(0 ~ 999)。 |
parse() | 返回1970年1月1日午夜到指定日期(字符串)的毫秒数。 |
setDate() | 设置 Date 对象中月的某一天 (1 ~ 31)。 |
setMonth() | 设置 Date 对象中月份 (0 ~ 11)。 |
setFullYear() | 设置 Date 对象中的年份(四位数字)。 |
setYear() | 请使用 setFullYear() 方法代替。 |
setHours() | 设置 Date 对象中的小时 (0 ~ 23)。 |
setMinutes() | 设置 Date 对象中的分钟 (0 ~ 59)。 |
setSeconds() | 设置 Date 对象中的秒钟 (0 ~ 59)。 |
setMilliseconds() | 设置 Date 对象中的毫秒 (0 ~ 999)。 |
setTime() | 以毫秒设置 Date 对象。 |
setUTCDate() | 根据世界时设置 Date 对象中月份的一天 (1 ~ 31)。 |
setUTCMonth() | 根据世界时设置 Date 对象中的月份 (0 ~ 11)。 |
setUTCFullYear() | 根据世界时设置 Date 对象中的年份(四位数字)。 |
setUTCHours() | 根据世界时设置 Date 对象中的小时 (0 ~ 23)。 |
setUTCMinutes() | 根据世界时设置 Date 对象中的分钟 (0 ~ 59)。 |
setUTCSeconds() | 根据世界时设置 Date 对象中的秒钟 (0 ~ 59)。 |
setUTCMilliseconds() | 根据世界时设置 Date 对象中的毫秒 (0 ~ 999)。 |
toSource() | 返回该对象的源代码。 |
toString() | 把 Date 对象转换为字符串。 |
toTimeString() | 把 Date 对象的时间部分转换为字符串。 |
toDateString() | 把 Date 对象的日期部分转换为字符串。 |
toGMTString() | 请使用 toUTCString() 方法代替。 |
toUTCString() | 根据世界时,把 Date 对象转换为字符串。 |
toLocaleString() | 根据本地时间格式,把 Date 对象转换为字符串。 |
toLocaleTimeString() | 根据本地时间格式,把 Date 对象的时间部分转换为字符串。 |
toLocaleDateString() | 根据本地时间格式,把 Date 对象的日期部分转换为字符串。 |
UTC() | 根据世界时返回 1970 年 1 月 1 日 到指定日期的毫秒数。 |
valueOf() |
/*
通过时间类来判断某个代码块的效率问题
*/
var d = new Date();
var star_time = d.getMilliseconds();
console.log('开始时间:' + star_time);
var sum = 0;
for (var i = 0; i < 10000; i++) {
// console.log('i:'+i);
// console.log("操作执行");
sum += i;
}
var end_time = d.getMilliseconds();
console.log('结束时间:' + end_time);
console.log("代码块执行的毫秒数:" + (end_time - star_time));
// 初始化对象
var d = new Date ();
console.log(d); //调用默认构造器创建的对象输出的格式:Fri Mar 26 2021 16:12:15 GMT+0800 (中国标准时间)
var date1 = new Date('3/26/2021 16:10:26');
console.log(date1);
console.log('返回一个月中的某一天:'+d.getDate());
console.log('返回一周中的某一天:'+d.getDay());
console.log('返回一年中的某一个月:'+d.getMonth()); //0-11
console.log('返回年份:'+d.getFullYear());
console.log('返回小时:'+d.getHours());
console.log('返回分钟:'+d.getMinutes());
console.log('返回秒:'+d.getSeconds());
console.log('返回毫秒:'+d.getMilliseconds());
console.log('返回从1970年1月1日开始计算的毫秒数:'+d.getTime());
console.log(d.toDateString());
console.log("根据本地的时间格式把d:"+d.toLocaleDateString());
练习:创建一个时间类,获取当前时间的在一个月内的天数,在一周你弟的星期数,获取当前时间的年份,获取当前时间的毫秒数,然后获取当前时间按照中国的年份/月/日输出时分秒
var d = new Date();
console.log('在一个月中的天数:'+d.getDate());
console.log('在一个周中的星期数:'+d.getDay());
console.log('今年的年份:'+d.getFullYear());
console.log('当前时间的毫秒数:'+d.getSeconds());
console.log("中国的格式:"+d.toLocaleDateString()+"\t"+d.getHours()+":"+d.getMinutes()+":"+d.getSeconds());
String
属性
属性 | 描述 |
---|---|
constructor | 对创建该对象的函数的引用 |
length | 字符串的长度 |
prototype | 允许您向对象添加属性和方法 |
方法
方法 | 描述 |
---|---|
anchor() | 创建 HTML 锚。 |
big() | 用大号字体显示字符串。 |
blink() | 显示闪动字符串。 |
bold() | 使用粗体显示字符串。 |
charAt() | 返回在指定位置的字符。 |
charCodeAt() | 返回在指定的位置的字符的 Unicode 编码。 |
concat() | 连接字符串。 |
fixed() | 以打字机文本显示字符串。 |
fontcolor() | 使用指定的颜色来显示字符串。 |
fontsize() | 使用指定的尺寸来显示字符串。 |
fromCharCode() | 从字符编码创建一个字符串。 |
indexOf() | 检索字符串。 |
italics() | 使用斜体显示字符串。 |
lastIndexOf() | 从后向前搜索字符串。 |
link() | 将字符串显示为链接。 |
localeCompare() | 用本地特定的顺序来比较两个字符串。 |
match() | 找到一个或多个正则表达式的匹配。 |
replace() | 替换与正则表达式匹配的子串。 |
search() | 检索与正则表达式相匹配的值。 |
slice() | 提取字符串的片断,并在新的字符串中返回被提取的部分。 |
small() | 使用小字号来显示字符串。 |
split() | 把字符串分割为字符串数组。 |
strike() | 使用删除线来显示字符串。 |
sub() | 把字符串显示为下标。 |
substr() | 从起始索引号提取字符串中指定数目的字符。 |
substring() | 提取字符串中两个指定的索引号之间的字符。 |
sup() | 把字符串显示为上标。 |
toLocaleLowerCase() | 把字符串转换为小写。 |
toLocaleUpperCase() | 把字符串转换为大写。 |
toLowerCase() | 把字符串转换为小写。 |
toUpperCase() | 把字符串转换为大写。 |
toSource() | 代表对象的源代码。 |
toString() | 返回字符串。 |
valueOf() | 返回某个字符串对象的原始值。 |