1.如下:
var
a;
var
b =
a *
0;
if (
b ==
b) {
console.
log(
b *
2 +
"2" -
0 +
4);
}
else {
console.
log(!
b *
2 +
"2" -
0 +
4);
}
分析如下:
先看结果:26
首先,a是undefined, b=a*0 把a转成number类型即NaN,所以b是NaN, 所以b==b即NaN==NaN =>false,走else;
!NaN 为true, !b*2 即1*2,最后2+“2”-0 而 “22”碰到"-"号 就转成数字,再和4相加得26。如果没有减0 就是“224”了。
2.
parseInt(
'100W')
//100
parseInt(
'W100')
//NaN
parseInt(
11,
2)
//3
parseInt(
"11",
2)
//3
总结几个特殊常见的类型转换和比较:
一.JS中常见数据类型转换
1. 将其他数据类型转为number
(1) Number()返回一个数字或NaN。 typeof NaN :number类型
1)字符串转成数字number (全部是数字) 如果有字母或非法 都是NaN。
2)布尔型转成数字number true 1 false 0。
3) null 转换成number Number(null)-- 0;
4) undefined转换成number Number(undefined)— NaN
5)数组 机制是先调用toString()方法,转成字符串 再转成数字 所以结果只能是一个数字(只有一个数字的数组)或者 NaN。
6)对象 NaN
(2) parseInt() 转换成整数 将字符串转换成整数,返回值是整数或NaN
和Number()的区别碰到非数字 后面不再进行,但是前面数字部分正常输出。
含有小数的字符串 也只保留整数部分。
注意:
parseInt(string,radix) : string要解析的字符串,radix介于2-36之间,如果省略或为0,则为10进制解析;如果2,即前面那个参数为2进制表示的;“0x”或者“0X”为16基数。如果这个参数小于2或者大于36,则为NaN。
(3) parseFloat():将字符串类型转换成整数或小数 或NaN
var str =”.1.1.1”
console.log(parseFloat(str)); 为0.1
隐式转换:
在进行运算或者部分转化的过程中,js自动进行的数据转换。
(4)
isNaN(): 返回值是一个布尔值:true,false;
true: 代表确实不是一个数字
false: 是一个数字
null—0;
true—1;
false—0;
undefined–NaN
2.将其他类型转换成字符串: toString() /String()
var num1=true;
console.log(num1);
console.log(String(num1));
console.log(num1.toString());
3、将其他类型转换成布尔类型
Boolean(); 返回值true false
除了以下5种,其余都是真
- 、NaN、’‘、null、undefined 都为false。
!取反 非,先将符号后面的内容调用布尔方法,对这个返回值再进行取反 true false
!! 双重取反 可以看成是直接调用Boolean()方法的结果
二.特殊类型比较
“==” 在js中是比较的意思,返回一个布尔类型的值,相等就是true 不想等就是false
NaN == NaN // false
null == undefined //true
null=== undefined //false