当前位置: 首页 > article >正文

JavaScript的数据类型及检测方式

目录

一、JS数据类型

1.基本数据类型

2.引用数据类型

二、堆和栈

三、数据类型检测

1.typeof

2.instanceof

3.constructor

4.Object.prototype.toString.call()


JavaScript 中的数据类型主要分为两大类:原始数据类型(也称基本数据类型)和引用数据类型。

一、JS数据类型

1.基本数据类型

(1)Undefined未定义

类型只有一个值,即undefined

在使用var声明变量,但未对其加以初始化时,这个变量值就是undefined

(2)Null空对象

类型只有一个值的数据类型,其特殊值就是null

从逻辑角度上看,null是一个空的对象指针,表示一个空值或者没有值。

(3)Boolean

布尔类型,有两个值:truefalse

需要注意的是,布尔类型的字面值truefalse是区分大小写的。

(4)Number

数字类型,有两种表示方法:整数和浮点数。例如:423.14159

整数可以通过十进制、八进制、十六进制的字面值来表示。

浮点数必须包含一个小数点,且小数点后必须有一位数字。

(5)String

字符串类型,用于表示文本数据或字符序列。例如:"Hello, World!"

可以用单引号或双引号来表示,注意成对出现。

(6)Symbol

符号类型是ECMAScript 6版新定义的。

符号类型是唯一的并且是不可修改的,通常用于对象属性的键。例如:Symbol('myKey')

Symbol函数前不能使用new命令,否则会报错。

(7)BigInt

表示任意精度的整数。用于表示大于 2^53 - 1 的整数。例如:123n

2.引用数据类型

(1)Object

对象类型,是一组数据和功能(函数)的集合。它可以包含其他的数据类型(包括原始类型和对象类型),以及方法(函数)。例如:{name: 'Alice', age: 25}

(2)Array

数组类型,表示一个有序的集合。例如:[1, 2, 3]

数组可以使用索引来访问其元素。

(3)Function

函数类型,表示一个可执行的操作。例如:function add(a, b) { return a + b; }

在JavaScript中,函数也是对象,因此它们可以拥有属性和方法。

(4)Date

日期类型,表示日期和时间。例如:new Date()

提供了多种方法来操作和格式化日期和时间。

(5)RegExp(正则表达式)

用于匹配文本的模式,通常用于文本搜索和“查找替换”文本操作。例如:/ab+c/i

在处理字符串和文本时非常有用。

二、堆和栈

栈:原始数据类型

堆:引用数据类型

两种类型的区别在于存储位置的不同:

原始数据类型直接存储在栈中的简单数据段,占据空间小、大小固定,属于被频繁使用数据,所以放入栈中存储;

引用数据类型存储在堆中的对象,占据空间大,大小不固定。

三、数据类型检测

1.typeof

typeof 运算符是用于检测变量数据类型的常用方法。尽管它非常有用,但有一些限制和特殊情况需要注意。

console.log(typeof undefined); // undefined

console.log(typeof 0); // number

console.log(typeof true); // boolean

console.log(typeof "hello"); // string

console.log(typeof Symbol()); // symbol

const bigIntNum = 9007199254740991n;

console.log(typeof bigIntNum); // bigint

function foo() {}

console.log(typeof foo); // function

其中数组、对象、null都会被判断为object,其他判断都正确。

console.log(typeof null); // // object

console.log(typeof []); // object

console.log(typeof {}); // object

2.instanceof

instanceof 运算符用于检测一个对象是否是另一个构造函数的实例。这个运算符非常有用,尤其是在处理对象和数组时,因为 typeof 运算符对它们都返回 "object",这使得 instanceof 成为区分它们的有效工具。但是instanceof只能正确判断引用数据类型,而不判断基本数据类型。

const obj = {};

console.log(obj instanceof Object); // true

const arr = [];

console.log(arr instanceof Array); // true

console.log(2 instanceof Number); // false

3.constructor

constructor有两个作用,一是判断数据的类型,二是对象实例通过constructor对象访问它的构造函数。如果创建一个对象来改变它的原型,constructor就不能用来判断数据类型了。

console.log({}.constructor === Object); // true

console.log([].constructor === Array); // true

console.log(function(){}.constructor === Function); // true

console.log((2).constructor === Number); // true

console.log(('str').constructor === String); // true

// 如果创建一个对象来改变它的原型,constructor就不能用来判断数据类型了。

function myFn(){};

myFn.prototype=new Array();

var f = new myFn();

console.log(f.CONSTRUCTOR===myFn); // false

console.log(f.constructor===Array); // true

4.Object.prototype.toString.call()

Object.prototype.toString.call()使用Object对象的原型方法toSting来判断数据类型。

console.log(Object.prototype.toString.call(42)); // "[object Number]"

console.log(Object.prototype.toString.call("Hello")); // "[object String]" console.log(Object.prototype.toString.call(true)); // "[object Boolean]" console.log(Object.prototype.toString.call({})); // "[object Object]" console.log(Object.prototype.toString.call([])); // "[object Array]" console.log(Object.prototype.toString.call(null)); // "[object Null]" console.log(Object.prototype.toString.call(undefined));// "[object Undefined]"

这些方法可以结合使用,以覆盖 typeof 的不足,提供更全面和准确的数据类型检测。

记录

若文章对你有帮助,点赞、收藏加关注吧!


http://www.kler.cn/a/466307.html

相关文章:

  • 在CodeBlocks搭建SDL2工程构建TFT彩屏模拟器虚拟TFT彩屏幕显示
  • 为什么HTTP请求后面有时带一个sign参数(HTTP请求签名校验)
  • Java虚拟机(Java Virtual Machine,JVM)
  • ChatGPT 主流模型GPT-4/GPT-4o mini的参数规模是多大?
  • 科研绘图系列:R语言科研绘图之标记热图(heatmap)
  • 【情感】程序人生之情感关系中的平等意识(如何经营一段长期稳定的关系 沸羊羊舔狗自查表)
  • git时常混淆的操作的笔记
  • 低代码开发深度剖析:JNPF 如何引领变革
  • 数字PWM直流调速系统设计(论文+源码)
  • Docker 环境中搭建 Redis 哨兵模式集群的步骤与问题解决
  • 常见的九种二极管
  • 代码随想录算法训练营第五十二天|KM101.孤岛的总面积|KM102.沉没孤岛|KM103.水流问题|KM104.建造最大岛屿
  • SQLite简介:轻量级数据库入门
  • 57.在 Vue 3 中使用 OpenLayers 点击选择 Feature 设置特定颜色
  • 断舍离:通往心灵自由的五级阶梯
  • JavaScript系列(4)--数值类型专题
  • js获取下拉单选框的值和显示的值
  • springboot整合Quartz实现定时任务
  • 趣味编程:心形曲线
  • Linux环境(CentOs7) 安装 Node环境
  • 最近学习shader的一些总结
  • npm ERR! ECONNRESET 解决方法
  • Celeborn Spark 集成最新进展
  • 滤波器的主要参数
  • Flutter路由钩子
  • 1月2日作业