您当前的位置: 首页 >  Java

暂无认证

  • 3浏览

    0关注

    92582博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

检测JavaScript数据类型的方法

发布时间:2021-03-25 21:59:06 ,浏览量:3

目录
  • 1、最常见的判断方法:typeof
  • 2、已知是对象类型:instanceof
  • 3、根据对象原型链检测:Object.prototype.toString.call()
  • 4、根据对象的constructor进行检测
  • 5、jQuery方法:jquery.type()/\$.type()
  • 6、严格运算符(===)有局限
  • 7、isNaN
  • 8、检测数组:isArray
  • 9、以上方法需要了解面向对象、原型prototype、原型链
1、最常见的判断方法:typeof

注意:其中typeof返回的类型都是字符串形式。

console.log(typeof "hello world"); // => "string"  console.log(typeof 'undefined'); // => "string" console.log(typeof 123); // => "number" console.log(typeof true); // => "boolean" console.log(typeof undefined); // => "undefined" console.log(typeof Symbol()); // => "symbol" console.log(typeof null); // => "object" console.log(typeof [1,2,3]); // => "object" console.log(typeof new Date()); // => "object" console.log(typeof new RegExp()); // => "object" console.log(typeof new Function()); // => "function" 
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()

1、适用于所有类型的判断检测,注意区分大小写.toString()方法,在Object原型上返回数据格式。 2、原生检测方法,不存在兼容性问题。 3、call()调用且改变this指向,因为大部分数据类型都有自己的toString()方法。 4、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(null)); // => [object Null] console.log(Object.prototype.toString.call(undefined)); // => [object Undefined] console.log(Object.prototype.toString.call(Symbol())); // => [object Symbol] console.log(Object.prototype.toString.call([1, 2, 3])); // => [object Array] 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] 
4、根据对象的constructor进行检测

constructor判断方法跟instanceof相似,只是检测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指向 // 将自己的类赋值给对象的constructor属性 C.constructor = A; 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 
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 
9、以上方法需要了解面向对象、原型prototype、原型链

在这里插入图片描述

原文地址

关注
打赏
1653961664
查看更多评论
立即登录/注册

微信扫码登录

0.5559s