数据类型
基本数据类型
- null:表示定义为空
- undefined:表示未定义
- string :字符串
- number:特殊的两个符号:NAN和infinity
isNaN() 判断一个数是否为无穷大,NaN和任何数都不相等,包括它本身。
parseInt(p1,p2):p1为字符串,如果不是则转换为字符串后再进行处理。参数p2不传或传0的时候默认按十进制处理;如果p2不在2-36之间,则结果为NaN;如果p1以0x/0X开头,则按16进制处理。
sp:parseInt(‘231’,3) //2
parseFloat(p1):只能传入一个参数 - boolean:null、’ '、0、undefined、NaN这五个值转化为Boolean均为 false,其余均为true。
- symbol:表示一个唯一的值
- bigInt
引用数据类型
- object
- function function既具有object的特点,也有function的特性,因此可以将其单独作为一种特殊的数据类型
补充:
- null和undefined的区别和关系:undefined 、null 分别和其他任何值都不相等
undefined==null //true
undefined===null//false
- == 和 ===的区别和比较
区别: == 类型不同时,先转换类型,在进行比较;
=== 类型和值完全相等才为true。 - == 的比较:
对象 == 字符串 对象转化为字符串,先调用valueof获取原始值(一般为基本类型值),然后调用toString()。
null == undefined
NaN和谁都不相等
剩下的情况都是先转换为数字,再进行比较。 - 其他数据转换为数字的方法
强转换(基于底层机制):Number(val) ,val为字符串时必须保证全部为有效数字,否则返回NaN。
Number(true) //1
Number(false) //0
Number(null) //0
Number(undefined) //NaN
一些隐式转换(isNaN()、数学运算、字符串==数字)也是基于Number(val)完成的。
弱转换:parseInt 、parseFloat
四种判断类型的方法
1.typeof: 主要用来检测基本类型值
console.log(typeof(1)); //"number"
console.log(typeof('123')); //"string"
console.log(typeof(undefined)); //"undefined"
console.log(typeof(null)); //"object"
console.log(typeof(Symbol())); //"symbol"
console.log(typeof(function(){
})); //"function"
console.log(typeof([])); //"object"
console.log(typeof(new Date())); //"object"
console.log(typeof({
}));//"object"
2.instanceof:主要用来检测当前对象是否是某个类的实例。所有出现在其原型链上的类,返回结果都为true。
该方法的缺陷在于可以通过__proto__ 或 prototype改变原型链的指向。不能检测基本数据类型。
3.constructor :和instanceof 类似,都是可以改变的
4.Object.prototype.toString.call或用**({}).toString.call**都可以返回当前实例所属类的信息。返回结果的格式是“[object 所属类信息]”