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 的不足,提供更全面和准确的数据类型检测。

记录

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/947991.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

高阶数据结构----布隆过滤器和位图

(一)位图 位图是用来存放某种状态的,因为一个bit上只能存0和1所以一般只有两种状态的情况下适合用位图,所以非常适合判断数据在或者不在,而且位图十分节省空间,很适合于海量数据,且容易存储&…

Leetcode 最大正方形

java 实现 class Solution {public int maximalSquare(char[][] matrix) {//处理特殊情况if(matrix null || matrix.length 0 || matrix[0].length 0) return 0;int rows matrix.length;int cols matrix[0].length;int[][] dp new int[rows][cols]; //dp[i][j]的含义是以…

Redis--缓存穿透、击穿、雪崩以及预热问题(面试高频问题!)

缓存穿透、击穿、雪崩以及预热问题 如何解决缓存穿透?方案一:缓存空对象方案二:布隆过滤器什么是布隆过滤器?优缺点 方案三:接口限流 如何解决缓存击穿问题?方案一:分布式锁方案一改进成双重判定…

嵌入式 Linux LED 驱动开发实验

一、Linux 下 LED 灯驱动原理 a)地址映射 在编写驱动之前,我们需要先简单了解一下 MMU 这个神器, MMU 全称叫做 Memory Manage Unit,也就是内存管理单元。在老版本的 Linux 中要求处理器必须有 MMU,但是现在 Linux 内核已经支持无 MMU 的处理器了。 MMU 主要完成的功能如…

网络安全:交换机技术

单播,组播广播 单播(unicast): 是指封包在计算机网络的传输中,目的地址为单一目标的一种传输方式。它是现今网络应用最为广泛,通常所使用的网络协议或服务大多采用单播传输,例如一切基于TCP的协议。组播(multicast): 也叫多播&am…

C# 在PDF中添加和删除水印注释 (Watermark Annotation)

目录 使用工具 C# 在PDF文档中添加水印注释 C# 在PDF文档中删除水印注释 PDF中的水印注释是一种独特的注释类型,它通常以透明的文本或图片形式叠加在页面内容之上,为文档添加标识或信息提示。与传统的静态水印不同,水印注释并不会永久嵌入…

fpga系列 HDL:verilog 常见错误与注意事项 位宽不匹配+case 语句中没有覆盖所有情况

位宽不匹配问题 信号或操作数的位宽不匹配,可能导致仿真或综合错误。 module top (input wire [3:0] a,output wire [7:0] b );assign b a; endmodulecase 语句中没有覆盖所有情况 module top (input wire [1:0] sel,input wire [7:0] a,input wire [7:0] b,in…

groupby 操作的不同参数

groupby 是数据分析中一个非常强大的操作,可以根据指定的规则将数据拆分成多个组,并对每个组进行聚合、转换或过滤等操作。我们逐个解释这些参数的作用,并通过数值举例进行说明。 参数解释 by:分组依据 by 参数指定了分组的依据&…

鸢尾花种类预测--数据集介绍

1.6 案例:鸢尾花种类预测--数据集介绍 学习目标 目标 知道sklearn中获取数据集的方法知道sklearn中对数据集的划分方法 本实验介绍了使用Python进行机器学习的一些基本概念。 在本案例中,将使用K-Nearest Neighbor(KNN)算法对鸢尾…

基于深度学习的视觉检测小项目(二) 环境和框架搭建

一、环境和框架要求 SAM的环境要求: Python>3.7 PyTorch>1.7 torchvision>0.8 YOLO V8的环境要求:YOLO集成在ultralytics库中,ultralytics库的环境要求: Python>3.7 PyTorch>1.10.0 1、确定pytorch版本…

Javascript算法——回溯算法(组合问题)

相关资料来自《代码随想录》,版权归原作者所有,只是学习记录 回溯 回溯模板 void backtracking(参数) {if (终止条件) {存放结果;return;}for (选择:本层集合中元素(树中节点孩子的数量就是集合的大小)) {处理节点…

Java Excel转PDF POI+Itext5

由于现在存在需求,通过Java将数据文本生成特点格式Excel,再输出为PDF。 调研了一些方案,最终决定使用POI写入Excel,再使用Itext5生成PDF。 在网上找了一些Itext的转换工具类,进行了一些改动。 目前市面上 Excel 转 PDF 的组件…

linux nginx maccms管理后台无法进入页面不存在和验证码不显示的问题

windows中运行maccms非常顺利,轻松搭建了。并一切正常。而我在linux中搭建缺遇到了一个非常奇怪的问题。进入管理后台,明明"admin.php"(比如重命名成a.php)的页面是存在的,访问时缺提示页面不存在!稍后就自动跳到首页了…

C# 服务调用RFC函数获取物料信息,并输出生成Excel文件

这个例子是C#服务调用RFC函数,获取物料的信息,并生成Excel文件 上接文章:C#服务 文章目录 创建函数创建结构编写源代码创建批处理文件运行结果-成功部署服务器C#代码配置文件注意!! 创建函数 创建结构 编写源代码 创建…

在 SQL 中,区分 聚合列 和 非聚合列(nonaggregated column)

文章目录 1. 什么是聚合列?2. 什么是非聚合列?3. 在 GROUP BY 查询中的非聚合列问题示例解决方案 4. 为什么 only_full_group_by 要求非聚合列出现在 GROUP BY 中?5. 如何判断一个列是聚合列还是非聚合列?6. 总结 在 SQL 中&#…

Postman测试big-event

报错500。看弹幕,知道可能是yml或sql有问题。 所以检查idea工作台, 直接找UserMapper检查,发现完全OK。 顺着这个error发现可能是sql有问题。因为提示是sql问题,而且是有now()的那个sql。 之后通过给的课件,复制课件…

SpringBoot 2.6 集成es 7.17

引言 在现代应用开发中,Elasticsearch作为一个强大的搜索引擎和分析引擎,已经成为许多项目不可或缺的一部分。Spring Boot作为Java生态中最受欢迎的微服务框架之一,其对Elasticsearch的支持自然也是开发者关注的焦点。本文将详细介绍如何在S…

沙箱模拟支付宝支付3--支付的实现

1 支付流程实现 演示案例 主要参考程序员青戈的视频【支付宝沙箱支付快速集成版】支付宝沙箱支付快速集成版_哔哩哔哩_bilibili 对应的源码在 alipay-demo: 使用支付宝沙箱实现支付功能 - Gitee.com 以下是完整的实现步骤 1.首先导入相关的依赖 <?xml version"1…

自行下载foremos命令

文章目录 问题描述其他小伙伴的成功解决方案&#xff0c;但对我不适用解决思路失败告终 最终解决成功解决思路解决步骤 问题描述 在kali系统终端中输入foremost&#xff0c;显示无此命令 其他小伙伴的成功解决方案&#xff0c;但对我不适用 解决思路 正常来说使用命令 apt-g…

商米电子秤服务插件

概述 SunmiScaleUTS封装商米电子秤服务模块&#xff0c;支持商米旗下S2, S2CC, S2L CC等设备&#xff0c;设备应用于超市、菜市场、水果店等,用于测量商品的重量,帮助实现快捷、准确、公正的交易等一系列商业场景。 功能说明 SDK插件下载 一. 电子秤参数 型号:S2, S2CC, …