JS中的数据类型
- 基本数据类型
+ number
+ string
+ boolean
+ null
+ undefined
+ symbol
+ bigint
- 引用数据类型
+ object
+ 普通对象
+ 数组对象
+ 正则对象
+ 日期对象
+ Math数学函数对象
+ ...
+ function
数据类型检测
- typeof 检测数据类型的逻辑运算符
- instanceof 检测是否为某个类的实例
- constructor 检测构造函数
- Object.prototype.toString.call 检测数据类型的
typeof [value] 返回当前值的数据类型 "数据类型"
- 返回的结果都是字符串
- 局限性:
+ typeof null => "object"
+ typeof 不能细分对象类型(检测普通对象或者数组对象等都是"object")
把其它数据类型转换为数字的方法
+ 强转换(基于底层机制转换的) Number([value])
+ 一些隐式转换都是基于Number完成的
+ isNaN('12px') 先把其它类型值转换为数字在检测
+ 数学运算 '12px'-13
+ 字符串==数字 两个等于号比较很多时候也是要把其它值转换为数字
+ ...
+ 弱转换(基于一些额外的方法转换) parseInt([value])/parseFloat([value])
JS之所以能够在浏览器中运行,是因为浏览器给JS提了执行的环境 => 栈内存(Stack)
~~~ 0 NaN null undefined 空字符串 转换为布尔是假
~~~ +号遇到字符串(或者对象,因为对象就是先转换为字符串然后在处理)
~~~ parseInt 处理的值是字符串,从字符串的左侧开始查找有效数字字符(遇到非有效数字字符则停止查找) -> 如果处理的值不是字符串,需要先转换为字符串然后在开始查找接口
// Number 直接调用浏览器最底层的数据类型检测机制来完成
// + true 1 false 0
// + null 0 undefined NaN
// + 字符串中必须保证都是有效数字才会转换为数字,否则都是NaN
a、对象=字符串 对象转换为字符串
b、null=undefined 但是和其他值都不相等
c、剩下两边不同都是转换为数字
// let a = typeof typeof typeof [12, 23];
// console.log(a); //=>"string"
/*
* typeof [12, 23] =>"object"
* typeof "object" =>"string"
* ...
*/
/* if ("珠峰" == NaN) {
// 条件是否成立? NaN!=NaN 它和谁都不相等,包括和自己本身也不相等
} */
// isNaN(值) 检测这个值是否为有效数字,如果不是有效数字返回TRUE,是有效数字返回FALSE
/* let res = parseFloat('left:200px'); //=>NaN
if (res === 200) {
alert(200);
} else if (res === NaN) { //NaN!=NaN
alert(NaN);
} else if (typeof res === 'number') { //=>typeof NaN => "number"
alert('number');
} else {
alert('Invalid Number');
} */
// parseInt 处理的值是字符串,从字符串的左侧开始查找有效数字字符(遇到非有效数字字符则停止查找) -> 如果处理的值不是字符串,需要先转换为字符串然后在开始查找接口
// Number 直接调用浏览器最底层的数据类型检测机制来完成
// + true 1 false 0
// + null 0 undefined NaN
// + 字符串中必须保证都是有效数字才会转换为数字,否则都是NaN
/* parseInt("") //NaN
Number("") //0
isNaN("") //先把""转换为数字(隐式 Number) isNaN(0) false
parseInt(null) //parseInt('null') NaN
Number(null) //0
isNaN(null) // isNaN(0) false
parseInt("12px") //12
Number("12px") //NaN
isNaN("12px") //isNaN(NaN) true
parseFloat("1.6px") + parseInt("1.2px") + typeof parseInt(
null); //1.6 + 1 + typeof NaN => 2.6 + 'number' -> '2.6number'
isNaN(Number(!!Number(parseInt("0.8"))));
// isNaN(0) false
typeof !parseInt(null) + !isNaN(null);
// 'booleantrue'
// []==true 都转换为数字
// Number([]) Number('') 0
// 1 */
// let result = 10 + false + undefined + [] + 'Tencent' + null + true + {};
// console.log(result);
// 10 + 0 10
// 10 + undefined NaN
// NaN + [] 'NaN'
// 'NaN' + 'Tencent' 'NaNTencent'
// 'NaNTencentnulltrue[object Object]'