码迷,mamicode.com
首页 > 编程语言 > 详细

javascript四种类型识别的方法

时间:2018-10-12 11:53:36      阅读:172      评论:0      收藏:0      [点我收藏+]

标签:col   ===   var   error   括号   使用   识别方法   tostring   注意   

JavaScript 数据类型

值类型(基本类型):字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol。

引用数据类型:对象(Object)、数组(Array)、函数(Function)。

注:Symbol 是 ES6 引入了一种新的原始数据类型,表示独一无二的值。

typeof运算符

typeof是一元运算符,放在单个操作数的前面,返回值为表示操作数类型的首字母小写的字符串

  [注意]typeof运算符后面带不带圆括号都可以

识别

  【1】可以识别标准类型(将Null识别为‘object‘) 

  【2】不能识别具体的对象类型(Function除外)

  console.log(typeof 1); // number
  console.log(typeof 1); // string
  console.log(typeof null); // object
  console.log(typeof d); // undefined
  console.log(typeof {}); // object
  console.log(typeof []); // object
  console.log(typeof function () {}); // function
  console.log(typeof Symbol(h)); // symbol

由以上可以看出typeof可以判断大多数数据类型,但是对于null数组和对象返回的都是object。

 [注意]判断一个值是否为null类型的最佳方法是直接和null进行恒等比较

  console.log(null === null); // true
  console.log(undefined === null); // false

 

instanceof运算符

        instanceof是一个二元运算符,左操作数是一个对象,右操作数是一个构造函数。如果左侧的对象是右侧构造函数的实例对象,则表达式返回true;否则返回false

  如果左操作数不是对象,返回false,如果右操作数不是函数,则抛出一个类型错误异常TypeError

 [注意]所有的对象都是Object的实例

识别

  【1】可以识别内置对象类型、自定义类型及其父类型

  【2】不能识别标准类型,会返回false

  【3】不能识别undefined、null,会报错

  基本类型

  console.log("string" instanceof String);//false
  console.log(1 instanceof Number);//false
  console.log(Symbol(h) instanceof Symbol); // false
  console.log(true instanceof Boolean);//false
  console.log(undefined instanceof Undefined);//报错
  console.log(null instanceof Null);//报错

  内置对象类型

  var arr = [], obj = {}, fun = function () {};
  console.log(arr instanceof Array, arr instanceof Object, arr instanceof Function); // true true false
  console.log(obj instanceof Array, obj instanceof Object, obj instanceof Function); // false true false
  console.log(fun instanceof Array, fun instanceof Object, fun instanceof Function); // false true true
  console.log(new Date instanceof Date); // true
  console.log(/\d/ instanceof RegExp); // true

  typeof 结合 instanceof 封装一个识别数据类型的方法,可以识别数组与对象。

function getType(param) {
    var typeString = typeof param;
    if (param === null) return ‘null‘;
    if (typeString !== object) return typeString; 
    if (!(param instanceof Array)) return object;
    if (param instanceof Array) return array;
    return 未知类型;
  }

constructor属性

实例对象的constructor属性指向其构造函数。如果是内置类型,则输出function 数据类型(){[native code]};如果是自定义类型,则输出function 数据类型(){}

识别

  【1】可以识别标准类型、内置对象类型及自定义类型

  【2】不能识别undefined、null,会报错,因为它俩没有构造函数

  var s = Symbol(s), fun = function () {};
  console.log((1).constructor); // ? Number() { [native code] }
  console.log((1).constructor); // ? String() { [native code] }
  console.log(true.constructor); // ? Boolean() { [native code] }
  console.log([].constructor); // ? Array() { [native code] }
  console.log({}.constructor); // ? Object() { [native code] }
  console.log(fun.constructor); // ? Function() { [native code] }
  console.log(s.constructor); // ? Symbol() { [native code] }
  console.log(null.constructor); // 报错
  console.log(undefined.constructor); // 报错

    使用构造函数封装一个识别数据类型的方法

  function getType(param) {
    if (param === null) return null;
    if (param === undefined) return undefined;
    var typeString = param.constructor.toString();
    return typeString.replace(/^function (\w+)\(\).+$/,$1); 
  }

 

Object.prototype.toString()方法

  对象的类属性是一个字符串,用以表示对象的类型信息。javascript没有提供设置这个属性的方法,但有一种间接方法可以查询它。Object.prototype.toString()方法返回了如下格式的字符串:[object 数据类型]

识别

  【1】可以识别标准类型及内置对象类型

  【2】不能识别自定义类型

  console.log(Object.prototype.toString.call(1)); // [object Number]
  console.log(Object.prototype.toString.call(1)); // [object String]
  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([])); // [object Array]
  console.log(Object.prototype.toString.call({})); // [object Object]
  console.log(Object.prototype.toString.call(function () {})); // [object Function]
  console.log(Object.prototype.toString.call(Symbol(s))); // [object Symbol]

  将Object.prototype.toString()方法封装成一个类型识别方法

  function getType(param) {
    return Object.prototype.toString.call(param).replace(/^\[object (\w+)\]$/,$1); 
  }

 

javascript四种类型识别的方法

标签:col   ===   var   error   括号   使用   识别方法   tostring   注意   

原文地址:https://www.cnblogs.com/weblff/p/9776402.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!