Number 数据类型
数据类型: 0 -1 1 0.1 NaN Infinity
NaN:not a number不是一个有效数字,但是属于number数据类型的
Infinity:无穷大的值 -Infinity无穷小的值
var num = 1;
num = 2;
=赋值 ==比较
NaN==NaN false不相等 NaN和任何值都不相等的
所以我们以后无法基于 xxx==NaN 来验证xxx是否为有效数字,我们应该基于一个新的方法来验证 isNaN([value]):检测是否为非有效数字
+ 如果[value]值不是数字类型,默认需要先转换为数字类型,然后再去验证是否为有效数字
+ 如果是有效数字,返回false,如果不是有效数字,返回true
1.把其他数据类型转换为Number数据类型
+ 手动转换
+ Number([value])
+ parseInt/parseFloat([value])
+ 隐式转换(自己默认转换的)
=>采用的就是Number([value])这个规则
+ isNaN([value]) 如果[value]不是数字则先转换为数字,再进行有效数字的检测
true:说明是非有效数字
false:说明是有效数字
+ 数学运算:加减乘除及取余数等(注意,在加法运算中,如果遇到“字符串/对象”,则不是数学运算,而是字符串拼接)
+ 在==比较的时候,如果两边值的类型不一样,大部分情况下都是转换为数字比较的
Number([value]):强制把其他数据类型转换为数字类型
+ 把字符串转换为数字:空字符串变为0,只要字符串中出现任意一个非有效数字字符,结果都是NaN
+ 把布尔转换为数字:true变为1 false变为0
+ null变为数字0
+ undefined变为NaN
+ symbol不能基于Number转换为数字:Uncaught TypeError: Cannot convert a Symbol value to a number
+ bigint是正常转换的
+ 把引用数据类型(对象/函数)转换为数字:先把对象值转换为字符串(对象.toString() 特殊:其实是先基于valueOf获取它的原始值),然后再把字符串转换为数字的
+ 普通对象转换为字符串 "[object Object]"
+ 函数转换为字符串 "函数你看到的那些代码"
+ 数组转换为字符串 空数组变为空字符串,剩下的是把数组中的每一项基于“逗号”分隔(只有一项是不需要分隔的)
parseInt/parseFloat([value]):
它的规则和Number([value])是不一样的,它的规则是,先把[value]变为字符串,然后从字符串左侧开始查找,找到所有的有效数字字符转换为数字(遇到一个非有效数字字符,则停止查找,不论后面是否还有有效数字字符)
parseFloat比parseInt多识别一个小数点
加法运算的规则(“+”左右两边的任何一边,遇到字符串或者对象,都是字符串拼接 [有原始值的对象刨除在外])
1 + '2' "12" 1 + [10] 把对象变为数字之前是先转换为字符串,这样“+”两边中的一边遇到字符串,结果是字符串拼接接 -> 1 + '10'->'110' 1 + true+null+undefined+[]+'zhufeng'+false+[10]+undefined 1 + true -> 2 2 + null -> 2 2 + undefined -> 2 + NaN -> NaN NaN + [] -> 'NaN' 'NaN' + 'zhufeng' -> 'NaNzhufeng' ... 后期都是字符串拼接 'NaNzhufengfalse10undefined'
在“+”的运算中,如果“+”两边任意一边出现字符串(或对象),大部分都以字符串拼接的方式处理(特殊:具备原始值的对象)
“+字符串” 或者 “++字符串” 再或者 “字符串++”,这种情况也是把字符串转换为数字
var n="10"; console.log(1+n); //"110" console.log(+n); //10 console.log(++n); //11
let result=100+true+21.2+null+undefined+"Tencent"+[]+null+9+false; 100 + true = 101 101 + 21.2 = 122.2 122.2 + null = 122.2 122.2 + undefined = NaN NaN + "Tencent" = "NaNTencent" ... =>"NaNTencentnull9false" console.log(result);

浙公网安备 33010602011771号