翼度科技»论坛 编程开发 JavaScript 查看内容

JavaScript数据类型检测实现方法详解

5

主题

5

帖子

15

积分

新手上路

Rank: 1

积分
15
一、typeof



  • 优点:能快速判断基本数据类型,除了
    1. Null
    复制代码

  • 缺点:不能判别
    1. Object
    复制代码
    1. Array
    复制代码
    1. Null
    复制代码
    ,都返回
    1. object
    复制代码
    ;判别引用类型除函数显示
    1. function
    复制代码
    外,其他显示为
    1. object
    复制代码
  1. console.log(typeof 55);              // number
  2. console.log(typeof true);            // boolean
  3. console.log(typeof 'aa');            // string
  4. console.log(typeof undefined);       // undefined
  5. console.log(typeof function(){});    // function
  6. console.log(typeof Symbol("foo"));   // symbol
  7. console.log(typeof 553119869n);      // bigint
  8. // 不能判别
  9. console.log(typeof []);   // object
  10. console.log(typeof {});   // object
  11. console.log(typeof null); // object
复制代码

二、instanceof

MDN:
  1. instanceof
复制代码
运算符 用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上。
理解:判断在其原型链中能否找到该类型的原型。
语法:
  1. object instanceof constructor
复制代码
  1. function D(){}
  2. var o = new D();
  3. o instanceof D;  // true
  4. o instanceof Object; // true
复制代码


  • 优点:能区分
    1. Array
    复制代码
    1. Object
    复制代码
    1. Function
    复制代码
    ,适用于判断自定义的类实例对象
  • 缺点:不能判断
    1. Number
    复制代码
    1. Boolean
    复制代码
    1. String
    复制代码
    基本数据类型
  1. console.log(55 instanceof Number);                // false
  2. console.log(true instanceof Boolean);             // false
  3. console.log('aa' instanceof String);              // false  
  4. console.log([] instanceof Array);                 // true
  5. console.log(function(){} instanceof Function);    // true
  6. console.log({} instanceof Object);                // true
复制代码
String 对象和 Date 对象都属于 Object 类型 和 一些特殊情况:
  1. var simpleStr = "a simple string";
  2. var objStr = new String();
  3. var newStr = new String("String created with constructor");
  4. var aDate = new Date();
  5. var myNonObj = Object.create(null);
  6. simpleStr instanceof String; // false,非对象实例,因此返回 false
  7. objStr instanceof String;    // true
  8. newStr instanceof String;    // true
  9. objStr instanceof Object;    // true      
  10. myNonObj instanceof Object; // false,一种创建非 Object 实例的对象的方法
  11. aDate instanceof Date;      // true
  12. aDate instanceof Object;    // true
复制代码

三、Object.prototype.toString.call()



  • 优点:精准判断数据类型,所有原始数据类型都是能判断;
  • 缺点:写法繁琐,最好进行封装后使用
  1. var toString = Object.prototype.toString;
  2. console.log(toString.call(55));           // [object Number]
  3. console.log(toString.call(true));         // [object Boolean]
  4. console.log(toString.call('aa'));         // [object String]
  5. console.log(toString.call([]));           // [object Array]
  6. console.log(toString.call(function(){})); // [object Function]
  7. console.log(toString.call({}));           // [object Object]
  8. console.log(toString.call(undefined));    // [object Undefined]
  9. console.log(toString.call(null));         // [object Null]
  10. console.log(toString.call(Math));         // [object Math]
  11. console.log(toString.call(Set));          // [object Function] Set 构造函数
  12. console.log(toString.call(Array));        // [object Function] Array 构造函数
  13. console.log(toString.call(Map));          // [object Function]
  14. console.log(toString.call(Date));         // [object Function]
  15. console.log(toString.call(new Set()));    // [object Set]
  16. console.log(toString.call(new Array()));  // [object Array]
  17. console.log(toString.call(new Map()));    // [object Map]
  18. console.log(toString.call(new Date()));   // [object Date]
  19. function D(){}
  20. console.log(toString.call(D));            // [object Function]
  21. console.log(toString.call(new D()));      // [object Object]
复制代码

面试问题

如何判断变量是否为数组?
  1. let arr = []
  2. console.log(Array.isArray(arr));    // true
  3. arr.__proto__ === Array.prototype;  // true
  4. arr instanceof Array;               // true
  5. Object.prototype.toString.call(arr);// [object Array]
复制代码
判断是否是 Promise 对象
  1. function isPromise(val) {
  2.   return (
  3.     typeof val.then === 'function' &&
  4.     typeof val.catch === 'function'
  5.   )
  6. }
  7. let p = new Promise((resolve, reject) => {});
  8. console.log(isPromise(p)); // true
复制代码
到此这篇关于JavaScript数据类型检测实现方法详解的文章就介绍到这了,更多相关JS数据类型检测内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

来源:https://www.jb51.net/article/266668.htm
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具