这篇文章主要是对判断 javascript 的数据类型的判断方式进行了详细的介绍,需要的朋友可以过来参考下,希望对大家有所帮助
Javascript 是一种由 Netscape 的 LiveScript 发展而来的原型化继承的基于对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,比如 Perl,遗留的速度问题,为客户提供更流畅的浏览效果。
数据类型的判断有这么几种方式
1、一元运算符 typeOf
2、关系运算符 instanceof
3、constructor 属性
4、prototype 属性
一、typeof
typeof 的返回值有以下几种
类型 | 结构 |
---|---|
Undefined |
|
Null | (见下方) |
布尔值 |
|
数值 |
|
字符串 |
|
Symbol (ECMAScript 6 新增) |
|
宿主对象 (JS 环境提供的,比如浏览器) | |
函数对象 (implements [[Call]] in ECMA-262 terms) |
|
任何其他对象 |
|
简单粗暴的方法,直接看代码
- // 以下代码在版本 Google Chrome 45.0.2454.101 m 中测试通过
- // Numbers
- console.log(typeof 37 === 'number');
- console.log(typeof 3.14 === 'number');
- console.log(typeof Math.LN2 === 'number');
- console.log(typeof Infinity === 'number');
- console.log(typeof NaN === 'number'); // 尽管NaN是"Not-A-Number"的缩写,意思是"不是一个数字"
- console.log(typeof Number(1) === 'number'); // 不要这样使用!
- // Strings
- console.log(typeof "" === 'string');
- console.log(typeof "bla" === 'string');
- console.log(typeof(typeof 1) === 'string'); // console.log(typeof返回的肯定是一个字符串
- console.log(typeof String("abc") === 'string'); // 不要这样使用!
- // Booleans
- console.log(typeof true === 'boolean');
- console.log(typeof false === 'boolean');
- console.log(typeof Boolean(true) === 'boolean'); // 不要这样使用!
- // Symbols
- console.log(typeof Symbol() === 'symbol');
- console.log(typeof Symbol('foo') === 'symbol');
- console.log(typeof Symbol.iterator === 'symbol');
- // Undefined
- console.log(typeof undefined === 'undefined');
- console.log(typeof blabla === 'undefined'); // 一个未定义的变量,或者一个定义了却未赋初值的变量
- // Objects 使用Array.isArray或者Object.prototype.toString.call方法可以从基本的对象中区分出数组类型
- console.log(typeof {
- a: 1
- } === 'object');
- console.log(typeof[1, 2, 4] === 'object');
- console.log(typeof / ^[a - zA - Z] {
- 5,
- 20
- }
- $ / ==='object');
- console.log(typeof {
- name: 'wenzi',
- age: 25
- } === 'object');
- console.log(typeof null === 'object'); //true
- // 下面的容易令人迷惑,不要这样使用!
- console.log(typeof new Boolean(true) === 'object');
- console.log(typeof new Number(1) === 'object');
- console.log(typeof new Date() === 'object');
- console.log(typeof new String("abc") === 'object');
- console.log(typeof new Error() === 'object');
- // 函数
- console.log(typeof
- function() {} === 'function');
- console.log(typeof Math.sin === 'function');
typeof 只能检查出来以上 7 几种类型
二、instanceof
instanceof 运算符用于识别正在处理的对象的类型,要求开发者明确地确认对象为某特定类型
1、instanceof 和 constructor 没有关系
- var A = function() {};
- A.prototype = {};
- var B = {};
- console.log(A.constructor);//function Function() { [native code] }
- console.log(B.constructor);//function Object() { [native code] }
- var a = new A();
- A.prototype = {};
- var b = new A();
- b.constructor = A.constructor;
- console.log(a.constructor === A);//false
- console.log(a.constructor);//function Object() { [native code] }
- console.log(typeof A);//function Object() { [native code] }
- console.log(a.constructor === b.constructor);//false
- console.log(b.constructor);//function Function() { [native code] }
- console.log(a instanceof A);//false
- console.log(b instanceof A);//true
2、instanceof 又叫关系运算符,可以用来判断某个构造函数的 prototype 属性是否存在另外一个要检测对象的原型链上
- var str = new String("hello world");
- console.log(str instanceof String);//true
- console.log(String instanceof Function);//true
- console.log(str instanceof Function);//false
来源: