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)      返回角的正切。
原文地址:https://www.cnblogs.com/st-st/p/9796132.html