JavaScript 系列二:数据类型

快来加入我们吧!

"小和山的菜鸟们",为前端开发者提供技术相关资讯以及系列基础文章。为更好的用户体验,请您移至我们官网小和山的菜鸟们 ( https://xhs-rookies.com/ ) 进行学习,及时获取最新文章。

"Code tailor" ,如果您对我们文章感兴趣、或是想提一些建议,微信关注 “小和山的菜鸟们” 公众号,与我们取的联系,您也可以在微信上观看我们的文章。每一个建议或是赞同都是对我们极大的鼓励!

前言

在开始学习之前,我们想要告诉您的是,本文章是对JavaScript语言知识中**“数据类型”**部分的总结,如果您已掌握下面知识事项,则可跳过此环节直接进入题目练习

  • Boolean 类型
  • null 类型
  • undefined 类型
  • Number 类型
  • String 类型
  • BigInt 类型
  • Symbol 类型
  • Object 类型
  • 数值类型转换

如果您对某些部分有些遗忘,👇🏻 已经为您准备好了!

汇总总结

Boolean 类型

Boolean(布尔值) 类型是 ECMAScript 中使用最频繁的类型之一,有两个字面值:truefalse 。这两个布尔值不同于数值,因此 true 不等于 1false 不等于 0

let xhsFound = true

let xhsLost = false

**注意:**布尔值字面量 truefalse 是区分大小写的(即不能使用 FalseTrue )。

Boolean() 转型函数

该函数可以将一个其他类型的值转换为布尔值。

let message = 'Hello world!'

let messageAsBoolean = Boolean(message) // true

Boolean() 转型函数可以在任意类型的数据上调用,而且始终返回一个布尔值。什么值能转换为 truefalse 的规则取决于数据类型和实际的值。

不同类型与布尔值之间的转换规则
数据类型 转换为 true 的值 转换为 false 的值
Boolean true false
String 非空字符串 “”(空字符串)
Number 非零数值(包括无穷值) 0、NaN(参见后面的相关内容)
Object 任意对象 null
Undefined N/A(不存在) undefined

理解以上转换非常重要,因为像 if 等流控制语句会自动执行其他类型值到布尔值的转换,例如:

let message = 'Hello world!'

if (message) {
   
  console.log('Value is true')
}

在这个例子中,console.log 会输出字符串 "Value is true" ,因为字符串 message 会被自动转换为等价的布尔值 true。由于存在这种自动转换,理解控制语句中使用的是什么变量就非常重要。错误地使用对象而不是布尔值会明显改变应用程序的执行逻辑。

null 类型

null 类型同样只有一个值,即特殊值 null 。逻辑上讲,null 值表示一个空对象指针,这也是给 typeof 传一个 null 会返回 "object" 的原因。

let xhsObject = null

console.log(typeof xhsObject) // "object"

在定义将来要保存对象值的变量时,建议使用 null 来初始化,不要使用其他值。这样,只要检查这个变量的值是不是 null 就可以知道这个变量是否在后来被重新赋予了一个对象的引用。

if (xhsObject != null) {
   
  // xhsNull 是一个对象的引用
}

undefined 值是由 null 值派生而来的,因此 ECMA-262 将它们定义为表面上相等

console.log(null == undefined) // true

用等于操作符(==)比较 nullundefined 始终返回 true 。但要注意,这个操作符会为了比较而转换它的操作数。

即使 nullundefined 有关系,它们的用途也是完全不一样的。永远不必显式地将变量值设置为 undefined 。但 null 不是这样的。任何时候,只要变量要保存对象,而当时又没有那个对象可保存,就要用 null 来填充该变量。这样就可以保持 null 是空对象指针的语义,并进一步将其与 undefined 区分开来。

null 是一个假值。因此,如果需要,可以用更简洁的方式检测它。不过要记住,也有很多其他可能的值同样是假值。所以一定要明确自己想检测的就是 null 这个字面值,而不仅仅是假值。

let xhsMessage = null

let xhsAge

if (xhsMessage) {
   
  // 这个块不会执行
}
if (!xhsMessage) {
   
  // 这个块会执行
}
if (xhsAge) {
   
  // 这个块不会执行
}
if (!xhsAge) {
   
  // 这个块会执行
}

undefined 类型

undefined 类型只有一个值,就是特殊值 undefined 。当使用 varlet 声明了变量但没有初始化时,就相当于给变量赋予了 undefined 值。

let xhsMessage

console.log(xhsMessage == undefined) // true

在这个例子中,变量 xhsMessage 在声明的时候并未初始化。而在比较它和 undefined 的字面值时,两者是相等的。

let xhsMessage = undefined

console.log(xhsMessage == undefined) // true

这里,变量 message 显式地以 undefined 来初始化。但这是不必要的,因为默认情况下,任何未经初始化的变量都会取得 undefined 值。

注意 一般来说,永远不用显式地给某个变量设置 undefined 值。增加这个特殊值的目的就是为了正式明确空对象指针( null )和未初始化变量的区别。

注意,包含 undefined 值的变量跟未定义变量是有区别的。请看下面的例子:

let xhsMessage // 这个变量被声明了,只是值为 undefined

// 确保没有声明过这个变量

// let xhsAge

console.log(xhsMessage) // "undefined"

console.log(xhsAge) // 报错

在上面的例子中,第一个 console.log 会指出变量 message 的值,即 "undefined" 。而第二个 console.log 要输出一个未声明的变量 age 的值,因此会导致报错。对未声明的变量,只能执行一个有用的操作,就是对它调用 typeof 。(对未声明的变量调用 delete 也不会报错,但这个操作没什么用,实际上在严格模式下会抛出错误。)

在对未初始化的变量调用 typeof 时,返回的结果是 "undefined" ,但对未声明的变量调用它时,返回的结果还是 "undefined" ,这就有点让人看不懂了。

let xhsMessage // 这个变量被声明了,只是值为 undefined

// 确保没有声明过这个变量

// let xhsAge

console.log(typeof xhsMessage) // "undefined"

console.log(typeof xhsAge) // "undefined"

无论是声明还是未声明,typeof 返回的都是字符串 "undefined" 。逻辑上讲这是对的,因为虽然严格来讲这两个变量存在根本性差异,但它们都无法执行实际操作。

注意: 即使未初始化的变量会被自动赋予 undefined 值,但我们仍然建议在声明变量的同时进行初始化。这样,当 typeof 返回 "undefined" 时,你就会知道那是因为给定的变量尚未声明,而不是声明了但未初始化。

undefined 是一个假值。因此,如果需要,可以用更简洁的方式检测它。不过要记住,也有很多其他可能的值同样是假值。所以一定要明确自己想检测的就是 undefined 这个字面值,而不仅仅是假值。

let xhsMessage // 这个变量被声明了,只是值为 undefined

// xhsAge 没有声明

if (xhsMessage) {
   
  // 这个块不会执行
}

if (!xhsMessage) {
   
  // 这个块会执行
}

if (xhsAge) {
   
  // 这里会报错
}

Number 类型

Number 类型使用 IEEE 754 格式表示整数和浮点值(在某些语言中也叫双精度值)。

十进制整数
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值