JS基础——JS数据类型

从AMBA到USB:手把手教你评估和选择Synopsys DesignWare里的免费商用IP 本文详细介绍了如何评估和选择Synopsys DesignWare中的免费商用IP,从AMBA到USB等关键模块。通过技术参数核对、验证环境评估和集成注意事项,帮助工程师高效利用这些经过硅验证的商业级IP,提升SoC设计效率。文章还探讨了免费IP与付费IP的边界策略,避免常见陷阱。 阅读详情

JavaScript数据类型是入门的基础知识点,同时也是最为重要的,我们常常在代码中遇到边界数据类型条件判断问题,只有处理好才能让我们的代码更为严谨。

数据类型的种类

JavaScript 是一种弱类型脚本语言,所谓弱类型指的是定义变量时,不需要什么类型,在程序运行过程中会自动判断类型。最新的 ECMAScript 标准定义了 8 种数据类型:包含7种基础数据类型和1种引用类型。
在这里插入图片描述
七种基本数据类型为:

  • 布尔值(Boolean),有 2 个值分别是:true 和 false
  • null , 一个表明 null 值的特殊关键字。 JavaScript 是大小写敏感的,因此 null 与 Null、NULL或变体完全不同
  • undefined ,和 null 一样是一个特殊的关键字,undefined 表示变量未赋值时的属性
  • 数字(Number),整数或浮点数,例如: 42 或者 3.14159
  • 任意精度的整数 (BigInt) ,可以安全地存储和操作大整数,甚至可以超过数字的安全整数限制
  • 字符串(String),字符串是一串表示文本值的字符序列,例如:”Howdy”
  • 代表(Symbol)( 在 ECMAScript 6 中新添加的类型).。一种实例是唯一且不可改变的数据类型

引用数据类型(Object)又分为Array – 数组对象、RegExp – 正则对象、Date – 日期对象、Math – 数学函数、Function – 函数对象等常见类型。

其中基础数据类型存储在栈内存,被引用或拷贝时,会创建一个完全相等的变量。引用类型存储在堆内存,存储的是地址,多个引用指向同一个地址。

数据类型判断

我们日常工作中经常会用到数据类型的检测方法,以下三种检测方法是我们经常用到的。

typeof

typeof 1           //'number'
typeof '1'         //'string'
typeof undefined   //'undefined'
typeof true        //'boolean'
typeof Symbol()    //'symbol'
typeof null        //'object'
typeof []          //'object'
typeof {}          //'object'
typeof /^a/g       //'object'
typeof console     //'object'
typeof console.log //'function'
typeof Array       //'function'
typeof Number      //'function'
typeof Object      //'function'
typeof Math        //'object'
typeof RegExp      //'function'
typeof Date        //'function'

以上输出结果,其中前6种都是基础数据类型,但是最后null的类型为object,它不正确地表明null是一个对象,这是一个错误,而且无法修复,因为它会破坏现有的代码。在 JS 的最初版本中,使用的是 32 位系统,为了性能考虑使用低位存储了变量的类型信息,000 开头代表是对象,然而 null 表示为全零,所以将它错误的判断为 object 。虽然现在的内部类型判断代码已经改变了,但是对于这个 Bug 却是一直流传下来。

引用数据类型中可以看到除了函数像Array、Date等函数判断正确,其他都为object,像数组字面量是无法判断出来的。

instanceof

通过 instanceof 我们能判断这个对象是否是之前那个构造函数生成的对象,这样就基本可以判断出这个新对象的数据类型。比如:

let car = new String('car')
car instanceof String // true

那么instanceof是怎么实现的呢?

function instanceof(left, right) {
    // 这里先用typeof来判断基础数据类型,如果是,直接返回false
    if(typeof left !== 'object' || left === null) return false;
    // 获得类型的原型
    let prototype = right.prototype
    // 获得对象的原型
    left = Object.getPrototypeOf(left);
    // 判断对象的类型是否等于类型的原型
    while (true) {
    	if (left === null)
    		return false
    	if (prototype === left)
    		return true
    	left = Object.getPrototypeof(left);
    }
}

以上可以看出instanceof可以准确地判断复杂引用数据类型,但是不能正确判断基础数据类型,而 typeof 虽然可以判断基础数据类型(null 除外),但是引用数据类型中,除了 function 类型以外,其他的也无法判断。为此这两种写法混写的方式可以去做判断,但是还有一种写法比以上两种更好,就是下面的第三种写法。

Object.prototype.toString

Object的原型有toString方法,调用该方法,可以统一返回格式为 ‘[object Xxx]’ 的字符串,其中 Xxx 就是对象的类型,Xxx第一个首字母要大写(注意:使用 typeof 返回的是小写)。对于 Object 对象,直接调用 toString() 就能返回 [object Object];而对于其他对象,则需要通过 call 来调用,才能返回正确的类型信息,如下所示。

Object.prototype.toString.call({})            // "[object Object]"
Object.prototype.toString.call(1)             // "[object Number]"
Object.prototype.toString.call('1')           // "[object String]"
Object.prototype.toString.call(true)          // "[object Boolean]"
Object.prototype.toString.call(function(){})  // "[object Function]"
Object.prototype.toString.call(null)          // "[object Null]"
Object.prototype.toString.call(undefined)     // "[object Undefined]"
Object.prototype.toString.call(/123/g)        // "[object RegExp]"
Object.prototype.toString.call(new Date())    // "[object Date]"
Object.prototype.toString.call([])            // "[object Array]"
Object.prototype.toString.call(document)      // "[object HTMLDocument]"
Object.prototype.toString.call(window)        // "[object Window]"

实现一个数据类型判断方法是如何编写呢?可以看一下

function getType(obj){
  let type  = typeof obj;
  if (type !== "object") {    
    return type;
  }
  // 对于typeof返回结果是object的,进行如下的判断,正则返回结果
  return Object.prototype.toString.call(obj).replace(/^\[object (\S+)\]$/, '$1'); 
}

getType([])              // "Array" 
getType('123')           // "string" 
getType(window)          // "Window" 
getType(null)            // "Null"
getType(undefined)       // "undefined" 
getType()                // "undefined" 
getType(function(){})    // "function" 
getType(/123/g)          // "RegExp" 

数据类型转换

数据类型转换主要分为强制类型转换和隐式类型转换,其中隐式类型转换最需要重点记忆一下。

强制类型转换

强制类型转换方式包括 Number()、parseInt()、parseFloat()、Boolean()等。

Number() 方法的强制转换规则:

  • 如果是布尔值,true 和 false 分别被转换为 1 和 0。
  • 如果是数字,返回自身。
  • 如果是 null,返回 0。
  • 如果是 undefined,返回 NaN。
  • 如果是字符串,遵循以下规则:如果字符串中只包含数字(或者是 0X / 0x 开头的十六进制数字字符串,允许包含正负号),则将其转换为十进制;如果字符串中包含有效的浮点格式,将其转换为浮点数值;如果是空字符串,将其转换为 0;如果不是以上格式的字符串,均返回 NaN。
  • 如果是 Symbol,抛出错误。
  • 如果是对象,并且部署了 [Symbol.toPrimitive] ,那么调用此方法,否则调用对象的 valueOf() 方法,然后依据前面的规则转换返回的值;如果转换的结果是 NaN ,则调用对象的 toString() 方法,再次依照前面的顺序转换返回对应的值。

parseInt() 方法的强制转换规则:

这个方法的规则是:除了字符串参数的第一个字符为数字返回的结果为数字外,其他都是NAN。

parseFloat()

这个方法的规则和parseInt类似,如果给定值能被解析成浮点数,则返回浮点数。如果给定值不能被转换成数值,则会返回 NAN。

Boolean() 方法的强制转换规则:

这个方法的规则是:除了 undefined、 null、 false、 ”、 0(包括 +0,-0)、 NaN 转换出来是 false,其他都是 true。

隐式类型转换

凡是通过逻辑运算符 (&&、 ||、 !)、运算符 (+、-、*、/)、关系操作符 (>、 <、 <= 、>=)、相等运算符 (==) 或者 if/while 条件的操作,如果遇到两个数据类型不一样的情况,都会出现隐式类型转换。

以“==”和“+”为例重点讲解一下隐式转换的规则。

‘==’ 的隐式类型转换规则:

  • 如果其中一个操作值是 null 或者 undefined,那么另一个操作符必须为 null 或者 undefined,才会返回 true,否则都返回 false。
  • 如果其中一个是 Symbol 类型,那么返回 false。
  • 两个操作值如果为 string 和 number 类型,那么就会将字符串转换为 number。
  • 如果一个操作值是 boolean,那么转换成 number。
  • 如果一个操作值为 object 且另一方为 string、number 或者 symbol,就会把 object 转为原始类型再进行判断(调用 object 的 valueOf/toString 方法进行转换)。

‘+’ 的隐式类型转换规则:

‘+’ 号操作符,不仅可以用作数字相加,还可以用作字符串拼接。仅当 ‘+’ 号两边都是数字时,进行的是加法运算;如果两边都是字符串,则直接拼接,无须进行隐式类型转换。当然除了数字和字符串外,还有一些其他的类型规则,如下所示:

  • 如果其中有一个是字符串,另外一个是 undefined、null 或布尔型,则调用 toString() 方法进行字符串拼接。
  • 如果其中有一个是数字,另外一个是 undefined、null、布尔型或数字,则会将其转换成数字进行加法运算。
  • 如果其中一个是字符串、一个是数字,则按照字符串规则进行拼接。
  • 如果其中有一个是字符串,另外一个是对象的话,对象转换的规则,1、如果部署了 Symbol.toPrimitive 方法,优先调用再返回。2、调用 valueOf(),如果转换为基础类型,则返回。3、调用 toString(),如果转换为基础类型,则返回。4、如果都没有返回基础类型,会报错。

以上就是数据类型部分相关的内容了,作为前端开发人员还是要努力扎实基本功。

OpenClaw常见4大赋能工作场景 OpenClaw不仅仅是一个AI工具,更像是个人与企业的“数字操作系统”——它连接大模型与真实世界,让“思考”与“行动”无缝闭环。 阅读详情

相关推荐

基于opencv-ANN的水果识别模型训练

本文通过opencv-ann-mlp训练模型,实现对五种水果进行分类识别。本文详细介绍该项目的各个过程,包括数据准备、预处理、样本读取、训练数据集制作、训练标签制作、模型参数设置、模型训练,模型测试验证等,总结该过程需要注意的事项。

qq_15985873的博客 3972

JS 的数据类型你了解多少?

数据类型 在ES5的时候,我们认知的数据类型确实是6种:Number、String、Boolean、undefined、object、Null ES6 中新增了一种Symbol:这种类型的对象永不相等,即使创建的时候传入相同的值,可以解决属性名冲突的问题 谷歌67版本中还出现了一种bigInt:是指安全存储、操作大整数 JavaScript 的数据类型最后都会在初始化之后放在不同的内存中,因此上面的数据类型大致可以分成两类来进行存储: 1.基础类型存储在栈内存,被引用或拷贝时,...

醉月听风的博客 584

ESP32-S3 SPI驱动SD卡与FATFS文件系统实践

SPI(串行外设接口)是嵌入式系统中常用的同步串行通信协议,通过主从架构实现全双工通信。其工作原理基于时钟同步和数据线传输,具有接线简单、占用引脚少的优势。在存储扩展场景中,SPI模式可驱动SD卡实现大容量数据存储,配合FATFS文件系统可提供标准化的文件管理能力。ESP32-S3作为乐鑫推出的高性能Wi-Fi/蓝牙双模芯片,其SPI外设支持高达80MHz时钟频率,结合ESP-IDF提供的sdspi_host驱动,开发者能快速实现SD卡存储方案。该技术广泛应用于物联网设备日志存储、传感器数据采集等场景,本实

weixin_29168393的博客 357

js数据类型及数据类型判断方法

js常见数据类型,以及数据类型判断方法

qq_42446479的博客 267

Arduino MLX90393磁力计驱动库:高精度三轴霍尔传感器开发指南

三轴霍尔效应磁力计是嵌入式系统中实现无接触角度检测、电子罗盘与电流传感的核心器件。其工作原理基于霍尔电压随外磁场矢量变化的物理特性,通过I²C接口输出高分辨率(16/20-bit)XYZ轴原始数据,并集成温度补偿与数字滤波功能。技术价值体现在确定性响应、低功耗(典型0.5 μA待机)及强抗干扰能力,适用于电池供电设备与实时操作系统环境。典型应用场景包括电机位置反馈、永磁体旋转角度解算、工业编码器和地磁导航。本库专为Arduino生态优化,深度封装MLX90393寄存器协议与自校准流程,同时兼容STM32、E

weixin_29363791的博客 641

DSSP 工具:蛋白质二级结构信息计算与批量处理教程

DSSP(Dictionary of Secondary Structure in Proteins)是一款经典的蛋白质二级结构计算工具,由荷兰癌症研究所(NKI Research)Perrakis 团队维护。它通过分析蛋白质的 PDB 结构文件,能够自动标注每个氨基酸残基的二级结构类型、相对溶剂可及性(暴露面积)等关键信息,为后续的拓扑图绘制、疏水 / 亲水表面分析、二级结构预测模型训练等提供核心数据支持。

good_rrrrr的博客 1836

JS 8 种 数据类型总结

JS数据类型

m0_61698324的博客 1221

【electron】- 从零到一:在electron-vite项目中集成better-sqlite3的工程化实践

本文详细介绍了在electron-vite项目中集成better-sqlite3数据库的完整工程化实践。针对原生模块的编译挑战,提供了从环境配置、路径规划、服务封装到IPC通信的解决方案,并重点解决了开发与生产环境的数据库路径分离及打包部署等核心问题,帮助开发者构建稳定高效的Electron桌面应用数据层。

weixin_29306571的博客 203

JS基本数据类型

JS 没有字符型(char),JS 的 String 是基本类型!Number(数字)String(字符串)Boolean(布尔)Undefined(未定义)Null(空)Object(对象)Array(数组)Function(函数)RegExp(正则表达式)DateSet 不允许重复,无序的。

m0_74075467的博客 1696

Buck变换器中EA模块的优化设计与稳定性提升策略

本文深入探讨了Buck变换器中误差放大器(EA)模块的核心作用与优化设计。作为系统的“大脑”,EA模块的性能直接决定了电源的稳定性与动态响应。文章详细分析了EA的电路结构、工作原理,并重点阐述了通过优化增益、带宽和相位裕度来提升系统稳定性的策略,同时提供了实用的设计技巧与仿真验证方法。

weixin_29189381的博客 421

GEE数据融合——Landsat (collection 2,level 2 )4、5、7、8、9长时间序列影像数据融合和视频导出分析

长时间序列影像数据融合是指将Landsat影像数据集合2级2(Level 2)中的4、5、7、8和9这五个卫星的数据进行融合。具体来说,这包括将同一地点的多个卫星影像数据进行处理和整合,以产生一个单一的、具有更高质量的影像产品。在长时间序列影像数据融合中,首先需要对不同卫星的影像数据进行校正,以消除不同卫星之间的光谱差异、辐射度问题和几何纠正误差等。然后,通过使用融合算法,将多个卫星的影像数据进行组合,以生成一张全新的、高质量的合成影像。

此星光明博客 1733

js基础:简介、变量与数据类型、流程循环控制语句、数组及其api

1. JavaScript简介:JavaScript是一种常用的脚本语言,用于网页开发,具备强大的跨平台特性。它被用来添加交互性、动态内容以及改善用户体验。 2. 变量与数据类型:变量是用于存储数据的容器,JavaScript中的变量可以存储不同类型的数据,如数字、字符串、布尔值等,JavaScript具有动态类型,变量的类型可以在运行时改变。 3. 流程和循环控制语句:流程控制语句(如if语句、switch语句)和循环语句(如for循环、while循环)用于控制代码的执行流程。 4. 数组和操作的API:

不知道你是通过何种途径访问到这里,总之欢迎来到red velet的博客 400

2026年运维工程师常见面试选择题

这篇文章总结了30道Linux运维面试常见问题及解析,涵盖基础命令、系统监控、故障排查、数据库、缓存、容器编排等多个方面。主要内容包括: 基础命令使用:如df查看磁盘、free查看内存、top监控进程等 系统监控与故障排查:负载判断、端口检查、进程管理等 中间件相关:Nginx状态码、MySQL主从复制、Redis缓存问题 容器技术:Docker优势、Kubernetes作用 运维理念:高可用、监控告警、发布策略、备份容灾 工作原则:故障处理优先级、运维工程师核心能力 文章不仅提供标准答案,还解析了各命令的

不务正业的猿 193

javascript-js语法基础之数据类型

在学习JavaScript之前,应该先明白学习方向。ECMAScript(核心语言规范)、DOM(文档对象模型) 和 BOM(浏览器对象模型)。而这篇文章主要讲解ECMAScript(核心语言规范),即js语法基础。js的变量。

2303_76454687的博客 942

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

JavaScript基础01【简介、js编写位置、基本语法(6种基本数据类型)】

JavaScript基础【js简介、3种输出语句、js编写位置、基本语法、字面量和变量、标识符、6种基本数据类型(1、String 字符串;2、Number 数值;3、Boolean 布尔值;4、Null 空值;5、Undefined 未定义;6、Object 对象)】

upward 5708

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

【JS】——JavaScript数据类型基础

软绵绵

王金龙 1272

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Skr-Eric的Javascript课堂(一)——JS的介绍、常量与变量、基础语法、数据类型

1. JS 组成 1. ECMAScript - JS的核心语法 2. 内置对象 - BOM DOM BOM :Browser Object Model 浏览器对象模型,主要提供 一组操作浏览器的方法 DOM :Document Object Model 文档对象模型,提供一组操作 文档的方法 3. JS 自定义对象 2. JS 引入 1. 元素绑定 将JS代...

Skr_Eric的博客 425

【JavaScript】学习第一天(认识JS、js基础写法、变量、数据类型)

1、认识js 什么是js: HTML:超文本标记语言(网页)-->页面的结构,段落,标题,图片 CSS:层叠样式表(美化)--->美化结构的,排列方式,放的位置 JavaScript:---> 页面的行为(点击按钮会发生什么事,轮播图,游戏。表单验证,回到顶部,楼层,放大镜,tab切换,二级菜单,拖拽,瀑布流。。。) JS的核心: ECMAScipt:制定js语法标准, 我们后期写代码的规范 DOM:Doucment object model

wu12378900的博客 255

JavaScript基础&实战(1)js的基本语法、标识符、数据类型

文章目录1、JavaScript简介2、输出语句2.1 代码块2.2 测试结果3、JS编写位置3.1代码3.2 测试结果4、基本语法4.1 代码5、标识符5.1 代码6、数据类型6.1 代码7、强制类型转换--String7.1 代码 1、JavaScript简介 2、输出语句 2.1 代码块 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title

日常笔记 | 干货分享 | 毕设源码 | 毕设指导 | 答辩指导 969

【JS基础 day01 JavaScript介绍、变量、常量、数据类型、运算符】

了解变量、数据类型、运算符等基础概念,能够实现数据类型的转换,结合四则运算体会如何编程。

Jhaiajsbzksk的博客 2219

JS基础数据类型及转换[javaScript入门]

详细介绍了javaScript的基础数据类型及转换。

m0_46220435的博客 300

JavaScript(一)js 简介 基础语法 数据类型 变量

什么是 JavaScript JavaScript 是一种由 Netscape 的 LiveScript 发展⽽而来的原型化继承的基于对象的动态类型的区分⼤小写的 客户端脚本语言,主要⽬目的是为了了解决服务器端语⾔言,⽐比如 Perl,遗留留的速度问题,为客户提供更更流畅的浏 览效果。 当时服务端需要对数据进行验证,由于⽹网络速度相当缓慢,只有 28.8kbps,验证步骤浪费的时间太多。于是 N...

libufan的博客 766

WEB安全之javascript基础(一):js的引入方法注释变量数据类型

WEB安全之javascript基础(一):js的引入方法注释变量数据类型

weixin_44891093的博客 925

【JavaScript基础】JS中的数据类型

基本数据类型 Js中的基本数据类型有五种:Undefined、Null、Boolean、Number、String 1. Undefined Undefined类型只有undefined一个值,在使用var声明变量但是未进行初始化的时候,该变量的值就是undefined。 2. Null Null类型也同样只有null一个值,表示一个空对象指针。undefined其实也是派生自null值的,但是null和undefined的含义完全不同。 3. Boolean Boolean类型有true和false两个值

VoidD的博客 312

JavaScript基础知识-JS数据类型

JavaScript变量包含两种类型的值:基本类型值和引用类型值.........................................................................................

凭时间赢来的东西,时间肯定会为之作证 12万+

【JavaScript基础】JS数据类型

基本数据类型(String、 Number、Boolean、Null、Undefined)和引用数据类型(Object)

DUMG 160
上一篇: 企业级前端组件建设
下一篇: 企业级npm仓库搭建
全栈大师兄
博客等级 码龄11年 448粉丝 175原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值