day05内容
学习目标
1.其他数据类型到number类型的转换parseInt
2.其他数据类型到number类型的转换parseFloat
3.在不同类型的值中的算术运算符+
4.流程控制语句 if
1.parseInt()
- 如果转换的值是null,undefined,boolean,number
parseInt(true); //NaN
parseInt(false); //NaN
parseInt(null); //NaN
parseInt(undefined);//NaN
parseInt(10); //10 如果是整数值,原样输出
parseInt(10.3); //10 如果是小数,舍去小数点一级后面的内容 - 如果是字符串:
parseInt(“123”); //123;如果仅包含数值,转换为对应的数值
parseInt(“234.1”);//234;小数点后面的数值省略
parseInt("+12.1");//12; 首位为符号位,其余为为数值,转换为整数
parseInt(“0xa”); //10; 如果仅包含十六进制格式,转为为对应的十进制的值
parseInt(“010”); //10; 【注意!】不会当做八进制被解析,结果为10
parseInt(""); //NaN;空字符串被转换为NaN
parseInt(“1+2.3”);//1; 如果首位为数值,依次向后解析,找到连续的数值,直到遇到第一个非数值的,将之前获取的数值转换为Number返回
parseInt(“123ac”);//123;
2.parseFloat()
与parseInt() 类似,但是也有不同:
1.字符串中的第一个小数点是有效的,而第二个小数点则无效其后的内容会被省略
2.始终忽略前导0
parseFloat(“22.3.4”) //22.3
parseFloat(“022.34”); //22.34
- m + n
- 当m,n不为String,Object类型的时候,先将m,n转换为Number类型,然后再进行计算
true + false; //1;Number(true)+Number(false);
true + 1; //2;Number(true) + 1
null + undefined; //NaN;Number(undefined) -> NaN - 当m,n有一个为String,无论另一个操作数为何(但不为对象)都要转换为String,然后再进行拼接
“1” + true; // 1true
“1” + undefined;// 1undefined
“1” + 1; // 11 - 当m,n 有一个为对象,如果该对象既没有重写toString,又没有重写valueOf方法,使用toString()方法的返回值。如果该对象既重写toString,又重写了valueOf方法,调用valueOf方法获取返回值,将该返回值和另外一个操作数进行运算。如果该对象没有重写valueOf方法,将调用toString方法获取返回值,将该返回值和另外一个操作数进行运算。如果该对象没有重写toString方法,将调用valueOf方法获取返回值。
var o = {
name:“briup”,
valueOf:function(){
return “1”;
}
}
o+1; //2;o+1
3.流程控制语句
-
if语句
if(condition){
statement1
}else{
statement2
}
condition表示任意表达式,该表达式求值的结果不一定是布尔类型,如果不是布尔类型,ECMAScript会调用Boolean() 转换函数将这个表达式结果转换为一个布尔类型,如果condition求值结果为true,执行statement1。如果求值结果为false,执行statement2if(condition){
statement1
}
statement2
note
复习
操作符
逻辑运算符
&& 逻辑与 短路运算符,有假则假,同真则真
如果第一个操作数是假性值(’’,0,NaN,null,undefined,false),直接返回第一个操作数,否则返回第二个操作数。
|| 逻辑或 短路运算符,有真则真,同假则假
如果第一个操作数是真,直接返回第一个操作数,否则返回第二个操作数。
! 逻辑非 取反操作
!true false
!‘hello’ false
!!‘hello’ true
三目运算符
表达式?值1:值2
如果表达式为真,使用值1,如果表达式为假,使用值2。
分支语句
数据类型转换
其他数据类型到string类型
1.拼接空字符串 +’’
2.toString()函数
null和undefined是不能使用toString()函数
进制转换
var num = 10;
num.toString(2);
3.String()包装器
其他数据类型到boolean类型
1.双感叹号 !!
2.Boolean()包装器
两种转换结果是趋于一致的。
可以将’’,0,NaN,null,undefined装换成false,其他的是true
其他数据类型到number类型
1.一元+(一元-)
2.Number()包装器
一元+和Number()包装器的转换结果是一致的。
string–>number
+‘123’ 123
+‘hello’ NaN
+’+123’ 123
+’-123’ -123
+‘123.3’ 123.3
+‘123.3.4’ NaN
+‘123abc’ NaN
+’ 123 ’ 123
+‘010’ 10 不当做8进制解析
+‘0x10’ 16 可以解析16进制
+‘1+2.4’ NaN 注意
+’’ 0
+’ ’ 0
boolean–>number
+true 1
+false 0
null–>number
+null 0
undefined–>number
+undefined NaN
3.parseInt() 解析整数
null,undefined,boolean类型都是NaN
只认数值
//转换null,undefined,boolean类型为NaN
//转换数值
console.log(parseInt(null)); //NaN
console.log(parseInt(undefined)); //NaN
console.log(parseInt(true)); //NaN
console.log(parseInt(false)); //NaN
//将number–>number
console.log(parseInt(10)); //10
//使用parseInt()取整
console.log(parseInt(11.11)); //11
//将string–>number
console.log(parseInt(‘123’)); //123
console.log(parseInt(‘123.2’)); //123
console.log(parseInt(’+123.2’)); //123
console.log(parseInt(’-123.3’)); //-123
console.log(parseInt(‘1+2’)); //1 注意
console.log(parseInt(‘123abc’)); //123,如果以数值开始的,解析到非数值的地方停止,将之前的返回 注意
console.log(parseInt(‘abc123’)); //NaN
console.log(parseInt(’ 123abc ‘)) //123
console.log(parseInt("")); //NaN
console.log(parseInt(" ")); //NaN
console.log(parseInt(‘010’)); //10 不会当做8进制解析
console.log(parseInt(‘0x10’)); //16 可以当做16进制解析
4.parseFloat() 解析小数
跟parseInt()很相似 可以返回小数
//null,undefined,boolean类型转换为NaN
console.log(parseFloat(null)); //NaN
console.log(parseFloat(undefined)); //NaN
console.log(parseFloat(true)); //NaN
console.log(parseFloat(false)); //NaN
//number–>nubmer
console.log(parseFloat(10)); //10
console.log(parseFloat(10.1)); //10.1
//string–>number
console.log(parseFloat(‘123’)); //123
console.log(parseFloat(‘123.3’)); //123.3
console.log(parseFloat(‘123.4.5abc’)); //123.4
console.log(parseFloat(‘hello’)); //NaN
console.log(parseFloat(’’)); //NaN
console.log(parseFloat(’ ')); //NaN
console.log(parseFloat(‘010’)); //10 不当做8进制解析,10进制
console.log(parseFloat(‘0x10’)); //0 不当做16进制解析【注意】
m+n
1.如果两个操作数都是number,正常计算
2.如果两个操作数不为String,Object类型的时候,先将两个操作数转换为Number类型,然后再进行计算。
3.如果有一个是string类型,另外一个是基本数据类型,进行字符串的拼接。
4.如果两个操作数中有一个Object类型,如果没有重写valueOf()和toString(),默认使用toString()返回值。如果该对象重写了valueOf()和toString(),使用valueOf()的返回值。如果没有重写valueOf()只重写了toString(),使用toString()的返回值。如果没有重写toString()只重写了valueOf(),使用valueOf()的返回值。拿到返回值之后,再根据返回值的数据类型进行对应的计算。
流程控制语句
分支语句
if else
switch case
循环语句
for
while
do while