基本数据类型:number string boolean null undefined symbol 以及ES6新增的(bigInt)
引用数据类型:对象数据类型(普通对象\数组对象\正则对象\日期对象..) 函数数据类型(function)
数据类型之间的区别:
基本数据类型是按值操作,值存储在栈内存中;引用数据类型是按照内存的地址来操作的,我们需要把对象的键值对存储在堆内存中,我们操作的是堆内存的引用地址
一.数字 number
包括:正数 负数 小数 零 NaN(不是一个有效数字) Infinity(无穷大的值)
在使用isNaN进行有效数字检测的时候,如果检测的值是非数字类型的值,则需要先把其转换为数字类型,然后再进行检测,把其他数据类型转换为数字类型
把其他数据类型转换为数字类型(3种方式):
1.Number()
处理过程:
Number是JS内置的转换方式,可以把其他数据类型强制转换为数字类型
+ 把字符串转换为数字,一旦字符串出现非有效字符,则结果为NaN,只有都是有效数字字符,才能转换为具体数字,空字符串会转换成0
+ 把布尔类型转换成数字,true转换为1,false转换为0
+ 把空转换成数字,null转换为0 undefined转换为NaN
+ 不能把Symbol类型转换为数字,会报错
+ 对象转换为数字,先调用toString把对象转换为字符串,再把字符串转换为数字
+ 普通对象转换为字符串结果都是"[object Object]"
+ 数组对象转换为字符串结果是:用逗号分隔数组中的每一项
+ [ ] -> ' '
+ [10] -> '10'
+ [10,20] -> '10,20'
+ 正则或者函数转换为字符串和原始值看到的内容类似
+ 其余对象格式基本上都会变为数字NaN
+ 函数转换为数字,结果都是NaN
number数据类型详细解读:
2.parseInt
3.parseFloat(比parseInt多识别一个小数点)
处理过程: parseInt / parseFloat,也是把其他数据类型转换为number类型的
处理过程:首先把[value]值变为字符串,其次从最左边开始查找,把找到的有效数字字符转为数字,一直遇到一个非有效数字字符为止,则结束查找
+ Number(true) -> 1
+ parseInt(true) -> NaN
二. 字符串 string
在JS中间 单引号 双引号 反引号 包起来的都是字符串
1.把其他数据类型转换为字符串类型(两种方式)
+ String([value])
+ [value].toString()
2.普通对象转换为字符串都是"[object Object]"(也就是"普通对象本身"),数组对象转换为字符串是"第一项,第二项..." (逗号分隔数组中的每一项)
3.在JS中常用的数学运算( + - * / %)
注意:1) / 的时候会把位数都打印出来 比如:8/3=2.6666666666666665
注意:2)除了加法以外,其余的情况都是数学运算(如果遇到非数字类型,需要基于Number把其强制转换为数字类型,然后在进行运算);
注意:3)加号在JS中既有数学运算,也有字符串拼接的意思(只要加号两边的任意一边出现字符串,则变为字符串拼接-----如果加的是一个对象,其实最后也是字符串拼接,因为对象转换为数字,是先转换为字符串的)
4.字符串拼接:
4.1传统字符串拼接:
4.2ES6模板字符串:
目的:就是为了解决传统字符串拼接中的问题(使用反引号 tab键上面的键),$[ ]中存放变量;或者其它的JS表达式即可,很简单的完成字符串判断
三.布尔 boolean
1.如何把其他数据类型转换成布尔类型
1.1 Boolean([value])
1.2 ![value] 把指定的值转换为布尔类型后取反
1.3 !![value] 取反再取反,相当于没有取反,只是把它转换为布尔类型值
!!规则:只有"0/null/NaN/undefined/空字符串",五个值结果是false,其余的都是true
1.4 条件判断中,每一个条件最后一定是true/false
1.5 写一个值,也要把这个值转换为布尔,然后校验程序的真假
四.空对象指针 null
五.未定义 undefined
六.ES6新增的唯一值类型 symbol