JavaScript 进阶实战课
石川
JavaScript Patterns and Anti-Patterns 等开源项目创建者,O'Reilly 技术评审
15066 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 47 讲
开篇词 (1讲)
JavaScript 进阶实战课
15
15
1.0x
00:00/00:00
登录|注册

10|JS有哪8种数据类型,你需要注意什么?

你好,我是石川。
JavaScript 的数据类型看上去不难理解,但是你确定真的理解并且会用它们吗?实际上,如果不系统地理解数据类型的概念,很可能会导致一些隐藏问题时不时地冒出来,给我们写的程序挖坑。比如简单的加法计算可能就会带来意想不到的结果值;或者没有很好地利用到 JS 的一些长处,让开发更便捷,比如说通过内置的包装对象快速获取值的属性。
在正式开始之前,我还是要先说明一下,虽然现在 JS 介绍数据类型的书和资料不在少数,我们也不会在这里做理论赘述。但我还是会先带你快速建立起对值的基本认识框架,然后通过对问题的深入了解,以此达成扬长避短的目标。
那么,JavaScript 当中有几种类型的值呢?答案是 8 种。如果再归归类,我们还可以把它们分为两大类,分别是原始类型(Primitive Type)对象类型(Object Type)
其中,原始数据类型包含了数字、布尔、字符串、BigInt、null、undefined,以及后来新增的 symbol,这个数据类型的值都是不可变的(immutable)。
对象数据类型则包含我们经常说的对象,对象的值是可变的(mutable)。它是一个大类,如果再细分,它又包含了我们常用的数组(array)、函数(function)、Date、RegExp,以及后来新增的 Map 和 Set。没错,我们经常用的数组、函数作为值都属于对象数据类型
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

JavaScript数据类型包括8种,分为原始类型和对象类型。原始类型有数字、布尔、字符串、BigInt、null、undefined和symbol,对象类型包括对象、数组、函数、Date、RegExp、Map和Set。本文深入讨论了原始类型的一些问题,如浮点数计算精度丢失、NaN的特性以及字符串的长度获取方式。对于浮点数,文章解释了采用科学计数法表示和二进制浮点数算术标准导致的精度丢失。此外,文章还介绍了NaN的特性和字符串的长度获取方式。在对象类型方面,文章讨论了基于对象创建的实例instanceOf返回错误的问题,以及如何识别一个数组。另外,文章还涉及了函数的声明式和表达式写法,以及类型之间的转换。通过深入讨论JavaScript数据类型的问题,本文帮助读者更好地理解JavaScript的数据类型及其使用方法。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《JavaScript 进阶实战课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(7)

  • 最新
  • 精选
  • AbyssKR
    原始类型是不可改变的,下面的示例代码: var str = 'hello'; str.toUpperCase; // 应该是 str.toUpperCase();

    作者回复: 谢谢指正!已经修改了。

    2022-11-17归属地:海南
  • Silence
    对象类型的图有问题,Symbol 没有构造函数,new 的话会报 Symbol is not a constructor

    作者回复: 图里没有new吧,Symbol也是一个constructor。https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/Symbol。不过提醒大家用Symbol()的时候不要加new,这是一个好的点,值得注意,谢谢提出。

    2022-10-27归属地:北京
  • 英雄各有见
    看过某位大佬的博客,定义undefined严格意义上要使用 void 0 好些,undefined不是关键字是window对象的一个属性,可以赋值的...

    作者回复: 这是很好的一个点,但是从ES5开始,window的undefined就不能赋值了。 如果要避免本地变量用undefined命名的话,可以用ESLint rule no-undefined来避免。 很多前端的minify工具也可以在优化时做到void 0。考虑到代码还是给其它程序员读的,建议可以用undefined,把void 0的转换交给优化工具来处理。

    2022-10-25归属地:北京
    4
  • Geek_003168
    一般原始类型就很少用构造函数创建。 字面量创建的对象都是一次性的,创建同类的对象需要多次创建,自定义构造函数可以实现同类的只用定义一次就好了,降低了代码冗余度。
    2022-10-13归属地:北京
    1
  • 海马
    函数声明式写法部分有笔误:function a = {}
    2023-02-22归属地:北京
  • Hello,Tomrrow
    原始类型,我们通过更习惯使用功能字面量的形式来创建(除symbol外),主要是考虑到编码习惯;数组和对象,更多的使用的也是字面量形式,简洁清晰。
    2022-10-20归属地:上海
  • 天择
    以对象为例,字面量的方式可以一次性初始化很多字段,包括复杂字段和函数,前提是要了解对象的定义和结构;而contructor则依赖定义时的参数,如果参数不够,则需要显式地通过赋值或者方法初始化。不过constructor的方式可以做一些额外的工作,能做的事情不局限于字段初始化,字面量的方式无能为力。
    2022-10-14归属地:新加坡
收起评论
显示
设置
留言
7
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部