JS分两种数据类型:
基本数据类型:Number、String、Boolean、Null、 Undefined、Symbol(ES6)
引用数据类型:function,object,Date,Array,RegExp
数据类型树状图
查看数据类型
typeof
typeof对于一些类型的处理只返回了处于其原型链最顶端的object类型。
引用类型除了function返回function类型之外,其他都返回object。
NaN的数据类型是number
数组(Array)和日期Date的数据类型是object
不能检测出null,检测null的数据类型是object
toString
toString是Object的原型方法,调用该方法,返回当前对象的[[class]]。对于Object对象,直接调用toString()就可以返回,对于其他类型需要通过call()/apply()来调用才能返回正确的类型信息。
使用:
Object.prototype.toString.call(‘’ '); //[[Object String]]
constructor
无法判断null和undefined
原型prototype的一个属性,函数被定义的时候,js引擎会为函数添加原型prototype,并且这个prototype种constructor属性指向函数应用。
使用:
var f = new F();
f.constructor === F;// true
instanceof
用来判断A是否为B的实例,A instanceof B,如果A是B的实例,返回true否则返回false。instanceof检测的是原型。
总结
typeof可以准确地判断出基本类型,但是对于引用类型除function之外返回的都是object;
已知是引用类型的情况可以选用instanceof或constructor方法进行具体类型的判断:
instanceof是基于原型链的;
constructor 属性易变,不可信赖,为了规范,在重写对象原型时一般都需要重新给constructor赋值,以保证实例对象的类型不被改写;
Object.prototype.toString.call() 通用但很繁琐。
js数据类型转换
1.转换成字符串
String() 能够把数字转换为字符串。
String(x) // 从数值变量 x 返回字符串
String(123) // 从数值文本 123 返回字符串
String(100 + 23) // 从表达式中的数值返回字符串
布尔方法 toString()
同理。
false.toString() // 返回 "false"
true.toString() // 返回 "true"
2.把日期转换为字符串
String(Date()) "demo1">// 返回 "Sun Aug 14 2022 17:30:40 GMT+0800 (中国标准时间)"
3.把字符串转换为数值
Number("3.14") // 返回 3.14
Number(" ") // 返回 0
Number("") // 返回 0
Number("99 88") // 返回 NaN
4. +
运算符可用于把变量转换为数字
var y = "5"; // y 是字符串
var x = + y; // x 是数字
5.把布尔转换数值
Number(false) // 返回 0
Number(true) // 返回 1
6.把日期转换为数字
d = new Date();
Number(d) "demo3">// 返回 1660469440577
7.把日期转换为数字
d = new Date();
Number(d) "demo3">// 返回 1660469440577