javascript四种类型识别的方法

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'); 
  }

 

转载于:https://www.cnblogs.com/weblff/p/9776402.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值