一、汇总表格
二、4种方式说明
1、typeof
对于原始类型:除了null其它都可以显示正确
对于对象的话:除了function 其它均显示为 “object”
2、 instanceof : 内部机制是通过原型链来判断的 方法是 a instanceof b (a是不是b的实例)
针对于对象:可以很明显的区分Array、Date、regExp,但是他们都是Object的实例。所以,instanceof 最好是用来判断两个对象是否属于实例关系, 而不是判断一个对象实例具体属于哪种类型。
3、constructor a.constructor===Function / Symbol / String / Number / Boolean / Object / RegExp / Date
对于原始类型:无法处理null、undefined(这两个会报错)
对于对象:均可以判断
函数的 constructor 是不稳定的,这个主要体现在自定义对象上,当开发者重写 prototype 后,原有的 constructor 引用会丢失,constructor 会默认为 Object
4、 toString
toString() 是 Object 的原型方法,调用该方法,默认返回当前对象的 [[Class]] 。这是一个内部属性,其格式为 [object Xxx] ,其中 Xxx 就是对象的类型。
对于 Object 对象,直接调用 toString() 就能返回 [object Object] 。而对于其他对象,则需要通过 call / apply 来调用才能返回正确的类型信息。
可以判断所有类型: Object.prototype.toString.call(xxx) 对向的话可以直接使用 Object.toString(obj)
三、整理一个可以判断任意数据类型的方法
注意:在es6中用class定义类的时候,通过typeof判断出的结果是Function,而通过Object.toString判断的结果是Object。js中class应该是Function类型,所以这点需要注意。
function getType(para) { //判断任意数据类型
const type = typeof para
if (type === "number" && isNaN(para)) return "NaN"
if (type !== "object") return type
return Object.prototype.toString
.call(para)
.replace(/[\[\]]/g, "")
.split(" ")[1]
.toLowerCase()
}
四、小结
js中数据类型判断的方式有4种:typeof、instance、constructor、toString,typeof简单方便,比较适合原始类型判断,toString繁琐一点但是判断全面,所以这两个的结合判断我是比较推荐的。
js的数据类型分为两大类:
基本类型:也称为简单类型,由于其占据空间固定,是简单的数据段,为了便于提升变量查询速度, 将其存储在栈中,即按值访问 。
引用类型:也称为复杂类型,由于其值的大小会改变,所以不能将其存放在栈中,否则会降低变量查询速度,因此, 其值存储在堆中 ,而存储在变量处的值,是一个指针,指向存储对象的内存处,即 按址访问 。引用类型除 Object 外,还包括 Function 、Array、RegExp、Date 等等。
引用类型和基本类型的区别:
1、基本类型按 值 访问
需要注意的是:
A instanceof B用来判断A是否属于B的实例,返回true或者false。
需要注意的是:
ES5中可以用Array.isArray([])来准确判断数组的实例
当创建变量b时,js会在b的原型上添加constructor属性,指向b的引用
js在创建内置对象时,也是这么做的:
Object对象有tostring方法返回:
而非object对象,则需要call/apply才能正确返回类型,返回格式为字符串类型的 "[object 数据类型xxx]" :
以上几种方式可以在不同场景使用。
.js文件是JavaScript语言文件的扩展名。
JavaScript一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。JavaScript已经被广泛用于Web应用开发,常用来为网页添加各式各样的动态功能,为用户提供更流畅美观的浏览效果。通常JavaScript脚本是通过嵌入在HTML中来实现自身的功能的。它是世界上最流行的脚本语言,在电脑、手机、平板上浏览的网页,以及基于HTML5的手机App,交互逻辑都是由JavaScript驱动的。
扩展资料:javascript脚本语言的主要特点:
1、解释性:javascript是一种解释语言,源代码不需要经过编译,直接在浏览器上运行时被解释。
2、基于对象:javascript是一种基于对象的语言,能运用自己已经创建了的对象,许多功能可以来自于脚本环境中对象的方法与脚本的相互作用。
3、事件驱动:JavaScript可以直接对用户或客户输入做出响应,无需经过web服务程序。他对用户的响应,是以事件驱动的方式进行的,所谓事件驱动,指的是在主页执行了某种操作所产生的动作,此动作称为“事件”。
4、跨平台:JavaScript依赖于浏览器本身,与操作环境无关。只要能运行浏览器的计算机,并支持JavaScript的浏览器就可以正确执行。
5、安全性:JavaScript是一种安全性语言。它不允许访问本地的磁盘,并不能将数据存入服务器上;不允许对网络文本进行修改和删除,只能通过浏览器实现信息浏览或动态交互。可有效的防止数据丢失。
参考资料:百度百科-JavaScript