1.概述
(1)历史
1995年,JS最早出现在Netscape的浏览器中
1996年,IE3中也可以出现JS,称作JScript
1997年,制定了JS标准规范,ECMAScript
2009年,JS开始向服务器端发展,出现Node.js
(2)现状
既可以运行在客户端浏览器,也可以运行在服务器端
(3)特点
解释型语言,编译一行执行一行
弱类型语言
基于对象
跨平台
(4)应用场景
开发前端的交互效果,服务器端开发,例如:访问数据库、其它服务器调用...
2.搭建开发环境
(1)浏览器端
浏览器中有自带的JS解释器
谷歌/edge/Safari/火狐/欧朋 内核
UC/QQ/360/百度/小米/搜狗
(2)服务器端
Node.js
官网:www.nodejs.org
在命令行下 node -v 查看当前版本号
(3)运行JS
浏览器下运行
新建01.js和01.html两个文件,把js嵌入到html中,用浏览器运行html即可
<script src='01.js'></script>
Node.js下运行
命令行下
node 拖拽js文件 回车
3.JS语法规范
区分大小写
每行结束的分号可以省略
分为单行注释(//..)和多行注释(/*...*/)
4.变量
用于存储数据的容器
(1)声明变量
var a=1; //每次声明一个
var b=2, c=3; //一次声明多个变量
在内存中开启一块空间,把空间命名为a,然后把值保存到这个内存空间。
练习:声明多个变量分别保存一个员工的编号,姓名,性别,生日,工资;并打印结果
(2)命名规则
变量的名称可以由字母、数字、下划线、美元符号($)组成,不能以数字作为开头,不能使用关键字
语义
title
biaoTi
username user_name (下划线命名) userName(驼峰命名)
(3)变量的赋值
声明变量未赋值,则为undefined(未定义,代表空值),变量可以多次赋值,并且赋不同类型的值,这 是弱类型语言的特点。
5.常量
常量也是用来存储数据,声明的时候必须赋值,不允许重新赋值
声明常量
const a=1;
6.数据类型
分为原始类型和引用类型
原始类型分为数值型、字符串型、布尔型、未定义型、空
(1)数值型
整型
1 2 3 4 5 6 7 8 9 10 .... 15 16
8进制
1 2 3 ... 7 10 11 12
16进制:a~f代表10~15
1 ... 9 a .... f 10
8进制以0开头的数字,例如: 010
16进制以0x开头的数字,例如:0xf,不区分大小写
浮点型
3141.5e-1
314.15
31.415e+1
3.1415e+2
(2)字符串型
被引号包含的数据就是字符串型,不区分单双引号
查看任意一个字符的Unicode码
't'. charCodeAt()
(3)布尔型
只有两个值,分别是true和false,代表真和假
用于保存只有两个值的数据,一些运算符的结果也是布尔型
(4)未定义型
只有一个值undefined
声明了变量未赋值则为undefined,代表空值
(5)空
只有一个值null,和引用类型的数据一起使用
typeof用于检测数据类型
'number'/'string'/'boolean'/'undefined'/'object'
7.数据类型的转换
分为隐式转换和强制转换
(1)隐式转换
运算过程中自动产生的转换
①数字+字符串 数字转换为字符串
2 + '3' // '23'
②数字+布尔值 布尔值转为数字 true -> 1 false -> 0
2+true //3
2+false //2
③字符串+布尔值 布尔型转为字符串
'2'+true //'2true'
加号(+)的作用
数字之间的加法运算
字符串之间的拼接
NaN:Not a Number,不是一个数字,这个值是转数值失败的结 果,NaN和任何数值执行加减乘除结果还是NaN
隐式转换为数值自动的调用函数Number
(2)强制转换
①强制转换为数值
Number()
Number('2') //2
Number('2a') //NaN
Number(true) //1
Number(false) //0
Number(undefined) //NaN
Number(null) //0
②强制转换为整型
parseInt()
用于将字符串和小数强制转换为整型,其它的类型结果为NaN
parseInt(3.94) //3
parseInt('2.58') //2
parseInt('6.18a') //6
parseInt('a6.18') //NaN
将字符串转为整型的时候,如果开头是非数字返回NaN,否则返回 开头的整数部分
③强制转换为浮点型
parseFloat()
用于将字符串转为浮点型
parseFloat('3a') //3
parseFloat('3.14a') //3.14
parseFloat('a3.14') //NaN
④将数值和布尔值强制转换为字符串(了解)
toString()
var num=2;
num.toString() //'2'
7.运算符
表达式:由数据或者由运算符连接的数据组成的格式称作表达式
运算符分为算术运算符、比较运算符、逻辑运算符、位运算符、赋 值运算符、三目运算符
(1)算术运算符
+ - * / % ++ --
% 取余
++ 自增,让一个变量在原来基础之上加1
-- 自减,让一个变量在原来基础之上减1
var b1=3;
var b2=b1++;//先把b1的值赋给b2,然后b1再执行自增
var b3=3;
var b4=++b3; //先让b3执行自增,然后再把结果赋值给b4
(2)比较运算符
> < >= <= ==(等于) != ===(全等于) !==(不全等于)
等于(==): 比较值是否相同,可能会产生隐式转换
全等于(===):先比较类型,再比较值,只有两个都相同才是true
3>'10' //false 字符串和数字比较,字符串转为数字
'3'>'10' // true 字符串之间比较,比较的是首个字符的Unicode码
'3'->51 '1'->48
3>'10a' //false
3<'10a' //false
3=='10a' //false
NaN == NaN //false
NaN和任何值比较(> < >= <= == ===)结果都是false
(3)逻辑运算符
&& 逻辑与,关联的两个条件都是true,结果是true,否则是false
|| 逻辑或,关联的两个条件有一个是true,结果是true,否则false
! 逻辑非,取反
短路逻辑
&&:当第一个条件为false,就不再执行第二个条件
||:当第一个条件为true,就不再执行第二个条件
短路逻辑主要是看第二个条件是否会执行,无需关注整体结果是 true还是false