首先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); //报错,因为Null不存在 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
 

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

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

    今天又是孟哥解惑. 数组里的元素也是指向内存地址么? 这个要分情况的. 无论a[0],a[2]在什么地方,只要其值是基本类型值,就是值的比较,只要其值是引用类型(对象),就是内存地址的比较. Vue官 ...

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

    前言 我眼中的<javascript高级程序设计> 和<你不知道的javascript>是这样的:如果<javascript高级程序设计>是本教科书的话, < ...

  3. JavaScript中定义变量和存储值的类型判断

    以严谨的语法表示作为前提 首先变量被定义,然后给变量赋予一定的值,变量真正的作用就是存储值 变量的定义和赋值 变量的定义: var a 使用关键字var+变量名表示定义一个变量 a 变量的赋值: va ...

  4. javascript中封装获取样式属性值的兼容方法

    function getStyle(obj, attr) { if (window.getComputedStyle) { return window.getComputedStyle(obj, nu ...

  5. JavaScript基本类型值与引用类型值

    前言 JS变量可以用来保存两种类型的值:基本类型值和引用类型值.基本类型的值源自一下5种基本数据类型:Underfined.Null.Boolean.Number和String. 基本类型值和引用类型 ...

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

    JavaScript变量可以用来保存的两种类型的值:基本类型值和引用类型值. 基本类型值有5种类型:undefined,null,boolean,number,string 引用类型值有两种类型:函数 ...

  7. 【JavaScript】基本类型和引用类型的值、引用类型

    一.前言        接着上一篇继续记笔记 二.内容         动态的属性 var person = new Object(); person.name = "Nicholas&qu ...

  8. Javascript之基本类型和引用类型

    ECMAScript变量可能包含两种不同数据类型的值:基本类型值和引用类型值,基本类型值指的是简单的数据段,而引用类型值指那些可能由多个值构成的对象. 在将一个值赋给变量时,解析器必须确定这个值是基本 ...

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

    基本类型和引用类型 ECMAScript包含两个不同类型的值:基本类型值和引用类型值.基本类型值指的是简单的数据段:引用类型值指由多个值构成的对象.当我们把变量赋值给一个变量时,解析器首先要做的就是确 ...

随机推荐

  1. 添物不花钱学JavaEE(基础篇)-XML

    XML(Extensible Markup Language) XML在日常工作中经常用到,必须有个了解,不过认识一下即可,不要太浪费时间.实际用到 参考图书 <XML入门经典>大而全,不 ...

  2. ****HTML模板资源汇总

    站长素材: http://sc.chinaz.com/tag_moban/HTML.html wordpress模板: http://www.cssmoban.com/wpthemes/ http:/ ...

  3. [bzoj3513][MUTC2013]idiots_FFT

    idiots bzoj-3513 MUTC-2013 题目大意:给定$n$根木棍,问随机选择三根能构成三角形的概率. 注释:$1\le n\le 3\cdot 10^5$,$1\le a_i\le 1 ...

  4. cogs——1001. [WZOI2011 S3] 消息传递

    1001. [WZOI2011 S3] 消息传递 ★★   输入文件:messagew.in   输出文件:messagew.out   简单对比时间限制:1 s   内存限制:128 MB Prob ...

  5. Flink本地安装和创建Flink应用

    本篇文章首发于头条号Flink本地安装和创建Flink应用,欢迎关注我的头条号和微信公众号"大数据技术和人工智能"(微信搜索bigdata_ai_tech)获取更多干货,也欢迎关注 ...

  6. 表单验证的完美解决方案Validform

    具体使用方法参考官网介绍吧,相当的简单: 文档:http://validform.rjboy.cn/document.html demo:http://validform.rjboy.cn/demo. ...

  7. Spring PropertyPlaceholderConfigure 载入配置文件

    在開始这篇博客的主题之前,我们先来了解一下Spring配置文件以及包括的相关内容. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2 ...

  8. Python学习系列之反射

    反射的定义 根据字符串的形式去某个对象中操作成员 根据字符串的形式去某个对象中寻找成员 根据字符串的形式去某个对象中设置成员 根据字符串的形式去某个对象中删除成员 根据字符串的形式去某个对象中判断成员 ...

  9. 详解cisco访问控制列表ACL

    一:访问控制列表概述   ·访问控制列表(ACL)是应用在路由器接口的指令列表.这些指令列表用来告诉路由器哪些数据包可以通过,哪些数据包需要拒绝.   ·工作原理:它读取第三及第四层包头中的信息,如源 ...

  10. android PercentRelativeLayout 支持百分比来设置控件的宽高

    Android 最终官方支持按百分比来设置控件的宽高了. 我们先来看看效果:       看一下布局: PercentRelativeLayout <android.support.percen ...