JS中9大数据类型
- 基本数据类型(值类型,原始值类型)
String
Number(NaN,Infinity):isNaN检测是否是有效数字,isNaN('AA'),值不是数字类型,先隐式转换为数字类型(Number),再检测
Boollean
Symbol (创建唯一值)
undefined
null
bigint:最大安全数:9007199254740991,超过在末尾加n最小:-9007199254740991 - 引用数据类型
object
+普通对象
+实例对象
+数组对象
+日期对象
+正则对象
+prototype原始对象
+...
function
数据类型的检测
typeof:检测结果是字符串
instanceOf,constructor,Object.prototype.toString.call([value])
数据类型转换的四大核心标准
其他类型转换为Number类型
1、特定转换
Number([val])
parseInt/parseFloat([val])
2、隐式转换
isNaN
数学运算
==(有些值需要先转换为数字类型再比较)
、、、
其他类型转换为字符串
1、可使用方法
toString
String
2、隐式转换
加号运算一边出现字符串,则是字符串拼接
对象转换为数字,需要toString转换为字符串,再转换为数字
基于alert/confirm/write...输出的内容都是字符串
、、、
把其它数据类型转换为布尔
1、基于以下方式可以把其它数据类型转换为布尔
! 转换为布尔值后取反
!! 转换为布尔类型
Boolean([val])
2、隐式转换
在循环或者条件判断中,条件处理的结果就是布尔类型值
、、、
规则:只有 ‘0、NaN、null、undefined、空字符串’ 五个值会变为布尔的FALSE,其余都是TRUE
在==比较的过程中,数据转换的规则
【类型一样的几个特殊点】
{}=={}:false 对象比较的是堆内存的地址
[]==[]:false
NaN==NaN:false
- 【类型不一样的转换规则】
1. null==undefined:true,但是换成===结果是false(因为类型不一致),剩下null/undefined和其它任何数据类型值都不相等
2. 字符串==对象 要把对象转换为字符串
3. 剩下如果==两边数据类型不一致,都是需要转换为数字再进行比较,其他类型转换为Number类型规则,
Number('') == 0
Number(null) == 0
Number(undefined) == NaN
Number([]) == 0
Number({}) == NaN
面试题
console.log([] == false) true
类型不一样,都转换为数字, [] toString 转换为 "" ,再转换为数字,Number("") == 0 ,false转换为数字 == 0
console.log(![] == false) true
![]把数组转换为bool类型,取反,Boolean([]) == true ,取反为false
加号特殊情况:{} + 0 == 0 ;0 + {} == "0[object Object]" ; ({} + 0) == "[object Object]0"
let result = 10+false+undefined+[]+'Tencent'+null+true+{};
console.log(result);
parseInt("")
Number("")
isNaN("")
parseInt(null)
Number(null)
isNaN(nul)
parseInt("12px")
Number("12px")
isNaN("12px")
parseFloat("1.6px")+parseInt("1.2px")+typeof parseInt(null)
isNaN(Number(!!Number(parseInt("0.8"))))
typeof !parseInt(null) + !isNaN(null)
let arr = [10.18, 0, 10, 25, 23];
arr = arr.map(parseInt);
console.log(arr);