1.数据类型
分为原始类型和引用类型
原始类型分为数值型、字符串型、布尔型、未定义型、空
1.1数值型Number
整型
10进制
1 2 3 .... 7 8 9 10 11 ... 15 16
8进制
1 2 3 ... 7 10 11 12
16进制
1 2 3 ... 7 8 9 a ... f 10
8进制以0开头的数字,例如012
16进制以0x开头的数字,af代表1015,不区分大小写
浮点型
3141.5E-1
314.15
31.415E+1
3.1415E+2
typeof 检测数据类型
var a; console.log(typeof 12); //number console.log(typeof true); //boolean console.log(typeof a); //undefined console.log(typeof 'abc'); //string console.log(typeof null); //object
isNan 检测变量是否为非数字的类型
console.log(isNaN(12)); //false console.log(isNaN('abc')); //true
1.2字符串型String
被引号包含的数据,不区分单双引号
查看任意一个字符的Unicode码
'a'.charCodeAt()
console.log('a'.charCodeAt()); //97
1.3布尔型Boolean
只有两个值,分别是true和false,代表真和假
通常用于保存只有两个状态的数据,例如是否登录、是否在线... 一些运算符的结果也是布尔型
1.4未定义型Undefined
只有一个值是undefined,代表一个空值,例如声明了变量未赋值为undefined
1.5空Null
只有一个值是null,类型是object,常结合对象一起使用
2.数据类型转换
分为隐式转换和强制转换
2.1隐式转换
在运算过程中自动产生的数据转换
2.1.1数字+字符串 数字转换为字符串
1 + '2'======>// '12'
2.1.2数字+布尔型 布尔型转换数值 true -> 1 false -> 0
2 + true======>//3
2 + false======>//2
2.1.3布尔型+字符串 布尔型转为字符串
true + '5'======>//'true5'
| 加号(+)的作用 |
|---|
| 执行数字之间的加法运算 |
| 执行字符串之间的拼接 |
var a = 3, b = true, c = 'tedu';
console.log(a+b+c); //'4tedu' ==>3+1+'tedu'
console.log(b+c+a); //'truetedu3' ==>'true'+'tedu'+3
console.log(c+a+b); //'tedu3true' ==>'tedu'+3+'true'
| NaN:Not a Number(不是一个数字) |
|---|
| 在将一个数据转换为数值型时候,没有成功得到一个数字就会返回NaN |
| NaN和任意数字执行运算,结果还是NaN |
所有的隐式转换为数字都是会自动调用函数Number完成的
2.2强制转换
2.2.1强制转换为数值型
Number()
Number('1') //1
Number(true) //1
Number(false) //0
Number(undefined) //NaN
Number(null) //0
Number('1a') //NaN
2.2.2强制转换为整型
parseInt()
强制将字符串和小数转为整型
parseInt('3.94') //3
parseInt('6.18a') //6
parseInt('a6.18') //NaN
parseInt(5.9) //5
undefined null true false都是返回NaN
2.2.3强制转换为浮点型
parseFloat()
强制将字符串转换为浮点型
parseFloat('3.14') //3.14
parseFloat('6.18a') //6.18
parseFloat('6a') //6
parseFloat('a6.18') //NaN
2.2.4数值和布尔型强制转字符串
toString()
var num = 5;
num.toString() //'5'
3.运算符
表达式:由数据本身或者由运算符连接的操作数据组成的形式称作表达式
运算符分为算术运算符、比较运算符、逻辑运算符、位运算符、赋值运算符、三目运算符
3.1算术运算符
+ - * / % ++ --
% 取余
++ 自增,在原来的基础之上加1
-- 自减,在原来的基础之上减1
3.2比较运算符
> < >= <= ==(等于) !=(不等于) ===(全等于) !==(不全等于)
等于:只是比较两者的值是否相同,可能会发生隐式转换
全等于:同时比较类型和值,都相同结果才是true,否则false
不等于:比较值是否不相同
不全等于:同时比较类型和值,有一个不等为true,否则false
3>'10' 数字和字符串比较,字符串转为数值
'3'>'10' 字符串比较,比较的是首个字符的Unicode码
'3' -> 51 '1' -> 49
3>'10a'======>//false
3<'10a'======>//false
3=='10a'======>//false
NaN和任何值比较(> < >= <= == ===)结果都是false
NaN == NaN //false
3.3逻辑运算符
&& || !
&& 逻辑与,关联的两个条件都为true,结果是true,否则false,如果第一个条件是false,就不再执行第二个条件
|| 逻辑或,关联的两个有一个为true,结果是true,否则false,如果第一个条件是true,就不再执行第二个条件
! 逻辑非,取反
关注点在于是否会执行第二个表达式。
短路逻辑
& 逻辑与,关联的两个条件都为true,结果是true,
| 逻辑或,关联的两个有一个为true,结果是true,
| & 两个条件都执行,不推荐使用
var a = 3;
a > 1 && console.log(a); //3 条件1 为true,所以要执行 条件2
a < 5 || console.log(a); // 条件1 为true,所以要不执行条件2
a > 1 & console.log(a); //3 两个条件都执行
a < 5 | console.log(a); //3 两个条件都执行
3.4位运算符
模拟计算机底层的运算,先把数据转为2进制,然后进行运算;当运算完以后再把结果转回成10进制。
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
|---|---|---|---|---|---|---|---|
| 1 | 10 | 11 | 100 | 101 | 110 | 111 | 1000 |
& 按位与,上下两位都是1结果是1,否则是0
| 按位或,上下两位含有1结果是1,否则是0
^ 按位异或,上下两位不同是1,相同是0
>> 按位右移,删除最后的位数,相当于在原来基础之上除以2再取整,例如7>>1 执行 parseInt(7/2)
<< 按位左移,在末尾补0,相当于在原来的基础之上乘以2,例如3<<1 执行3*2
| 3 & 7 | 7&11 | 12|8 | 6 ^ 15 |
|---|---|---|---|
| 011 | 0111 | 1100 | 0110 |
| 111 | 1011 | 1000 | 1111 |
| 011 | 0011 | 1100 | 1001 |
3.5赋值运算符
= += -= *= /= %= ...
运算赋值:先执行运算,再执行赋值
3.6三目运算符
一目运算符:由一个运算符连接的一个操作数据或者表达式 ! ++ --
二目运算符:由一个运算符连接的两个操作数据或者表达式
三目运算符:由两个运算符连接的三个操作数据或者表达式
条件表达式 ? 表达式1 : 表达式2
如果条件表达式为true,执行表达式1
如果条件表达式为false,执行表达式2
4.浏览器端函数
alert() 弹出警示框
prompt() 弹出提示框(输入框),需要使用变量保存用户输入的值,类型是字符串型,如果点击取消返回null
程序 = 数据 + 算法
程序的执行方式:顺序执行、选择执行、循环执行