您现在的位置是:首页 >技术交流 >JS类型识别的4种方法网站首页技术交流

JS类型识别的4种方法

你的美,让我痴迷 2024-08-23 12:01:02
简介JS类型识别的4种方法

一.JS的数据类型
1.Number(数字型)
2.String(字符串行)
3.Boolean(布尔型)
4.Null(空值)
5.Undefined(未定义值)

6.Object(引用类型/对象类型)

除了Object为 引用类型 外,其他的都是 值类型。
JS是以Object为基础的语言,除基本数据类型以外,其他所有的引用数据类型,本质上都是Object。

二.类型识别的几种方法
1.typeof

typeof 是一个一元运算,放在一个运算数之前。运算数可以是任意类型。
它返回的是一个字符串,该字符串说明运算数的类型,typeof一般只能返回如下的几个结果:
number, boolean, string, undefined, funciton, object

console.log(typeof 'abc');  //string
console.log(typeof 1 );  //number
console.log(typeof true );  //boolean
console.log(typeof undefined );  //undefined
console.log(typeof null );  //object
console.log(typeof {name: 'moon'} );  //object
console.log(typeof function () {} );  //function
console.log(typeof [] );  //object
console.log(typeof new Date() );  //object
console.log(typeof /d/ );  //object
function Person() {}
console.log(typeof new Person() );  //object

小结:

  • typeof可以识别原始类型(Null除外), Null类型会被识别成object
  • 不能识别具体的对象类型(Function除外)

2.instanceof

instanceof 用于判断一个变量是否某个对象的实例(一个实例是否属于某一类型),用来识别对象类型。
或者说,对象与构造函数在原型链上是否有关系。

//能够判别内置对象
var a=new Array();
console.log(a instanceof Array); //true
console.log(a instanceof Object);//true.(因为Array是object的子类)
//能够判别自定义对象类型
function test(){};
var a=new test();
console.log(a instanceof test); //true
//不能判别原始数据类型
console.log(1 instanceof Number); //false
console.log('moon' instanceof String); //false

小结:

  1. instance可以判别所有的对象类型,包括内置对象和自定义对象
  2. 不能识别原始类型

3.constructor

查看对象的构造函数

//判别原始类型
console.log('moon'.constructor === String); //true
console.log((1).constructor === Number);  //true,注意这里1要加上括号
console.log(true.constructor === Boolean); //true
//判别内置对象
console.log([].constructor === Array );  //true
//判别自定义对象
function Aaa(){
}
var a1 = new Aaa();
console.log( a1.constructor );  //Aaa(){}

小结:

  • 判别原始类型(Undefined和Null除外,因为它们没有构造函数)
  • 判别内置对象类型
  • 判别自定义对象类型

4.Object.prototype.toString.call()

在使用时Object.prototype.toString.call(xxx)会返回类似[object String]的字符串给我们,用它就可以很好的判断类型了。

//先把方法封装成一个函数
function type(obj) {
    return Object.prototype.toString.call(obj).slice(8,-1);
}
//字符串截取我们需要的部分
console.log(type('moon')); //String
console.log(type(1)); //Number
console.log(type(true)); //Boolean
console.log(type(undefined)); //Undefined
console.log(type(null));  //Null
console.log(type({})); //Object
console.log(type([])); //Array
console.log(type(new Date())); //Date
console.log(type(/d/));  //RegExp
console.log(type(function () {})); //Function
function Person() {
}
console.log(type(new Person())); //Object

小结:

  • 可以识别所有的原始类型和内置对象类型
  • 不能识别自定义对象类型
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。