js数据类型检测小结

在js中,有四种用于检测数据类型的方式,分别是:

  • typeof  用来检测数据类型的运算符
  • instanceof    检测一个实例是否属于某个类
  • constructor   构造函数
  • Object.prototype.toString.call()  原型链上的Object对象的toString方法

下面我们就来分别介绍一下上面四种方法的适用场景和局限性。

typeof 用来检测数据类型的运算符

使用typeof检测数据类型,返回值是字符串格式。能够返回的数据类型是:"number","string","bolean","undefined","function","object"。

<script>
    console.log(typeof(1));    //number
    console.log(typeof(‘hello‘));    //string
    console.log(typeof(true));    //boolean
    console.log(typeof(undefined));    //undefined
    console.log(typeof(null));    //object
    console.log(typeof({}));    //object
    console.log(typeof(function() {}));    //function
</script>

局限性:

  • typeof (null); //"object"。这是由于在js中,null值表示一个空对象指针,而这也正是使用typeof操作 符检测null值时会返回"object"的原因。
  • 不能具体的细分是数组还是正则,还是对象中其他的值,因为使用typeof检测数据类型,对于对象数据类型的所有的值,最后返回的都是"object"

instanceof 检测某一个实例是否属于某个类

instanceof主要用来弥补typeof不能检测具体属于哪个对象的局限性。

<script>
    let arr = [1,2,3];
    let reg = /\w/;
    console.log(arr instanceof Array);    //true
    console.log(arr instanceof Object);    //true
    console.log(reg instanceof RegExp);    //true
    console.log(reg instanceof Object);    //true
</script>

局限性:

  • 不能用于检测和处理字面量方式创建出来的基本数据类型值,即原始数据类型
  • instanceof的特性:只要在当前实例的原型链上的对象,我们用其检测出来都为true
  • 在类的原型继承中,我们最后检测出来的结果未必正确

constructor 构造函数

是函数原型上的属性,该属性指向的是构造函数本身。

作用和instsnceof非常相似,与instanceof不同的是,不仅可以处理引用数据类型,还可以处理原始数据类型。

<script>
    let num = 12;
    let obj = {};
    console.log(num.constructor == Number);//true
    console.log(obj.constructor == Object);//true
</script>

但是要注意一点的是,当直接用(对象字面量或原始数据).constructor时,最好加上()。为了便于理解,我们来看一个例子。

<script>
    1.constructor === Number;        //报错,Invalid or unexceped token
    (1).constructor === Number;        //true
    {}.constructor === Number;        //报错,Invalid or unexceped token
    ({}).constructor === Number;    //true
</script>

这主要是由于js内部解析方式造成的,js会把1.constructor解析成小数,这显然是不合理的,小数点后应该是数字,因此就会引发报错。js会把{}解析成语句块来执行,这时后面出现一个小数点显然也是不合理的,因此也会报错。为了解决这个问题,我们可以为表达式加上()使js能够正确解析。

局限性:我们可以把类的原型进行重写,在重写的过程中很可能把之前constructor给覆盖了,这样检测出来的结果就是不准确的

<script>
     function Fn() {};
    Fn.prototype = new Array;
    var f = new Fn;
    //f是一个函数,按道理说他的构造函数应该是Function,但是修改其原型链后,它的constructor变成了Array.
    console.log(f.constructor == Array);    //true
</script>

Object.prototype.toString.call() 原型链上的Object对象的toString方法

Object.prototype.toString的作用是返回当前方法的执行主体(方法中的this)所属类的详细信息,是最全面也是最常用的检测数据类型的方式。

返回值的类型为string类型。

<script>
    console.log(Object.prototype.toString.call(1));                    //[object Number]
    console.log(Object.prototype.toString.call(/^sf/));                //[object RegExp]
    console.log(Object.prototype.toString.call("hello"));            //[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(function() {}));        //[object Function]
    console.log(typeof(Object.prototype.toString.call(function() {})));        //string
</script>

原文地址:https://www.cnblogs.com/yuliangbin/p/9194759.html

时间: 2024-08-02 10:18:59

js数据类型检测小结的相关文章

js 数据类型检测

提起数据类型检测  大多数人首先想起的应该是  typeof 'xxx' == '数据类型' 坦然这种方法对于基本数据类型的检测还是非常方便的,但是当遇到引用数据类型 Object时却爱莫能助,下面就来讲讲这些数据类型的检测方法吧 1.使用typeof方法 首先我们来看看下面的示例将会在控制台打印出什么 //检测方法 //输出类型 typeof function(){} ====> ‘function’ typeof "" ====> 'string' typeof 545

js 数据类型及其检测方法

1.js数据类型分类: a.基本类型:string.number.undefined.null.boolean b.引用类型: 其他任何一种对象.Object. 2.typeof 操作符可以方便的检测出 string.number.undefined.boolean. typeof 1.1;"number" typeof '';"string" typeof undefined;"undefined" typeof true;"bool

JS基础(JavaScript三大特点、基本数据类型检测、逻辑运算符的短路运算、几大循环结构的特点)

JavaScript的三大特点 1.js是单线程语言,浏览器只分配给js一个主线程,用来执行任务(函数) 2.JavaScript一种直译式脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型. 3.数据类型可以被忽略的语言.一个变量可以赋不同数据类型的值. JavaScript基本数据类型检测 关键字  typeof(变量名或者数据) 用来检测数据类型 typeof对于的值只有六个,分别是: string.number.boolean.object.undefined.functio

js数据类型简单介绍

JS数据类型 ECMAScript中有5种简单的数据类型:Undefined,Null,Boolean,Number,String.还有一种复杂的数据类型--Object(本质上是由一组无序的名值对组成的). typeof操作符--用于检测给定变量的数据类型 "undefined"-未定义 "boolean"-布尔值 "string"-字符串 "number"-数值 "object"-对象或者null &q

总结的JS数据类型判定(非常全面)

用typeof 来检测数据类型 Javascript自带两套类型:基本数据类型(undefined,string,null,boolean,function,object)和对象类型. 但是如果尝试用typeof 来检测对象类型都一律返回"object"并不能加以区分 typeof null // "object" typeof [] // "object" typeof document.childNodes //"object&qu

JS数据类型的理解(猜测)

Js 数据类型 对于这个主题,首先来看几个问题,如果你对这几个问题很清楚的话,那就请直接跳过吧,不用接着往下看了,如果不清楚,建议你还是看看. 1)如果判断函数?function 和object的联系是什么? 2)typeof 和instanceof 的区别是什么和作用是什么? 3)undefined 和null 有什么区别? 4)js 有哪几种基本的数据类型? 5)Undefined,undefined,’undefined’分别是什么? 6)typeof null  ,null instan

1. js数据类型_对象_函数_内存

1. js数据类型有哪些? 基本(值)类型 Number ---- 任意数值 String ---- 任意字符串 Boolean ---- true/false undefined ---- undefined null -------- null 对象(引用)类型 Object Array Function 2. 判断数据类型的方法? typeof 不能检测 null object array 的区别 instanceof 能检测 object array function 的区别 3. 谈谈

JavaScript数据类型检测

一.JavaScript 数据类型 1.基本数据类型(6种) Undefined Null Boolean Number String Symbol (ES6新增) 2.引用数据类型: Object 二.数据类型检测 1. typeof 可以检测除null 外的基本类型.null 和所有对象的typeof都是"object", 不能用于检测用户自定义类型. 比如Date, RegExp, Array, DOM Element的类型都是"object". var s

原生JS-----论数据类型检测

常见的数据类型检测的方法: 一.最为基础的typeof 二.不可不知的instanceof 三.比instanceof更好的constructor 四.检测值或者表达式的结果是否为NaN 五.易用的jQuery函数isArray,isFunction 六.高大上的原型方法Object.prototype.toString typeof基本数据类型的检测: 语法:typeof  被检测的内容  或者 typeof(要检测的内容) 范例: <script> var num=2; console.l