分为原始类型和引用类型, 原始类型分为数值型、字符串型、布尔型、未定义型、空
查看数据类型方法:typeof 变量名
分为整型和浮点型
整形:
十进制整数:1 2 3 4 5 6 7 8 9 10 ... 15 16 8进制整数,8进制是以0开头的数字,例如012: 1 2 3 4 5 6 7 10 11 12 16进制整数,16进制以0x开头的数字,例如0xf, a~f代表10~15,不区分大小写:1 2 3 4 5 6 7 8 9 a ... f 10
浮点型
指数型浮点型:3141.5e-1,==314.15, 31.415e+1,==314.15,3.1415e+2 ==314.15 正常的小数:314.15
被引号包含的数据就是字符串型,不区分单双引号
查看任意一个字符的Unicode码 '涛'.charCodeAt() ----查询unicode码的方法
只有两个值,分别是true和false,代表真和假
通常用于保存只要两个状态的数据,例如:是否登录、是否为会员...
只有一个值undefined,表示一个空值,例如声明了变量未赋值
只有一个值null,表示一个空值,类型是object(对象),常和引用类型的数据一起使用
typeof 数据 检测数据类型'number' / 'string' / 'boolean' / 'undefined' / 'object'
分为隐式转换和强制转换
①数值+字符串 数值转换为字符串
1+'2' // '12'
②数值+布尔型 布尔型转换为数值 true->1 false->0
3+true //4, 3+false //3
③字符串+布尔型 布尔型转换为字符串
'5'+true //'5true'
*加号(**+)的作用*执行数值之间的加法运算执行字符串之间的拼接
练习:查看以下程序的输出结果 var a=2, b=true, c='tedu'; console.log(a+b+c);// '3tedu' console.log(b+c+a);//'truetedu2' console.log(c+a+b);//'tedu2true'
除了加号两端有一个是字符串会隐式转换为字符串,其它的(+ - * /)都是隐式转换为数值; 所有隐式转换为数值会自动的调用函数Number。
将运算符俩端的数据转为数值型,如果转换失败,返回NaN(Not a Number),不是一个数字,任何和NaN执行加减乘除都会返回NaN。
①强制转换为数值
Number() Number('4') //4 Number(true) //1 Number(false) //0 Number('2a') //NaN Number(undefined) //NaN Number(null) //0
NaN : Not a Number,不是一个数字,在转换为数值的时候,没有成功的得到一个数值则返回NaN,NaN和任何值执行加减乘除,结果还是NaN
②强制转换为整型
parseInt() 通常用于将字符串或者小数转换为整型,其它的(布尔型、未定义型、空)或者转换的字符串开头是非数字,则返 回NaN parseInt(3.94) //3 parseInt('5.18') //5 parseInt('4.7a') //4 parseInt('b5.3') //NaN
③强制转换为浮点型
parseFloat() 通常用于将字符串转换为浮点型,和parseInt()用法一致 parseFloat('3.14a') //3.14 parseFloat('4b') //4 parseFloat('c5.2') //NaN
④将数值和布尔型转为字符串(了解)
toString() var num=2; var str=num.toString(); //'2'
表达式:由数据本身或者由运算符连接的操作数据组成的形式
运算符分为算术运算符、比较运算符、逻辑运算符、位运算符、赋值运算符、三目运算符
+ - * / %(取余) ++ (自增) --(自减)
% 取余 ++ 自增,一个变量在原来基础之上加1 如:var m2=m1--; -- 自减,一个变量在原来基础之上减1 a=b++ 先把b赋给a,然后b再执行自增 a=++b 先让b执行自增,然后再自增的结果赋给a
> < >= <= == != ===(全等于) !==(不全等于)
== 等于,只是比较值是否相同
=== 全等于,先比较类型,再比较值
3>'10' //false 字符串转为数值 '3'>'10' //true 比较的是首个字符的Unicode码 3>'10a' 3<'10a' 3=='10a' NaN和任何值比较(包含NaN本身) > < >= <= == === 结果都是false
&& 逻辑与(并且),关联的两个条件都是true结果是true,否则是false || 逻辑或(或者),关联的两个条件有一个是true结果是true,否则是false ! 逻辑非(取反)
*短路逻辑*
&& 当第一条件为false的时候,不再执行第二个条件 || 当第一个条件为true的时候,不再执行第二个条件 短路逻辑重点是看第二个条件(表达式)是否执行,无需关注整体结果是true还是false。
先把数据转为2进制然后进行运算,最后将结果转回成10进制 1 2 3 4 5 6 7 1 10 11 100 101 110 111 & 按位与,上下两位都是1结果是1,否则是0 | 按位或,上下两位含有1结果是1,否则是0 ^ 按位异或,上下两位不同为1,否则为0 >> 按位右移,删除末尾的位数 << 按位左移,在末尾补0 10>>2 5<<1 1010 101 101 1010 10 10100 3&5 5&7 7|10 9^13 011 101 0111 1001 101 111 1010 1101 ——— ——— ———— ——— 001 101 1111 0100 5 15 4
= += -= *= /= %= ...
运算赋值
一目运算符:由一个运算符连接的一个操作数据或者表达式 ++ -- !
二目运算符:由一个运算符连接的两个操作数据或者表达式
三目运算符:由两个运算符连接的三个操作数据或者表达式
条件表达式 ? 表达式1 : 表达式2
如果条件表达式为true,执行表达式1,否则条件表达式为false,执行表达式2
alert() 弹出警示框(消息框)
prompt() 弹出提示框(输入框),需要使用变量来保存输入的值,类型是字符串型,如果输入的内容为空得到的是空字符(''),如果点击取消返回null
练习:弹出两次提示框,分别输入数字,最后计算两个数字相加的和,将结果以警示框形式弹出。
程序 = 数据 + 算法
程序的执行方式:顺序执行、选择执行、循环执行
满30减20
if(条件表达式){ 语句块}
如果语句块中只有一行代码,则大括号可以省略
以下作为条件表达式隐式转换为false:0 NaN '' undefined null
if(条件表达式){ 语句块1}else{ 语句块2}
//判断一个人是否为成年人 var age=11; if(age>=18){ console.log('成年人'); }else{ console.log('未成年人'); }
if(条件表达式1){ 语句块1}else if(条件表达式n){ 语句块n}else{ 语句块n+1 //以上所有的条件都是false}
var n; if(n===1){ console.log('非洲'); }else if(n===2){ console.log('日本'); }else if(n===3){ console.log('印度'); }else{ console.log('八宝山'); }
switch(表达式){ case 值1: //如果表达式和case后的值相同,则执行对应语句块 语句块1 break; //跳出switch-case语句 case 值n: 语句块n break; default: 语句块n+1 //以上表达式和每个case后的值比较都是false}
switch-case是一种特殊的多项分支语句,只能进行全等于的比较
//练习:声明变量保存任意一个城市,打印出这个城市对应的特色美食 var city='成都'; switch(city){ case '北京': #相当于执行条件判断 执行 city===“北京”: console.log('烤鸭'); break; case '重庆': //console.log('火锅'); //break; case '成都': console.log('火锅'); break; case '乌鲁木齐': console.log('羊肉串'); break; default: console.log('面条'); }
*对比if**-**else嵌套和**s**witch-case*
相同点:都是多项分支语句
不同点:if-else嵌套可以进行各种情况的判断,switch-case只能使用全等于的比较;switch-case执行效率更高。if-else嵌套适用范围更广泛