如何判断 JavaScript 的数据类型?

JavaScript 数据类型一共有 8 种:

undefined、Null、Boolean、String、Symbol、Number、bigint、Object

除了 Object 之外的 7 种属于原始数据类型。

有时,我们还会细分 Object 的类型,比如 Array, Function,Date,RegExp 等

判断方法

typeof

typeof 可以用来区分除了 Null 类型以外的原始数据类型,对象类型的可以从普通对象里面 识别出函数:

typeof undefined // "undefined"typeof null // "object" typeof 1 // "number" typeof "1" // "string" typeof Symbol() // "symbol" typeof function() {} // "function" typeof {} // "object"

问题一:

typeof 不能识别 null,如何识别 null?

答案:如果想要判断是否为 null,可以直接使用===全等运算符来判断(或者使用下面的 Object.prototype.toString 方法):

let a = null
console.log(a === null) // true

问题二:

typeof 作用于未定义的变量,会报错吗?

答案:不会报错,返回"undefined"

typeof randomVariable // "undefined"

问题三:

typeof Number(1) 的返回值是什么?

答案:“number”。注意 Number 和 String 作为普通函数调用的时候,是把参数转化为相 应 的原始数据类型,也就是类似于做一个强制类型转换的操作,而不是默认当做构造函数 调 用。注意和 Array 区分,Array(…)等价于 new Array(…)

typeof Number(1) // "number"
typeof String("1") // "string"
Array(1, 2, 3)
// 等价于
new Array(1, 2, 3)

问题四:

typeof new Number(1) 的返回值是什么?

答案:“object”

typeof new Number(1) // "object"
typeof new String(1) // "object"

instanceof

instanceof 不能用于判断原始数据类型的数据:

3 instanceof Number // false
'3' instanceof String // false
true instanceof Boolean // false

instanceof 可以用来判断对象的类型:

var date = new Date()
date instanceof Date // true var number = new Number()
number instanceof Number // true var string = new String()
string instanceof String // true

需要注意的是,instanceof 的结果并不一定是可靠的,因为在 ECMAScript7 规范中可以通 过自定义 Symbol.hasInstance 方法来覆盖默认行为

Object.prototype.toString

Object.prototype.toString.call(undefined).slice(8, -1) // "Undefined" Object.prototype.toString.call(null).slice(8, -1) // "Null" Object.prototype.toString.call(3).slice(8, -1) // "Number" Object.prototype.toString.call(new Number(3)).slice(8, -1) // "Number" Object.prototype.toString.call(true).slice(8, -1) // "Boolean" Object.prototype.toString.call('3').slice(8, -1) // "String" Object.prototype.toString.call(Symbol()).slice(8, -1) // "Symbol"

由上面的示例可知,该方法没有办法区分数字类型和数字对象类型,同理还有字符串类型 和字符串对象类型、布尔类型和布尔对象类型

另外,ECMAScript7 规范定义了符号 Symbol.toStringTag,你可以通过这个符号自定义 Object.prototype.toString 方法的行为:

'use strict' var number = new Number(3)
number[Symbol.toStringTag] = 'Custom'
Object.prototype.toString.call(number).slice(8, -1) // "Custom" function a () {}
a[Symbol.toStringTag] = 'Custom'
Object.prototype.toString.call(a).slice(8, -1) // "Custom" var array = []
array[Symbol.toStringTag] = 'Custom'
Object.prototype.toString.call(array).slice(8, -1) // "Custom"

因为 Object.prototype.toString 方法可以通过 Symbol.toStringTag 属性来覆盖默认行 为,所以 使用这个方法来判断数据类型也不一定是可靠的

Array.isArray

Array.isArray(value) 可以用来判断 value 是否是数组:

Array.isArray([]) // trueArray.isArray({}) // false (function () {console.log(Array.isArray(arguments))
}()) // false

如何判断 JavaScript 的数据类型?相关推荐

  1. javascript如何判断变量的数据类型

    typeof 用法示例 var arr = []; typeof arr; //'object' typeof(arr); //'object' typeof实际上是一个一元运算符,因此可以用上述代码 ...

  2. JavaScript:数据类型判断的方法

    在JavaScript的基本数据类型中,还有两个特殊的类型:null和undefined,两者在布尔类型下都转义为false,看以下代码: console.log(null == undefined) ...

  3. 如何判断Javascript对象是否存在

    Javascript语言的设计不够严谨,很多地方一不小心就会出错. 举例来说,请考虑以下情况. 现在,我们要判断一个全局对象myObj是否存在,如果不存在,就对它进行声明.用自然语言描述的算法如下: ...

  4. java 反射 判断是否存在_如何判断Javascript对象是否存在

    Javascript语言的设计不够严谨,很多地方一不小心就会出错. 举例来说,请考虑以下情况. 现在,我们要判断一个全局对象myObj是否存在,如果不存在,就对它进行声明.用自然语言描述的算法如下: ...

  5. 深度解析javaScript常见数据类型检查校验

    前言 在JavaScript中,数据类型分为两大类,一种是基础数据类型,另一种则是复杂数据类型,又叫引用数据类型 基础数据类型:数字Number 字符串String 布尔Boolean Null Un ...

  6. js如何判断变量的数据类型

    js六大数据类型:number.string.object.Boolean.null.undefined string: 由单引号或双引号来说明,如"string" number: ...

  7. 自学JavaScript Day03——数据类型

    自学JavaScript Day03--数据类型 简介 判断数据的类型 获取用户的输入 整合前两天的知识,练习一下吧! 关联Day02的知识点 简介 变量中存储的是什么样的数据,那么这个变量就是什么样 ...

  8. JavaScript的数据类型有哪些?

    JavaScript的数据类型有哪些? 基本数据类型:字符串 String.数字 Number.布尔Boolean 复合数据类型:数组 Array.对象 Object 特殊数据类型:Null 空对象. ...

  9. javascript 六种数据类型

    javascript 六种数据类型 js的数据类型和常见隐式转化逻辑. 一.六种数据类型 原始类型(基本类型):按值访问,可以操作保存在变量中实际的值.原始类型汇总中null和undefined比较特 ...

最新文章

  1. VS2010中的调试技巧
  2. 研究生的早期科研之路
  3. 【云计算】云计算从业者导学
  4. django language_第 58 天:Python Web开发 Django 简介
  5. Android Studio运行报错:无法访问XXX......请删除该文件或确保该文件位于正确的类路径子目录中
  6. 白山云科技 CTO 童剑:空降后,如何有技术又有艺术地破局?
  7. 想推翻JAVA的统治? 呵洗洗睡吧
  8. SQL Server数据库原理
  9. replace()替换文字
  10. -pie can only be used when targeting iOS 4.2 or later
  11. 分布式事务之TCC事务
  12. 《微积分:一元函数积分学》——基本积分表
  13. baigoStudio baigoSSO v3.0.1(Use CVE-2019-10015.)
  14. 摩斯密码基础知识介绍
  15. 推荐一款微信小程序《诗词万卷》
  16. 解决can't find -lGL的问题
  17. 看《延禧攻略》学配色与构图
  18. ast自动扣webpack脚本实战
  19. 拼图式拖动滑块的验证——使用selenium+python实现
  20. 最新版本Hadoop面试题

热门文章

  1. uni-app项目-臻品优购APP
  2. Shell介绍及OhMyZsh
  3. 基于ffmpeg的音频转换器pcm转amr(8000HZ)
  4. H5动画制作流程没写完。。。
  5. three 环绕旋转,卫星可以各个角度绕星球旋转
  6. WDL脚本实战(一)-工作流、程序体、语法检查、输入输出及运行
  7. foreman自动化工具安装使用
  8. Web前端中的JavaScript语言基础
  9. ecshop 二次开发基本思想 授之以鱼,不如授人以渔
  10. 冲动是魔鬼—情绪十大格言