JavaScript基础巩固系列——3种确定数据类型的方法

全手打原创,转载请标明出处:https://www.cnblogs.com/dreamsqin/p/13666885.html, 多谢,=。=~(如果对你有帮助的话请帮我点个赞啦)

重新学习JavaScript是因为当年转前端有点儿赶鸭子上架的意味,我一直在反思我的知识点总是很零散,不能在脑海中形成一个完整的体系,所以这次想通过再次学习将知识点都串联起来,结合日常开发的项目,达到温故而知新的效果。与此同时,总结一下我认为很重要但又被我遗漏的知识点~

JavaScript 有三种方法,可以确定一个值到底是什么类型:

typeof运算符

  • 用法:typeof [value]
  • 返回值:number(数值)、string(字符串)、boolean(布尔值)、function(函数)、undefined(undefined)、object(对象)
  • 特殊用法:用于检查没有声明的变量而不报错
  • 例子:
typeof 123 // "number"
typeof '123' // "string"
typeof false // "boolean"
function f() {}
typeof f // "function"
typeof undefined // "undefined"
typeof v // "undefined"
typeof window // "object"
typeof {} // "object"
typeof [] // "object"

PS:typeof null返回object

instanceof运算符

  • 用法:[A] instanceof [B],用来验证一个对象是否为指定的构造函数的实例
  • 返回值:true、false
  • 特殊用法:用于区分对象和数组
  • 例子:
var o = {};
var a = [];
o instanceof Array // false
a instanceof Array // true

Object.prototype.toString方法

  • 用法:Object.prototype.toString.call(value),返回当前对象对应的字符串形式,默认情况下返回类型字符串"[object object]"(第二个值表示该对象的构造函数)
  • 返回值:"[object type]"
  • 特殊用法:用于比typeof更精准的数据类型判断
  • 例子:
//数值:返回[object Number]
//字符串:返回[object String]
//布尔值:返回[object Boolean]
//undefined:返回[object Undefined]
//null:返回[object Null]
//数组:返回[object Array]
//arguments 对象:返回[object Arguments]
//函数:返回[object Function]
Object.prototype.toString.call(Math) // "[object Math]"
//Error 对象:返回[object Error]
//Date 对象:返回[object Date]
//RegExp 对象:返回[object RegExp]
//其他对象:返回[object Object]

//一个比typeof运算符更准确的类型判断函数
var type = function (o){
  var s = Object.prototype.toString.call(o);
  return s.match(/[object (.*?)]/)[1].toLowerCase();
};

type({}); // "object"
type([]); // "array"
type(5); // "number"
type(null); // "null"
type(); // "undefined"
type(/abcd/); // "regex"
type(new Date()); // "date"

//专门判断某种类型数据的方法
['Null',
 'Undefined',
 'Object',
 'Array',
 'String',
 'Number',
 'Boolean',
 'Function',
 'RegExp'
].forEach(function (t) {
  type['is' + t] = function (o) {
    return type(o) === t.toLowerCase();
  };
});

type.isObject({}) // true
type.isNumber(NaN) // true
type.isRegExp(/abc/) // true

参考资料

JavaScript 语言入门教程 :https://wangdoc.com/javascript/index.html

原文地址:https://www.cnblogs.com/dreamsqin/p/13666885.html