检测 JavaScript 数据类型的方法
程序员文章站
2022-06-05 08:05:21
...
检测 JavaScript 数据类型的方法
1、最常见的判断方法: typeof
注意: 其中 typeof 返回的类型都是字符串形式。
console.log(typeof "helloworld"); // => "string"
console.log(typeof 123); // => "number"
console.log(typeof [1,2,3]); // => "object"
console.log(typeof new Function()); // => "function"
console.log(typeof new Date()); // => "object"
console.log(typeof new RegExp()); // => "object"
console.log(typeof Symbol()); // => "symbol"
console.log(typeof true); // => "boolean"
console.log(typeof null); // => "object"
console.log(typeof undefined); // => "undefined"
console.log(typeof 'undefined'); // => "string"
2、已知对象类型: instanceof
注意: instanceof 后面一定要是对象类型,并且大小写不能错,该方法适合一些条件选择或分支。
console.log([1,2,3] instanceof Array); // => true
console.log(new Date() instanceof Date); // => true
console.log(new Function() instanceof Function); // => true
console.log(null instanceof Object); // => false
3、根据对象原型链检测: Object.prototype.toString.call()
- 适用于所有类型的判断检测,注意区分大小写 .toString() 方法,在 Object 原型上返回数据格式。
- 原生检测方法,不存在兼容性问题。
- call() 强行调用,因为大部分数据类型都有自己的 toString() 方法。
- toString() 可以输出一个对象的内部属性 class ,查看对象的类型名
console.log(Object.prototype.toString.call("123")); // => [object String]
console.log(Object.prototype.toString.call(123)); // => [object Number]
console.log(Object.prototype.toString.call(true)); // => [object Boolean]
console.log(Object.prototype.toString.call([1, 2, 3])); // => [object Array]
console.log(Object.prototype.toString.call(null)); // => [object Null]
console.log(Object.prototype.toString.call(undefined)); // => [object Undefined]
console.log(Object.prototype.toString.call({name: 'Hello'})); // => [object Object]
console.log(Object.prototype.toString.call(function () {})); // => [object Function]
console.log(Object.prototype.toString.call(new Date())); // => [object Date]
console.log(Object.prototype.toString.call(/\d/)); // => [object RegExp]
console.log(Object.prototype.toString.call(Symbol())); // => [object Symbol]
4、根据对象的 constructor 进行检测
constructor 判断方法跟 instanceof 相似,但是 constructor 检测 Object 与 instanceof 不一样, constructor 还可以处理基本数据类型的检测,不仅仅是对象类型。
注意:
1、null 和 undefined 没有 constructor;
2、判断数字时使用 () ,比如 (123).constructor,如果写成 123.constructor 会报错;
3、constructor 在类继承时会出错,因为 Object 会被覆盖掉,检测结果就不对。
// 注意当出现继承的时候,使用 constructor 会出现问题
function A() {};
function B() {};
A.prototype = new B(); // A 继承自 B
console.log(A.constructor === B); // => false
var C = new A();
// 现在开始判断 C 是否跟 A 的构造器一样
console.log(C.constructor === B); // => true
console.log(C.constructor === A); // => false
// 解决这种情况,通常是手动调整对象的 constructor 指向
C.constructor = A; // 将自己的类赋值给对象的 constructor 属性
console.log(C.constructor === A); // => true
console.log(C.constructor === B); // => false
5、jQuery 方法: jquery.type() / $.type()
据说是无敌万能的方法,如果对象是 null 跟 undefined,直接返回 “null” 和 “undefined”。
注意:
在使用时,一定要引入 jQuery 文件,不然会报错,jQuery is not defined
console.log(jQuery.type(undefined) === "undefined"); // => true
console.log(jQuery.type() === "undefined"); // => true
console.log(jQuery.type(window.notDefined) === "undefined"); // => true
console.log(jQuery.type(123) === "number"); // => true
console.log(jQuery.type('123') === "string"); // => true
console.log(jQuery.type([]) === "array"); // => true
console.log(jQuery.type(true) === "boolean"); // => true
console.log(jQuery.type(function(){}) === "function"); // => rue
console.log(jQuery.type(new Date()) === "date"); // => true
console.log(jQuery.type(/\d/) === "regexp"); // => true
console.log(jQuery.type(new Error()) === "error"); // => true jQuery 版本高于 1.9.3
console.log(jQuery.type({name:'Hello'}) === "object"); // => true
console.log(jQuery.type(Symbol()) === "symbol"); // => true
// => 其余对象类型一般返回 object
6、有局限的判断: 严格运算符 ===
console.log(typeof null); // => 'object'
console.log(null === null); // => true
console.log(undefined === undefined); // => true
7、isNaN
console.log(NaN == NaN); // => false
console.log(isNaN(10)); // => false
console.log(isNaN('')); // => false
console.log(isNaN(false)); // => false
console.log(isNaN(true)); // => false
8、检测数组: isArray
// ES5 新语法
// 存在兼容性问题,比如,IE 的低版本
console.log(Array.isArray({})); // => false
console.log(Array.isArray([])); // => true
上一篇: 使用Python实现一个简单的项目监控
下一篇: mysql使用数据库