一.常量
和变量一样,都是用于存储数据的容器
声明
const a=1
相比变量:声明后必须赋值,不允许重新赋值;
用于存储不能变化的数据。
二.数据类型
分为原始类型和引用类型
原始类型分为数值型、字符串型、布尔型、未定义型、空
1.数值型
10进制
1 2 3 4 5 6 7 8 9 10 ... 15 16
8进制:以0开头的数字,例如012
1 2 3 ... 7 10 11 12
16进制:以0x开头的数字,不区分大小写,例如0xf
1 2 3 ... 8 9 a ... f 10
浮点型
3141.5e-1
314.15
31.415e1
3.1415e2
typeof 检测数据类型 |
2.字符串型
所有被引号包含的值都是字符串型,不区分单双引号
查看任意一个字符的编码
‘a’.charCodeAt()
3.布尔型
只有两个值,分别是true和false,代表真和假
用于保存只有两个状态的值,例如:是否登录、是否为会员...
4.未定义型
只有一个值undefined,表示一个空值,例如:声明了变量未赋值则为undefined
5.空
只有一个值null,类型是object,常和对象一起使用
三.数据类型转换
分为隐式转换和强制转换
1.隐式转换
自动发生的转换
(1)数值+字符串 数值转为字符串
2+‘3’ //’23’
(2)数值+布尔型 布尔型转为数值 true->1 false->0
2+true //3
2+false //2
(3)字符串+布尔型 布尔型转为字符串
‘3’+true //’3true’
加号(+)的作用
|
NaN: Not a Number,不是一个数字,只要出现这个值就是在将一个值转换为数值的时候,没有成功的得到数字返回的结果。NaN和任何数值执行数学运算结果还是NaN
所有隐式转换为数值都会自动调用函数Number()
2.强制转换
(1)强制转换为数值
Number()
Number('1') //1 Number('1a') //NaN Number(true) //1 Number(false) //0 Number(undefined) //NaN Number(null) //0 |
(2)强制转换为整型
parseInt()
用于将小数或者字符串转为整型,其它结果是NaN
parseInt(1.5) //1 parseInt('3.14') //3 parseInt('2a5') //2 parseInt('a25') //NaN |
(3)强制转为浮点型
parseFloat()
用于将字符串转为浮点型,其它的结果都是NaN
parseFloat('2a5') //2 parseFloat('3.14c') //3.14 parseFloat('c5') //NaN |
(4)强制转换为字符串
toString()
只能用于将数值和布尔型转为字符串
var n=2 var str=n.toString() //'2' |
四.运算符
表达式:由数据本身或者由运算符连接的操作数据组成的形式,最终都是会产生一个数据。
运算符分为算术运算符、比较运算符、逻辑运算符、位运算符、赋值运算符、三目运算符
1.算术运算符
+ - * / % ++ --
% 取余
++ 自增,在原来基础之上加1
-- 自减,在原来基础之上减1
var a1=5 //先把a1的值赋给a2,然后a1再执行自增 var a2=a1++ var a3=2 //先a3执行自增,把自增的结果赋给a4 var a4=++a3 |
2.比较运算符
> < >= <= ==(等于) !=(不等于) ===(全等于) !==(不全等于)
== 等于,只是比较两个值是否相同,可能会有隐式转换
=== 全等于,不仅比较值,还会比较类型
!= 不等于,比较值是否不同
!== 不全等于,比较值不同,或者类型不同
(1)数字和字符串比较,字符串会转为数值
(2)字符串之间比较,比较的是首个字符的编码
以下比较哪一个是true
3>’10a’ //false
3<’10a’ //false
3==’10a’ //false
NaN == NaN //false
NaN和任何值比较(> < >= <= == ===)结果都是false
3.逻辑运算符
&& 逻辑与,关联的两个条件都是true,结果是true
|| 逻辑或,关联的两个条件有一个是true,结果是true
! 逻辑非,取反