JavaScript基础二
一、流程控制
1. if ... else
var age = 20;
if (age > 18) {
console.log('ok')
}else {
console.log('back')
}
2.if ... else if ... else
var age = 30;
if (age < 18){
console.log('未成年')
}else if (age > 60){
console.log('退休')
}else {
console.log('上班')
}
3.switch
一定要加break,否则继续往下执行
var day = 3;
switch (day) {
case 1:
console.log('星期一');
break;
case 2:
console.log('星期二');
break;
case 3:
console.log('星期三');
break;
default :
console.log('周末');
}
4.for循环
① for(var i=0;i<10;i++) {循环体}
for (var i=0;i<10;i++){
console.log(i)
}
② 死循环
for (;;){
console.log(1)
}
5.while循环
while (条件) {循环体中要修改条件}
var n = 10;
while (n >10) {
console.log(n);
n--
}
6.三元运算
多用于赋值,对变量值做操作
// 三元运算
var x = 100;
var y = 10;
var a = x > y ? x:y
二、函数
1.普通函数
function func(x,y) {
return x+y
}
特点:① 多传参数、少传参数和不传参数都不会报错,没有传值相当于传了undefined
② 少传参数会返回NaN
③ 返回值是多个时,不会报错,但默认返回最后一个
④ 需要返回多个值时,把返回值放在数组中
2.匿名函数:多用于和其他的函数/方法搭配使用,也用于回调函数中
function (x,y) {
return x+y
}
var foo = function (x,y) {
return x+y
};
var ret1 = foo(10,20);
console.log(ret1);
3.ES6新特性,箭头函数
箭头函数时匿名函数的简写
var f = x , y => x+y
等同于
var f = function(x,y) {
return x+y
}
3.立即执行函数:一页面使用两个JS文件,一个JS定义变量,另一个JS打印变量;解决方法:函数的局部变量在外部是不能使用的
JS中没有模块的概念,多通过立即中子星函数实行变量的私有
// 立即执行函数
(function(a,b){
console.log('自执行函数');
console.log(x+y);
})(111,222);
4.函数中的argu传入参数的个数
function add(a,b,c){
console.log(a+b+c);
console.log(arguments.length)
}
add(1,2,3,4,5,6)
6
6
5.函数的全局变量和局部变量
局部变量:
在JavaScript函数内部声明的变量(使用 var)是局部变量,所以只能在函数内部访问它(该变量的作用域是函数内部)。只要函数运行完毕,本地变量就会被删除。
全局变量:
在函数外声明的变量是全局变量,网页上的所有脚本和函数都能访问它。
变量生存周期:
JavaScript变量的生命期从它们被声明的时间开始。
局部变量会在函数运行以后被删除。
全局变量会在页面关闭后被删除。
6.作用域
首先在函数内部查找变量,找不到则到外层函数查找,逐步找到最外层。
7.词法分析
JavaScript中在调用函数的那一瞬间,会先进行词法分析。
词法分析的过程:
当函数调用的前一瞬间,会先形成一个激活对象:Avtive Object(AO),并会分析以下3个方面:
1:函数参数,如果有,则将此参数赋值给AO,且值为undefined。如果没有,则不做任何操作。
2:函数局部变量,如果AO上有同名的值,则不做任何操作。如果没有,则将此变量赋值给AO,并且值为undefined。
3:函数声明,如果AO上有,则会将AO上的对象覆盖。如果没有,则不做任何操作。
函数内部无论是使用参数还是使用局部变量都到AO上找。
三、内置对象和方法
JavaScript中一切皆对象
面向对象,ES5中没有类的概念。
创建对象用new关键字,实例化对象。
或者使用构造函数创建对象,首字母大写。
// 创建新的对象
var name = new String('xiaoming');
// JS面向对象(构造方法)
function Person(name) {
this.name = name
}
var p1 = new Person('xiaobai');
JavaScript中使用原型链的方法
// 给对象统一的方法
Person.prototype.dream = function () {
console.log(this.name + 'good')
};
p1.dream();
四、Date对象
创建对象可传入参数:日期字符串、毫秒数
// Date对象
var today = new Date();
//转化为字符串
today.toLocaleString();
Date对象的方法
var d = new Date();
//getDate() 获取日
//getDay () 获取星期
//getMonth () 获取月(0-11)
//getFullYear () 获取完整年份
//getHours () 获取小时
//getMinutes () 获取分钟
//getSeconds () 获取秒
//getMilliseconds () 获取毫秒
//getTime () 返回累计毫秒数(从1970/1/1午夜)
五、JSON对象
不用new,直接使用方法
JSON.parse() 字符串 --> JS的数据类型
JSON.stringify JS的数据类型 --> 字符串
var str1 = '{'name':'xiaoming'}';
var obj1 = {"name":"xiaoming"};
//JSON将字符串转化为对象
var obj = JSON.parse(str1);
//JSON将对象转化为字符串
var str = JSON.stringify(obj1);
六、RegExp对象
正则表达式对象,两种创建方式
① new RegExp(正则表达式)
// 检验手机号
var s1 = '13812341234';
// 创建正则表达式对象
var r1 = new RegExp('^1[3-9][0-9]{9}$');
// 验证判断,返回布尔值
r1.test(s1)
② 简写正则表达式
/正则表达式/
// 检验手机号
var s1 = '13812341234';
// 简写正则表达式
/^1[3-9][0-9]{9}$/.test(s1);
注意:
① test不传值,相当于传了undefined,内部当做'undefined'处理
② JS的正则表达式里不能写空格
③ 两个匹配模式
g:全局匹配,附带lastIndex属性,会记录下一次匹配的开始位置,一旦返回False则会将lastIndex清0
i:忽略大小写模式
七、Math对象
不用new,直接使用方法
相关方法:
abs(x) 返回数的绝对值。
exp(x) 返回 e 的指数。
floor(x) 对数进行下舍入。
log(x) 返回数的自然对数(底为e)。
max(x,y) 返回 x 和 y 中的最高值。
min(x,y) 返回 x 和 y 中的最低值。
pow(x,y) 返回 x 的 y 次幂。
random() 返回 0 ~ 1 之间的随机数。
round(x) 把数四舍五入为最接近的整数。
sin(x) 返回数的正弦。
sqrt(x) 返回数的平方根。
tan(x) 返回角的正切。