首页 > 编程语言 >javaScript判断数据类型的几种方法

javaScript判断数据类型的几种方法

时间:2023-07-28 19:34:04浏览次数:39  
标签:object console log javaScript 数据类型 几种 Object toString prototype

1: typeof

返回数据类型,包含这7种: number、boolean、symbol、string、object、undefined、function。

typeof null 返回类型错误,返回object。

引用类型,除了function返回function类型外,其他均返回object。

其中,null 有属于自己的数据类型 Null , 引用类型中的 数组、日期、正则 也都有属于自己的具体类型,而 typeof 对于这些类型的处理,只返回了处于其原型链最顶端的 Object 类型,没有错,但不是我们想要的结果。

javaScript判断数据类型的几种方法_全局对象

<script>
      console.log(typeof null)      //object
      console.log(typeof '')        // string
      console.log(typeof [])        // object
      console.log(typeof {})        // object
      console.log(typeof function () {}) // function
      console.log(typeof true)      // boolean
      console.log(typeof undefined) // undefined
    </script>

2:toString 这个是最完美的

toString() 是 Object 的原型方法,调用该方法,默认返回当前对象的 [[Class]] 。这是一个内部属性,其格式为 [object Xxx] ,其中 Xxx 就是对象的类型。

对于 Object 对象,直接调用 toString() 就能返回 [object Object] 。而对于其他对象,则需要通过 call / apply 来调用才能返回正确的类型信息。

判断类型举例:

javaScript判断数据类型的几种方法_全局对象_02

console.log(Object.prototype.toString({})) // [object object]
      console.log(Object.prototype.toString.call('')) // [object String]
      console.log(Object.prototype.toString.call(1)) // [object Number]
      console.log(Object.prototype.toString.call(true)) // [object Boolean]
      console.log(Object.prototype.toString.call(Symbol())) //[object Symbol]
      console.log(Object.prototype.toString.call(undefined)) // [object Undefined]
      console.log(Object.prototype.toString.call(null)) // [object Null]
      console.log(Object.prototype.toString.call(new Function())) // [object Function]
      console.log(Object.prototype.toString.call(new Date())) // [object Date]
      console.log(Object.prototype.toString.call([])) // [object Array]
      console.log(Object.prototype.toString.call(new RegExp())) // [object RegExp]
      console.log(Object.prototype.toString.call(new Error())) // [object Error]
      console.log(Object.prototype.toString.call(document)) // [object HTMLDocument]
      console.log(Object.prototype.toString.call(window)) //[object global] window 是全局对象 global 的引用

3:constructor

constructor是原型prototype的一个属性,当函数被定义时候,js引擎会为函数添加原型prototype,并且这个prototype中constructor属性指向函数引用, 因此重写prototype会丢失原来的constructor。

注意:

1:null 和 undefined 无constructor,这种方法判断不了。

2:还有,如果自定义对象,开发者重写prototype之后,原有的constructor会丢失,因此,为了规范开发,在重写对象原型时一般都需要重新给 constructor 赋值,以保证对象实例的类型不被篡改。

javaScript判断数据类型的几种方法_引用类型_03

4:instanceof

instanceof 是用来判断 A 是否为 B 的实例,表达式为:A instanceof B,如果 A 是 B 的实例,则返回 true,否则返回 false。 在这里需要特别注意的是:instanceof 检测的是原型

javaScript判断数据类型的几种方法_数据类型_04

javaScript判断数据类型的几种方法_数据类型_05

由上图可以看出[]的原型指向Array.prototype,间接指向Object.prototype, 因此 [] instanceof Array 返回true,

[] instanceof Object 也返回true。

instanceof 只能用来判断两个对象是否属于实例关系, 而不能判断一个对象实例具体属于哪种类型。

标签:object,console,log,javaScript,数据类型,几种,Object,toString,prototype
From: https://blog.51cto.com/u_16202629/6886430

相关文章

  • 数据类型
           ......
  • 三个线程循环打印ABC10次的几种解决方法
    有三个线程分别打印A、B、C,请用多线程编程实现,在屏幕上循环打印10次ABCABC… 这是一个比较常用的关于线程的考题,一般出现在应届生的校园招聘试卷上。本文给出如下四种解决方法:使用synchronized,wait和notifyAll使用Lock和Condition使用Semaphore使用AtomicInteger使用synchro......
  • 【Python】数字取反(相反数)的几种方法
     方法一:绝对值if__name__=="__main__":"""run"""print("负数取反-绝对值:{}".format(abs(-28)))print("正数数取反-绝对值:{}".format(abs(32)*-1))  结果: 方法二:numpy库#coding:utf-8importnumpyas......
  • JavaScript中this关键字详解(二)
    使用注意点避免多层this由于this的指向是不确定的,所以切勿在函数中包含多层的this。varo={f1:function(){console.log(this);//objectvarf2=function(){console.log(this);//window}();}}​o.f1()//Object//Window上面代码......
  • JavaScript中this关键字详解(一)
    涵义this关键字是一个非常重要的语法点。毫不夸张地说,不理解它的含义,大部分开发任务都无法完成。this可以用在构造函数之中,表示实例对象。除此之外,this还可以用在别的场合。但不管是什么场合,this都有一个共同点:它总是返回一个对象。简单说,this就是属性或方法“当前”所在的对象......
  • 15款很棒的 JavaScript 开发工具
    [url][/url]在开发中,借助得力的工具可以事半功倍。今天,这篇文章向大家分享最新收集的15款非常有用的JavaScript开发工具。[color=red]TestSwarm:Continious&DistributedJSTesting[/color][url]http://www.webresourcesdepot.com/testswarm-contini......
  • 创建对象的几种方式
    1.使用对象字面量的方式varcat={}vat.name="kity"cat.name=2cat.shyHello=function(){ alert('你好')}2.使用工厂方式创建vardog=newObjectvat.name="kity"cat.name=2cat.shyHello=function(){ alert('汪汪汪')}3.用函数模拟functio......
  • JavaScript中的MAP对象
    MAP对象,存储格式为键值对。和普通对象无异,不过它的方法要特殊一些。constmap=newMap();//createdmap.set(key,value);//赋值map.get(key);//读取map.delete(key);//删除指定键值map.clear();//删除所有键值对MAP对象主要用于频繁进行赋值删除时,会有更好的性能,同......
  • Redis从入门到放弃(2):数据类型
    在Redis中,数据以键值对的形式存储。Redis支持五种主要的数据类型,每种类型都有不同的用途和特性。本文将介绍Redis的五种数据类型:字符串(string),哈希(hash),列表(list),集合(set)和有序集合(sortedset)。1.字符串(String)介绍字符串是Redis中最基本的数据类型。每个键都可以关联一个字符串......
  • [Javascript] removeEventListener
    Mistake1:Notusingthesamefunctionreference//Wrongbutton.addEventListener('click',()=>{console.log('click')})button.removeEventListener('click',()=>{console.log('click')})//Won'tremovet......