1.概述
1.1什么是JavaScript
JavaScript是一门世界上最流行的脚本语言
一个合格的后端人员,必须精通JavaScript
1.2历史
https://blog.csdn.net/kese7952/article/detalls/79357868
ECMAScript它可以理解为是JavaScript的一个标准
最新版本已经更新到es6版本 但是大部分浏览器还只停留在5版本
开发环境----线上环境版本不一致
2.入门
2.1引入JavaScript
1.内部标签
<script> </script>
2.外部引入
abs.js
<script src='abs.js'></script>
注意script标签必须成对出现<script></script>
2.2基本语法入门
JavaScript严格区分大小写
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script> // 定义变量:var 变量名 = 变量值; var score = 71; var name = "clm"; // 条件控制 if(score>60 && score<70){ alert("60-70") }else if(score>70 && score<80){ alert("70-80") }else{ alert("other") } </script> </head> <body> </body> </html>
console.log(sore) 在浏览器的控制台打印变量 相当于system.out.print();
2.3数据类型
数值、文本、图像、音频、视频。。。
变量
var 变量名 = 值;
Number:JS不区分小数,整数
123//整数 123.123//浮点数 1.123e3//科学计数法 -99//负数 NaN//not a number Infinity//表示无限大
字符串:
'abc';“abc”
布尔值:
true false
逻辑运算
&& 两个都为真 || 一个为真,结果为真 ! z
比较运算符
= == 等于(类型不一样,值一样,也会判断为true) === 绝对等于(类型一样,值一样,结果为true)
这是一个JS的缺陷,坚持不要使用==比较
须知:
1.NaN===NaN,这个与所有值都不相等,包括自己
2.只能通过isNaN(NaN)来判断这个数是否是NaN
浮点数问题
console.log((1/3===1-2/3))
尽量避免使用浮点数进行运算,存在精度问题!
uull和undefined
null空
undefined未定义
数组
Java中的数组必须是相同类型的对象,JS中不需要这样!
var arr = [1,2,3,4,'hello',null,true]
取数组下标如果越界了,就会undefined
对象
对象是大括号{},数组是中括号[],每个属性之间用逗号隔开,最后一个不用
var person = { name:"clm", age:3, tags:['js','1','web'] }
取对象的值person.name person.age
2.4严格检查模式
‘ user strict ’ ; ---------严格检测模式,前提支持es6语法,预防JS的随意性导致的一些问题
1.必须写在JavaScript的第一行
2.局部变量使用 let 去定义
<script> 'user strict'; let i = 1; </script>
3.数据类型
3.1字符串
1.正常字符就用单引号和双引号包裹
2.注意转义字符 \
\' \n \t \u4e2d \#### unicode字符 \x41 ascll字符
3.多行字符串编写 `(tab键上面)
var msg = `hello world 你好`
4.模板字符串
let name = 'clm'; let age = 3; let msg = `你好呀!${name}`
5.字符串长度
str.length
6.字符串的可变性,不可变
7.大小写转换
//注意这里是方法,不是属性了 student.toUpperCase() student.toLowerCase()
8.student.indexOf('t')
9.substring
[) student.substring(1)//从第一个字符串截取到最后一个字符串 student.substring(1,3)//[1,3)
3.2数组
Array可以包含任意的数据类型
var arr = [1,2,3,4,5]
1.长度
arr.length
注意:给arr.length赋值,数组大写会发生变化,如果赋值过小,元素就会丢失。
2.indexOf,通过元素获得小标索引
arr.indexOf(2) 1
arr.indexOf(2)和arr.indexOf(“2”)是不一样的
3.slice() 截取Array的一部分,返回一个数组,类似于String中的subString
4.push()和pop()
push:压入到尾部 pop:弹出尾部的一个元素
5.unshift() 和shift() 头部
unshift():压入到头部 shift():弹出头部的一个元素
6.排序sort()
["B","A","c"] arr.sort(); ["A","B","c"]
7.元素反转reverse()
["B","A","c"] arr.sort(); ["C","A","B"]
8.concat()拼接
["B","A","c"] arr.concat([1,2,3]); ["B","A","c",1,2,3] arr ["B","A","c"]
注意:concat()并没有修改数组,只是会返回一个新的数组
9.连接符join
打印拼接数组,使用特定的字符串连接
["B","A","c"] arr.join('-') "B-A-C"
10.多维数组
arr = [[1,2],[3,4],["5","6"]]; arr[1][1] 4
3.3流程控制
1、if判断
var age=3; if(age>3){ alert("haha") }else if(age<5){ alert("ccc") else{ alert("bbb"); } }
2、while循环,避免出现死循环
while(age<100){ age=age+1; console.log(age) } do{ age=age+1; console.log(age) }while(age<100)
3、for循环
for(let i = 0; i<100; i++){ console.log(i) }
4、forEach循环 ES5.1引入
var age =[1,2,3,4,5,6,7,8] //函数 age.forEach(function (value)){ console.log(value) }
3.4 Map和Set
Map
```javascript
//ES6 Map
var map = new Map([['tom',100],['jack',90],['clm',80]]);
var name = map.get('tom');//通过key获得value,值100
map.set('zm',70);//新增
map.delete('tom')//删除
```
Set:无序不重复集合
```javascript
set.add(2);//添加
set.delete(1);//删除
console.log(set.has(3));//是否包含某个元素
```
### 3.5 iterator
ES6 新引入
遍历数组:
```javascript
var arr = [3,4,5]
for(var x of arr){
console.log(x)
}
```
遍历Map:
```javascript
var map = new Map([['tom',100],['jack',90],['clm',80]]);
for(var x of map){
console.log(x)
}
```
遍历Set:
var set = new Set([3,45,5])
for(var x of set){
console.log(x)
}