JavaScript第一讲 类型

JavaScript第一讲 类型

数据类型

数据类型有两类:原始类型(primitive type)和对象类型(object type)。

其中原始类型包括:

  • 数字
  • 字符串
  • 布尔值
  • null
  • undefined

其中对象类型就是对象:名/值对(key/value),名和值可以是原始值。

如:数字和字符串。如果想要key为布尔值、null或undefined的话,最后都会以字符串的形式给出。

如:

{"null":"hello world!"}

此外,还可以分为可变类型和不可变类型。

其中可变的类型有:对象和数组

不可变的类型有:数字、字符串、布尔值、null和undefiend。

你可能会奇怪,字符串为什么不可变?请看下面例子

let str = "123456";
console.log(str);//123456
str[1] = "3";
console.log(str);//123456

可以访问,但是无法修改。原因会在后面讲到。

数字

在JavaScript中,用一个数字表示整数如:0 1 2

十六进制直接以“0X”或“0x”为前缀来表示,如:oxfa 0Xaa

八进制是以“0”开头的数字,如:012

小数可以表示为:1.1,.22,1.1e3(1100),1.1E3(1100),1.1e-3(0.011)

值得注意的是:

  • JavaScript预定义了全局变量InfinityNaN(not a number),用来表示正无穷大和非数字值。

  • 当运算结果超过JavaScript所能表示的正数或负数的上限后,会以Infinity-Infinity表示,并不会报错。

  • 当运算结果无限接近于零,并比JavaScript所能表示的最小值还小的时候,会返回0。

  • 被零整除也会返回Infinity-Infinity,但是当零除以零的时候是没有意义的会返回NaN

0.3-0.2 不是 0.1,这是浮点数的局限性。

字符串

这部分主要介绍之前的问题,为什么字符串不可变。理由如下:

内存管理

  • 字符串在内存中是被分配为一段固定长度的连续内存区域。如果允许修改字符串的内容,那么每次修改可能都需要重新分配内存和调整长度,这会导致复杂的内存管理问题和性能开销。
  • 通过将字符串设为不可变,JavaScript 避免了这些复杂的内存操作。每次操作字符串时,如果需要“修改”它,JavaScript 会创建一个新的字符串对象,而不是在原有字符串上进行修改。

不可变对象的特性

  • 不可变对象的一个重要特性是线程安全和稳定性。当多个操作同时作用于同一个字符串时,不会有任何冲突或意外的变化,因为字符串不会在内存中被改变。
  • 这种不可变性使得字符串可以被安全地缓存和共享,大大减少了潜在的错误和意外行为。

设计简化

  • 通过将字符串设计为不可变,语言的设计者简化了字符串操作的实现和使用。开发者可以更容易地推断代码的行为,因为字符串的内容一旦设置,就不会在后续代码中被意外修改。

布尔值

对于布尔值,我们需要知道的是有八种为false的情况,有""、±0、undefined、null、NaN、false和0n(ES11引入)。

对于x!=x,仅当x为NaN的时候成立。

null和undefined

null

null为空值,但是对于

typeof null;//为object

它是一个特殊的对象,即“非对象”,也可以理解为数组、字符串和对象是“无值”的。

undefined

对于它,如其含义所示,表示“未定义”。

typeof undefined//undefined

表示它是这个类型的唯一成员。

联系

null == undefined//true 会有强制类型转换
null === undefined//false

如果想要赋值给变量,或者作为参数,最好的还是选择null。可以理解为null是意料之中的“空”,undefined为出乎意料的“空”。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值