javascript检测基本类型值或引用类型值的类型方法

首先javascript的数据类型分为两种数据类型:基本数据数据类型和引用数据类型

基本数据类型:Number,String,Boolean,Undefined,Null。原始值,是简单的数据段,可按值访问,直接操作保存在变量中的实际值

引用数据类型:Object,Array,Function,Date,RegExp,单体内置对象(Math,window(客户端才有的全局对象),global(服务端才有的全局对象))。引用值,是保存在栈内存中的对象,是有多个值构成的对象,与其他语言不同的是:你不可以直接访问堆内存空间中的位置和操作堆内存空间,只能操作对象在堆内存中的引用地址

我在这列举了3种方法,使用console.log()逐一打印出来,一目了然

第1种方法,使用typeof检测:

检测类型typeof,typeof(x)或者typeof x:检测基本类型值的数据类型,不建议检测引用类型值(note:也可检测单体内置对象(Math,window,global))

      console.log(typeof 1); //number
      console.log(typeof "1"); //string
      console.log(typeof true); //boolean
      console.log(typeof undefined); //undefined
      console.log(typeof null); //object

      console.log(typeof {}); //object
      console.log(typeof []); //object
      console.log(typeof function() {}); //function
      console.log(typeof new Date()); //object
      console.log(typeof new RegExp()); //object
      console.log(typeof Math); //object
      console.log(typeof window); //object(客户端的全局对象,否则undefined)
      console.log(typeof global); //object(服务端的全局对象,否则undefined)

第2种方法:使用instanceof检测:

检测类型instanceof:检测一个引用类型值是什么类型的对象,不建议检测基本类型值,因为在基本类型值中始终返回false(note:不可检测单体内置对象(Math,window,global))

      console.log(1 instanceof Number); //false
      console.log("1" instanceof String); //false
      console.log(true instanceof Boolean); //false
      // console.log(undefined instanceof Undefined); //报错,因为Undefined不存在
      // console.log(null instanceof Null); //报错,因为Undefined不存在

      console.log({} instanceof Object); //true
      console.log([] instanceof Array); //true,也属于Object类型
      console.log(function() {} instanceof Function); //true,也属于Object类型
      console.log(new Date() instanceof Date); //true,也属于Object类型
      console.log(new RegExp() instanceof RegExp); //true,也属于Object类型

第3种方法:使用Object.prototype.toString().call(x)检测:

检测类型Object.prototype.toString.call(x),可检测基本类型值和引用类型值(note:也可检测单体内置对象(Math,window,global)和JSON)

但是Object.prototype.toString()本身是允许被修改的,而我们目前所探讨的是假设未被修改为前提的

      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(undefined)); //[object Undefined]
      console.log(Object.prototype.toString.call(null)); //[object Null]

      console.log(Object.prototype.toString.call({})); //[object Object]
      console.log(Object.prototype.toString.call([])); //[object Array]
      console.log(Object.prototype.toString.call(function(){})); //[object Function]
      console.log(Object.prototype.toString.call(new Date())); //[object Date]
      console.log(Object.prototype.toString.call(new RegExp())); //[object RegExp]

      console.log(Object.prototype.toString.call(Math)); //[object Math]
      console.log(Object.prototype.toString.call(window)); //[object window](客户端的全局对象,否则报错)
      // console.log(Object.prototype.toString.call(global)); //[object global](服务端的全局对象,否则报错)

      console.log(window.JSON && Object.prototype.toString.call(JSON)); // [object JSON]

使用这种方法,可以编写一个判断所有类型的函数:

      function getType(obj){
        let str = Object.prototype.toString.call(obj); // 检测基本类型值,引用类型值的类型
        let map = {
          ‘[object Boolean]‘: ‘boolean‘,
          ‘[object Number]‘: ‘number‘,
          ‘[object String]‘: ‘string‘,
          ‘[object Function]‘: ‘function‘,
          ‘[object Array]‘: ‘array‘,
          ‘[object Date]‘: ‘date‘,
          ‘[object RegExp]‘: ‘regExp‘,
          ‘[object Undefined]‘: ‘unfefined‘,
          ‘[object Null]‘: ‘null‘,
          ‘[object Object]‘: ‘object‘
        };
        if(obj instanceof Element){
          return ‘element‘;
        }
        return map[str];
      }
      console.log("string"); // string

原文地址:https://www.cnblogs.com/jinbang/p/10346584.html

时间: 2024-08-21 22:01:01

javascript检测基本类型值或引用类型值的类型方法的相关文章

关于基本类型值和引用类型值以及Vue官方API的array.$remove(reference)

今天又是孟哥解惑. 数组里的元素也是指向内存地址么? 这个要分情况的. 无论a[0],a[2]在什么地方,只要其值是基本类型值,就是值的比较,只要其值是引用类型(对象),就是内存地址的比较. Vue官方API:http://cn.vuejs.org/api/#array-_24remove_28reference_29,有个例子array.$remove(reference),参数是对象时,完全没问题,对于基本值,需要再测一下.保险起见,可以用array.splice(index, 1)方法,然

【javascript】详解变量,值,类型和宿主对象

前言 我眼中的<javascript高级程序设计> 和<你不知道的javascript>是这样的:如果<javascript高级程序设计>是本教科书的话, <你不知道的javascript>就是那本王后雄有以下两点: 1. 老师会教你: 考试最后的准备仍然要“回归课本”2. 在1的前提下并不妨碍我们希望拥有一本好用的“王后雄” JS数据类型 JS类型分类 讲到类型, 首先要说的当然是JS的类型分类, 对于这一点,<javascript高级语言程序设计&

JavaScript引用类型和基本类型的区别

JavaScript变量可以用来保存的两种类型的值:基本类型值和引用类型值. 基本类型值有5种类型:undefined,null,boolean,number,string 引用类型值有两种类型:函数,对象. 基本类型值和引用类型值的特点: 1.基本类型值在内存中占据固定大小的空间,因此被保存在栈内存中: 2.从一个变量到另一变量复制的基本类型的值,会创建这个值得一个副本: 3.引用类型的值是对象,保存在堆内存中: 4.包含引用类型的值的变量实际存上包含的并不是对象本省,而是一个指向该对象的指针

关于js的引用类型和基本类型

看了那么多基本类型和引用类型的文章,自己也心血来潮想写一篇来巩固一下自己对于这个的理解. js的基本类型有null,undefind,Number,String,Boolean.而引用类型的有Arr,Function,Object.基本类型储存于栈,引用类型储存于堆. 对于基本类型值和引用类型值的区别: 引用类型值可添加属性和方法,而基本类型值则不可以. 基本类型添加属性和方法的时候并不会报错(严格模式下会)var a = 'lxy'; a.name = 'zzzz'; console.log(

JavaScript的基本类型和引用类型的值。

ECMAScript变量包含两种数据类型的值:基本类型值和引用类型值. 在将一个值赋给变量时,解析器必须确定这个值是基本类型值还是引用类型值. 基本类型:string,number,boolean,undefined和null.      基本类型值:简单的数据段,保存在栈内存中同时占有固定大小的空间,按值访问,因此可以操作保存在变量中的实际的值. 引用类型:Object,Array,Date     引用类型值: 由多个值构成的对象,在栈内存中变量保存的实际上是一个地址,这个地址指向堆内存中所

javascript 数据类型(基本类型和引用类型的定义和区别)

ECMAStript变量包含两种不同类型的值,基本类型和引用类型. 基本类型:指的就是保存在栈内存中的简单数据段. 引用类型:指的是那些保存在堆内存中的对象,换句话说,就是变量名实际上是一个指针,而这个指针指向的位置,就是保存对象的位置. 两种不同的访问方式 基本类型:按值访问,操作的是它们实际的值. 引用类型:按引用访问,当查询时,我们需要先从栈中读取内存地址,然后按照指针所指向的地方,找到堆内存里面的值. 基本类型 基本的数据类型有:`undefined,boolean,number,str

[转]javascript中基本类型和引用类型的区别分析

基本类型和引用类型 ECMAScript包含两个不同类型的值:基本类型值和引用类型值.基本类型值指的是简单的数据段:引用类型值指由多个值构成的对象.当我们把变量赋值给一个变量时,解析器首先要做的就是确认这个值是基本类型值还是引用类型值. 常见的五种基本数据类型是: Undifined.Null.Boolean.Number和String.这五种基本数据类型可以直接操作保存在变量中的实际值. 看下面例子: ? 1 2 3 4 5 6 7 8 9 var a = 10; var b = a;    

javascript中基本类型和引用类型的区别分析

大多数人系统学习过的程序设计语言,在这些语言的学习过程中最早学到的几个要点之一就是值类型和引用类型的区别.下面我们来看一下在 JavaScript 中基本数据类型(Primitive Types)和引用类型(Reference Types)的区别.. 基本类型和引用类型 ECMAScript包含两个不同类型的值:基本类型值和引用类型值.基本类型值指的是简单的数据段:引用类型值指由多个值构成的对象.当我们把变量赋值给一个变量时,解析器首先要做的就是确认这个值是基本类型值还是引用类型值. 常见的五种

简单分析JAVASCRIPT的基本类型和引用类型

由于最近项目当中使用EXTJS这样一种前端框架,所以就离不开JavaScript得使用,所以最近我就在自己研究学习JavaScript,目的是为了方便开发的顺利进行.但是在实际开发当中,我发现JavaScript是一门很简单就能上手的语言,但是真正使用起来我们就会发现他作为一门弱类型的语言,从某种角度来看可能是一个既有趣有强大的功能,但是也是容易出问题的特性. 楼主本人也是处于学习这门语言当中,所以写一篇博客也是为了巩固自己的知识,同时也是为了和大家一起分享我对于学习当中一些大家都用过但是不一定