一、JS如何引入及基本语法规范

1.页面内的script代码书写格式

1
2
3
<script>
code.....
</script>

2.script标签写在页面的哪个位置?

2.1.页面head里和body后都可以写

2.2.一般我们建议写在body之后

3.是否可以引入第三方js文件?

1
<script type='text/javascript' src='/path/to/js文件'></script>

4.JS的注释方式

1
2
3
4
5
// 这个是单行注释

/**
这个是多行注释
**/

5.JS的结束符号,以分号为结束符号,如果没有的话,js引擎会自动加上


二、变量声明

命名规范

1.JS的变量名 可以使用 _,数字,字母,$ 组成,且不能以数字开头

2.声明变量使用 var 变量名 来进行声明

1
2
3
4
5
6
7
8
9
var a = 34;
var b = 45;
console.log(a+b);

var $ = 'jquery'
alert($);

c = 56;
alert(c);

注意:变量名区分大小写str和Str不是一个变量,也就是js对变量名的大小写是敏感的


三、JS变量类型

js的变量类型主要包括:

  • 数值
  • 字符串
  • 布尔
  • undefined
  • 数组
  • 对象

1) 数值类型
js不区分 整型和浮点型

1
2
3
var a = 23;
var b = 34;
console.log(a);

常用的方法

  • parseInt(..) 将某值转换成数字, 不成功则NAN
  • parseFloat(..) 将某值转换成浮点数,不成功则NAN
    1
    2
    parseInt('3.5')
    parseFloat('2.3dd')

2) 字符串类型

1
2
3
4
5
var a = 'hello'
var b = 'world'

var str = a + b;
console.log(str);

常用的方法:

  • obj.length               长度

  • obj.trim()               移除空白

  • obj.trimLeft()

  • obj.trimRight()

  • obj.charAt(n)             返回字符串中的第n个字符

  • obj.concat(value, …)         拼接

  • obj.indexOf(substring,start)    子序列位置

  • obj.substring(from, to)       根据索引获取子序列

  • obj.slice(start, end)        切片

  • obj.toLowerCase()          大写

  • obj.toUpperCase()          小写

  • obj.split(delimiter, limit)     分割

注意:拼接字符串的操作符:”+”

1
2
3
4
5
6
7
8
console.log(3 + 2 + "hello" + 5 + "world");
```

**3) 布尔类型**
**true和false要求是要小写的**
```javascript
var a = true;
var b = false;

4) 数组型
javascript中的数组类似于我们Python中的列表

1
2
var arr = ['alex','凤姐','苍老师'];
console.log(arr[2]);

常用的方法:

  • obj.length 数组的大小

  • obj.push(ele) 尾部追加元素

  • obj.pop() 尾部获取一个元素

  • obj.unshift(ele) 头部插入元素

  • obj.shift() 头部移除元素

  • obj.slice( ) 切片

  • obj.reverse( ) 反转

  • obj.join(sep) 将数组元素连接起来以构建一个字符串

  • obj.concat(val,..) 连接数组

  • obj.sort( ) 对数组元素进行排序

此时如果我们想要循环数组中的内容,我们可以这样:

1
2
3
4
5
var arr = ['alex','凤姐','苍老师'];

for(var i = 0; i < arr.length; i++){
console.log(arr[i]);
}

5) 对象型
javascript中的对象类似于我们Python中的字典,json数据格式

1
2
3
var info = {"name":'alex',"age":73}
console.log(info.name);
console.log(info['name']);

此时如果我们想要循环对象中的内容,我们可以这样:

1
2
3
4
var info = {"name":'alex',"age":73}
for(var i in info){
console.log(info[i]);
}

四、运算符介绍

1) 算数运算符

1
+   -    *    /     %       ++        --

2) 比较运算符

1
>   >=   <    <=    !=    ==    ===   !==

3) 逻辑运算符

1
&&   ||   !

4) 赋值运算符

1
=  +=   -=  *=   /=

五、流程控制

1)if–else语句

1
2
3
4
5
if (条件){
当条件为 true 时执行的代码
}else{
当条件不为 true 时执行的代码
}

2)if–else if–else语句

1
2
3
4
5
6
7
if (条件 1){
当条件 1true 时执行的代码
}else if (条件 2){
当条件 2true 时执行的代码
}else{
当条件 1 和 条件 2 都不为 true 时执行的代码
}

3)switch语句

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var day=new Date().getDay();
switch (day){
case 0:
x="Today it's Sunday";
break;
case 1:
x="Today it's Monday";
break;
case 2:
x="Today it's Tuesday";
break;
case 3:
x="Today it's Wednesday";
break;
default:
x="Looking forward to the Weekend";
}

4)while循环语句

1
2
3
4
while (i<5){
x=x + "The number is " + i + "<br>";
i++;
}

5) 三元运算符

1
2
3
4
5
var a = 3;
var b = 5;

c = a > b ? a : b
console.log(c);

六、函数

1.函数的定义
注意:javascript中的函数和python的中函数大同小异,唯一不同的是函数的定义方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
1.正常的定义方式  ----  普通青年
function test(a,b){
return a + b;
}

2.匿名函数的定义方式 ---- 2B青年
var sum = function(a, b){
return a + b;
}

3.立即调用函数方式 ----- 文艺青年
(function(a, b){
return a + b;
})();

2.函数的全局变量和局部变量

全局变量:定义在函数外部,推荐使用var进行显式声明
局部变量:定义在函数内部,必须使用var进行显式声明

1
2
3
4
5
6
7
8
9
10
11
// 全局变量(不推荐第二种方式)
var name = "zekai";
age = 73;

function test(){
// 局部变量
var height = 178;

// 默认全局变量
leg = 4;
}

3.函数作用域
首先在函数内部查找变量,找不到则到外层函数查找,逐步找到最外层
即window对象,并操作window对象上的属性

1
2
3
4
5
6
console.log(window.a, window.b);
function test(){
var a = "local";
b = "global";
}
console.log(window.a, window.b);

七、常见的模块和常用方法

1.日期类Date

var d = new Date();   返回当日的日期和时间

  • getYear()        从 Date 对象返回一个月中的某一天 (1 ~ 31)
  • getFullYear()     从 Date 对象以四位数字返回年份
  • getMonth()       从 Date 对象返回月份 (0 ~ 11)
  • getDate()        从 Date 对象返回一个月中的某一天 (1 ~ 31)
  • getDay()        从 Date 对象返回一周中的某一天 (0 ~ 6)
  • getHours()       返回 Date 对象的小时 (0 ~ 23)
  • getMinutes()     返回 Date 对象的分钟 (0 ~ 59)
  • getSeconds()     返回 Date 对象的秒数 (0 ~ 59)

案例 — 时钟显示:

1
2
3
4
5
6
7
8
当前时间:<input type='text' value='' id='time'/>

function change(){
var time = document.getElementById("time");
var d = new Date();
time.value = d;
}
setInterval(change, 1000);

2.Math数学对象

  • Math.ceil(数值)     向上取整
  • Math.floor(数值)    向下取整
  • Math.round(数值)    把数四舍五入为最接近的整数
  • Math.min(数值1,数值2)   返回最小值
  • Math.max(数值1,数值2)   返回最大值
  • Math.random()      获得0-1之间的随机数

3.常见的其他函数

在数据传输流程中,json是以文本,即字符串的形式传递的,而JS操作的是JSON对象,所以,JSON对象和JSON字符串之间的相互转换是关键,例如:

JSON字符串:

var str1 = ‘{ “name”: “alex”, “sex”: “feng” }’;

JSON对象:

var str2 = { “name”: “alex”, “sex”: “feng” };

JSON字符串转换成JSON对象:

var obj = JSON.parse(str); // 序列化

JSON对象转换成JSON字符串:

var str = JSON.stringify(obj); // 反序列化


八、this的指向问题

javascript中的this有点类似于Python中的self
即哪个对象调用当前的方法或属性,那此时this就是哪个对象,但在js中this的指向总共分为三种:

1.this指向window

1
2
3
4
5
6
7
8
9
10
11
console.log(this);
var a = 10;
var b = 20;
function f1(){
var a = 100;
var b = 200;
console.log(this);
console.log(this.a);
console.log(this.b);
}
f1();

2.this指向元素节点对象

1
2
3
4
var mydiv = document.getElementById('info');
mydiv.onclick = function(){
console.log(this.innerText);
};
### 3.this指向调用该方法的当前对象
1
2
3
4
5
6
7
8
9
var name = 'john';
function run(){
console.log(this.name + ' is running...');
}
run();

var jim = {'name':'jim', 'leg':4, 'age':28};
jim.walk = run;
jim.walk();

九、词法分析

js在调用函数的那一瞬间,会先进行词法分析

词法分析的过程:

当函数调用的前一瞬间,先形成一个激活对象,叫Avtive Object, AO,并会分析以下3个方面的东西:

1:函数参数,如有,则将此参数付给AO上,并且值为undefined。如没有,则不做任何操作
2:函数局部变量,如AO上有,则不做任何操作。如没有,则将此变量赋给AO,并且值为undefined
3:函数声明,如AO上有,则会将AO上的对象覆盖。如没有,则不做任何操作

函数内部无论是使用参数,还是使用局部变量,都到AO上找.

1
2
3
4
5
6
7
8
9
function t(age) {
console.log(age);
var age = 99;
console.log(age);
function age() {
}
console.log(age);
}
t();

分析过程:
1、分析参数,有一个参数,形成一个 AO.age=undefine;
2、分析变量声明,有一个 var age, 发现 AO 上面已经有一个 AO.age,因此不做任何处理
3、分析函数声明,有一个 function age(){} 声明, 则把原有的 age 覆盖成 AO.age=function(){};

最终,AO上的属性只有一个age,并且值为一个函数声明

执行过程
注意:执行过程中所有的值都是从AO对象上去寻找

1、执行第一个 console.log(age) 时,此时的 AO.age 是一个函数,所以第一个输出的一个函数
2、这句 var age=99; 是对 AO.age 的属性赋值, 此时AO.age=99 ,所以在第二个输出的是 99
3、同理第三个输出的是 99, 因为中间没有改变 age 值的语句了

练习:

1
2
3
4
5
6
7
var str = "global";
function t(){
console.log(str);
var str = "local";
console.log(str);
}
t();