细读 JS | 数据类型详解

发布于 2023-05-13 22:44:26 字数 2186 浏览 47 评论 0

今天又又又...又整理了一下,那些 JavaScript 里不清不楚的知识点。

一、数据类型的分类

截止发文日期,ECMAScript 标准的数据类型仅有 8 种(ECMAScript Language Types)。可以分为两类:

  • 原始类型(Primitives),我们也称作基本数据类型
    • Undefined
    • Null(一种特殊的原始类型,typeof(instance) === 'object'
    • Boolean
    • String
    • Symbol(typeof(instance) === 'symbol'
    • Number
    • BigInt(typeof(instance) === 'bigint'
  • 引用类型(Objects)
    • Object(包括从 Object 派生出来的结构类型,如 Object、Array、Map、Set、Date 等)

关于使用 typeof 判断以上数据类型的话题,老生常谈了。例如,为什么 typeof null === 'object'typeof(() => {}) === 'function' 呢?这里不展开赘述了,请移步:JavaScript 的迷惑行为大赏

原始类型的比较的是值,只有两者的值相等,那么它们被认为是相等的,否则不相等。而引用类型比较的是地址,当两者的标识符同时指向内存的同一个地址,则被认为是相等的,否则不相等。

console.log({} == {}) // false
console.log([] == []) // false

二、原始类型与原始值

所有基本类型的值(即原始值,Primitive Values)都是不可改变(immutable)的,而且不含任何属性和方法的。

到这里可能会有小伙伴打问号了???

Q1:原始类型与原始值有什么区别?

原始类型的值称为原始值。例如原始类型 Boolean 有两个(原始)值 truefalse。同样的原始类型 Undefined(Null),只有一个原始值 undefinednull)。其他的就有很多个了...

Q2:原始值不可改变?这样不是改变了吗?

var foo = true
foo = false
console.log(foo) // false

其实不然,以上示例是原始类型和一个赋值为原始类型的变量的区别。变量会被赋予一个新值,而原值不能像数组、对象以及函数那样被改变。

基本类型值可以被替换,但不能被改变。

// 使用字符串方法不会改变一个字符串
var foo = 'foo'
foo.toUpperCase()
console.log(foo) // "foo"

// 赋值行为可以给基本类型一个新值,而不是改变它
foo = foo.toUpperCase() // "FOO"

再有示例:

var num = 1

function add(num) {
  num += 1
  console.log(num)
}

add(num) // 2
console.log(num) // 1

// ************************** 华丽的分割线 **************************

// 如果没有看上面的一些概念,单纯地看上面的例子,我相信百分百都能得到正确答案。
// 但看完上面一些的概念之后,再结合例子,不知道会不会有人对 “原始类型的值不可改变” 这句话产生怀疑?
// 如果有怀疑就继续往下看 

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

烈酒灼喉

暂无简介

0 文章
0 评论
22 人气
更多

推荐作者

亽野灬性zι浪

文章 0 评论 0

少年亿悲伤

文章 0 评论 0

南七夏

文章 0 评论 0

qq_EJoXxu

文章 0 评论 0

17780639550

文章 0 评论 0

萌逼全场

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文