JS中的7+2中数据类型及区别
基础数据类型
- number
- string
- boolean
- null
- undefined
- symbol
- bingint
引用数据类型
- object
- function
数据类型检测
- typeof 检测数据类型的逻辑运算符
- instanceof 检测是否为某个类的实例
- constructor 检测构造函数
- Object.prototype.toString.call 检测数据类型
tyoeif [value] 返回当前的数据类型 “数据类型”
返回的结果都死字符串
局限性
- typeof null = "object"
- tyoeof undefined = "undefined"
- typeof 不能细分对象类型(检测普通对象或者数组对象都是"object")
number类型
- NaN:不是一个有效数字,属于number类型,NaN != NaN,他和谁都不相等 typeof NaN = "number"
- isNaN(值):检测这个值是否为无效数字,如果不是有效数字返回TRUE,是有效数字返回FALSE
- infinity: 无穷 属于number类型
把其他数据类型转换为数字的方法
- 强转换(基于底层机制转换的)Number([value]
一些隐式转换都死基于Number完成的
- isNaN('12px')先把其他类型转换为数字在检测
- 数学运算 '12px' - 13
- 字符串 == 数字
- true 1 false 0
- null 0 undefined NaN
- 字符串中必须保证都是有效数字才会转换为数字,否则都是NaN
- parseInt处理的值是字符串,从字符串的左侧开始查找有效数字字符(遇到非有效数字字符则停止查找),如果处理的值不是字符串,需要先转换为字符串然后再开始查找。
+运算符
再两边出现字符串(或者对象)的情况下,加号一定是字符串拼接 ,对象本身是要转换为数字进行运算的,只不过转换数字的过程中,需要先转换为字符串,才能转化为数字,而一旦转换为字符串,就变为字符串拼接了
console.log(100 + true + 21.2 + null + undefined +"Lemon" + [] + null + 9 + false)
->NaNLemonnull9false
- 100 + 1(true) + 21.2 + 0(null) -> 122.2 number
- 122.2 + NaN(undefined) -> NaN number
- NaN + 'Lemon' + '' + 'null' + '9' + 'false' -> >NaNLemonnull9fa;se
比较运算符
- == 在进行比较的时候,如果左右两边数据类型不一致,则需要先默认转换为一致的数据类型,然后在进行比较
- === 绝对相等,两边类型一致,值也一致才相等,类型不一样,直接不对等,不会转换
== 规则
- 对象 == 字符串 对象转换为字符串
[10] == '10' true- null == undefined(三个等于号不相等),但是和其他任何的值都不想等
0 == null false 0在内存中开辟空间, null没有在内存中开辟空间
NaN和谁(包括自己)都不相等
剩下的情况都转换为数字在做比较
把其他类型转换为布尔型遵循的规则
只有
- 0
- NaN
- null
- undefined
- ""
这五个值是false(仅限JS引擎)