IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> 如何判断 JavaScript 的数据类型? -> 正文阅读

[JavaScript知识库]如何判断 JavaScript 的数据类型?

如何判断 JavaScript 的数据类型?

JavaScript 数据类型一共有 7 种:

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

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

有时,我们还会细分 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([]) // true

Array.isArray({}) // false 

(function () {
    console.log(Array.isArray(arguments))
}()) // false
  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-09-07 10:43:35  更:2021-09-07 10:45:51 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 16:29:23-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码