初学者跪着学JavaScript Day5 : 资料型别:Primitive values 和 Non-primitive values

一日客家话:月饼 捏ㄅ一ㄤˇngied5biang31

今日学习

  • primitives 是不可变

  • non-primitives 是可变的

  • 他们记忆体的值到底存啥?

  • 为何mdn Primitive values 上写 no methods 但 string 有方法可以使用?


JavaScript 资料型别分两种:Primitive valuesNon-primitive

1. primitive 基本型别

mdn:

a primitive (primitive value, primitive data type) is data that is not an object and has no methods.

Q:为何 mdn 上写 no methods 但 string 有方法可以使用?(先跳过,待会再来讨论)

primitive 是 immutable 不可以改变的

  1. Number — 整数、浮点数

  2. String — 字串

  3. Boolean — true or false

又有特殊型别

  1. Null

  2. Undefined

  3. Symbol(ES6新增)

  4. BigInt

说说 null 奇怪的地方

使用 typeof 可以检查型别,当使用 typeof null 时会回传 object

浏览器图示:


2. Non-primitives 又称Reference Types/Object type

Non-primitives 是 mutable 可以改变的

primitives之外就是object型别

  • objects

  • arrays

  • functions

可以更改物件的特性和阵列的元素


3. non-PrimitivesPrimitive values记忆体的值到底存啥?

  • primitive:存值, 是by value,当比较时只要是相同值才会视为相同

  • object 型别:值是存reference参照(在heap的记忆体位置)

    所以物件比较即使拥有相同的特性和值,两个物件仍不相同,一个存值一个存记忆体位址


4.说说nullundefined

1.null

  • 可以代表没有物件

  • 可以代表没有值

typeof 是object(特别)

null 是自己型别的唯一成员

null 能代表数字和字串,指的是no value

2.undefined

表示尚未初始化变数的值

是 global object


Q:为何mdn Primitive values 上写 no methods 但 string 有方法可以使用

是不是偷偷做了什麽事?

let myString = 'apple';
console.log(myString.replace('a','ooo'))//ooopple

因为有基本型别包裹器 (Primitive Wrapper)

以下型别会有基本型别包裹器

  • String for the string primitive.
  • Number for the number primitive.
  • BigInt for the bigint primitive.
  • Boolean for the boolean primitive.
  • Symbol for the symbol primitive.

当企图使用 primitive 的 property 会短暂的创建 wrapper object


简单介绍wrapper object

型别会自动转型(隐含的转型)为物件型别 :StringNumberBigIntBooleanSymbol

意思是:在执行属性、方法会使用 new 关键字来建构函式


第一句:
let myString = 'apple';

当执行第二句:
console.log(myString.length);

要执行myString.length!!! 那就要使用new啦

流程:

  1. new 关键字:let myString = new String('apple')

  2. myString此刻是物件,可以存取属性、方法!!

  3. 可以执行console.log(myString.length);

  4. 执行结束再转回基本型别

今日学习到这里~下跪一鞠躬

资料参考:
Mutability Vs Immutability In JavaScript
重新认识 JavaScript: Day 23 基本型别包裹器 Primitive Wrapper
mdn
JavaScript大全
JavaScript # 11 — 基本型别包裹器 (Primitive Wrapper) 、建构式 (Constructor)
create a temporary wrapper object


<<:  Day12 同步状态控制 Synchronizer

>>:  [13th][Day12] docker commit

[Day1] 资讯安全是什麽?

第一天,想笔记下我对资讯安全的理解。 资讯安全怎麽来的? 我印象里的历史战争剧中,国家或两个阵营打仗...

万事真能从影片完整复制学习吗?(厨艺篇)

如果你正在为水电或3C故障而苦恼,也许照着影片操作,是可以完成修复,但网路影片并非每一样技术都可以直...

Day.14 Crash Recovery- InnoDB 架构 -> MYSQL 二阶段提交(2PC) _2

有关於实际业务上对於数据要求的重要性,以下参数设定的写入策略搭配会对性能与安全度产生不同的影响。 ...

[Day 50] 留言板後台及前台(六) - 前端显示资料

昨天我们已经把资料写进去了, 今天要开始显示留言板了, 但是首先我们需要抓使用者的图片, 所以要先在...

Day29-Alpine.js vs Vue.js浅谈(5)

今天要比较的是「属性绑定」, Alpine.js使用的是x-bind:属性=""...