《每天十分钟》-红宝书第4版-语言基础-数据类型(一)

这篇具有很好参考价值的文章主要介绍了《每天十分钟》-红宝书第4版-语言基础-数据类型(一)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

关于ECMAScript 数据类型,“非常6+1”
6:六种简单数据类型(也称为原始类型)
Undefined
Null
Boolean
Number
String
Symbol(ES6新增)
1:一种复杂数据类型
Object

使用 typeof 操作符 (注意是操作符)可以判断一个变量的数据类型
"undefined"表示值未定义;
"boolean"表示值为布尔值;
"string"表示值为字符串;
"number"表示值为数值;
"object"表示值为对象(而不是函数)或 null;
"function"表示值为函数(可以理解为特殊的对象,有特殊的属性);
"symbol"表示值为符号。

注意:调用 typeof null 返回的是"object"。这是因为特殊值 null 被认为是一个对空对象的引用。
严格来讲,函数在 ECMAScript 中被认为是对象,并不代表一种数据类型。可是,函数也有自己特殊的属性。为此,就有必要通过 typeof 操作符来区分函数和其他对象

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

let hello;
console.log(hello == undefined); // true

注意声明未赋值和未声明的区别

let message; // 这个变量被声明了,只是值为 undefined
// age 没有声明
if (message) {
// 这个块不会执行
}
if (!message) {
// 这个块会执行
}
if (age) {
// 这里会报错
}

Null 类型同样只有一个特殊值 null。null 值表示一个空对象指针所以typeof 传一个 null 会返回"object"
undefined 值是由 null 值派生而来的,因此 ECMA-262 将它们定义为表面上相等,如下面的例子所示:

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

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

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

Boolean(布尔值)类型是 两个字面值:true 和 false。
这两个布尔值不同于数值,因此 true 不等于 1,false 不等于 0。但仍然和上面 null 和 undefined 使用 == 操作符时 会自动转换操作数,比如

console.log(true == 1 );// true

Number 类型 内容就比较多了
先看一下整数部分
十进制

let intNum = 36; // 整数

八进制

let octalNum1 = 070; // 八进制的 56
let octalNum2 = 079; // 无效的八进制值,当成 79 处理
let octalNum3 = 08; // 无效的八进制值,当成 8 处理

十六进制

let hexNum1 = 0xA; // 十六进制 10
let hexNum2 = 0x1f; // 十六进制 31
let hexNum3 = 0xG; //Uncaught SyntaxError: Invalid or unexpected token

再看一下浮点数

let floatNum1 = 1.; // 小数点后面没有数字,当成整数 1 处理
let floatNum2 = 10.0; // 小数点后面是零,当成整数 10 处理
let floatNum1 = 1.1;
let floatNum2 = 0.1;
let floatNum3 = .1; // 有效,但不推荐
// 科学计数法小写的字母 e,再加上一个要乘的 10 的多少次幂
let floatNum = 3.125e7; // 等于 31250000

默认情况下,ECMAScript 会将小数点后至少包含 6 个零的浮点值转换为科学记数法(例如,0.000 000 3 会被转换为 3e-7)。
又要提到面试中经常被问到的问题了
问:你好,同学,0.1 + 0.2 为什么不等于0.3
答:JS 浮点值的精确度最高可达 17 位小数,0.1的二进制表示的是一个无限循环小数,JS对这个小数的二进制进行截取前17位,截取之后0.1不再是0.1,截取之后0.1变成了 0.100…001,0.2变成0.200…002。所以两者相加变成了 0.300…004

注意 之所以存在这种舍入错误,是因为使用了 IEEE 754 数值,这种错误并非 ECMAScript 所独有。其他使用相同格式的语言也有这个问题。

值得范围

Number.MIN_VALUE // 5e-324 
Number.MAX_VALUE // 1.797 693 134 862 315 7e+308。
Number.MAX_SAFE_INTEGER // 整数安全最大值
Number.MAX_SAFE_INTEGER // 整数安全最小值
Math.pow(2, 53) === Math.pow(2, 53) + 1 // true

超出范围数值会被自动转换为一个特殊的 Infinity(无穷)值。任何无法表示的负数以-Infinity(负无穷大)表示,任何无法表示的正数以 Infinity(正无穷大)表示。
对应得也有两个常量

 Number.NEGATIVE_INFINITY  // -Infinity
 Number.POSITIVE_INFINITY  //Infinity

NaN
但在 ECMAScript 中,0、+0 或-0 相除会返回 NaN:

console.log(0/0); // NaN
console.log(-0/+0); // NaN

如果分子是非 0 值,分母是有符号 0 或无符号 0,则会返回 Infinity 或-Infinity:

console.log(5/0); // Infinity
console.log(5/-0); // -Infinit
// NaN 不等于包括 NaN 在内的任何值。例如,下面的比较操作会返回 false:
console.log(NaN == NaN); // false
console.log(isNaN(NaN)); // true
console.log(isNaN(10)); // false,10 是数值
console.log(isNaN("10")); // false,可以转换为数值 10
console.log(isNaN("blue")); // true,不可以转换为数值
console.log(isNaN(true)); // false,可以转换为数值 1

内容有点多,先欣赏个名句,以后接着搞
观书有感
朱熹 南宋
半亩方塘一鉴开,
天光云影共徘徊。
问渠那得清如许?
为有源头活水来。文章来源地址https://www.toymoban.com/news/detail-540909.html

到了这里,关于《每天十分钟》-红宝书第4版-语言基础-数据类型(一)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 十分钟掌握Java本地缓存

    —————————— Yesterday is history, tomorrow is a mystery, but today is a gift. That is why it’s called the present. —————————— 缓存是Java开发中经常用到的组件,我们会使用缓存来存储一些 不经常改变 的 热点 数据,提高系统处理效率,其根本原因在于内存和硬盘读写速度的

    2024年02月05日
    浏览(68)
  • Django入门,十分钟学会登录网页

    我们假定你已经阅读了 安装 Django。你能知道 Django 已被安装,且安装的是哪个版本,通过在命令提示行输入命令 cmd黑窗口运行,不懂cmd百度一下 如果这是你第一次使用 Django 的话,你需要一些初始化设置。也就是说,你需要用一些自动生成的代码配置一个 Django project ——

    2024年01月24日
    浏览(70)
  • 十分钟理解回归测试(Regression Testing)

    回归测试是一个系统的质量控制过程,用于验证最近对软件的更改或更新是否无意中引入了新错误或对以前的功能方面产生了负面影响(比如你在家中安装了新的空调系统,发现虽然新的空调系统可以按预期工作,但是本来亮的等却不亮了)。其主要目标是确保旨在改进的修

    2024年02月05日
    浏览(82)
  • 十分钟python入门 正则表达式

    正则常见的三种功能,它们分别是:校验数据的有效性、查找符合要求的文本以及对文本进行切割和替换等操作。 所谓元字符就是指那些在正则表达式中具有特殊意义的专用字符 元字符大致分成这几类:表示单个特殊字符的,表示空白符的,表示某个范围的,表示次数的量

    2024年02月13日
    浏览(58)
  • 十分钟玩转3D绘图:WxGL完全手册

    WxGL是一个基于PyOpenGL的跨平台三维数据快速可视化工具包,提供类似Matplotlib风格的应用方式。WxGL也可以集成到wxPython或PyQt6中实现更多的功能和控制。 WxGL提供了一套简洁易用、对用户友好的API,将OpenGL的复杂概念封装起来,使得用户可以更加专注于数据的处理,而无需在3

    2024年01月22日
    浏览(74)
  • 十分钟掌握 Vim 编辑器核心功能

    👉相信不论是前端还是后台多多少少都需要上到服务器上做一些操作,改改配置文件等,大多数 Linux 服务器默认都安装了 Vim 文本编辑器,因此如果还不会 Vim 的话,可能会被同事“耻笑”。 👉如果本文对你有所帮助,请点个👍 吧。 Vim是什么? Vim 是从 vi 发展出来的一个

    2024年02月16日
    浏览(63)
  • 十分钟读懂Stable Diffusion运行原理

    AIGC 热潮正猛烈地席卷开来,可以说 Stable Diffusion 开源发布把 AI 图像生成提高了全新高度,特别是 ControlNet 和 T2I-Adapter 控制模块的提出进一步提高生成可控性,也在逐渐改变一部分行业的生产模式。惊艳其出色表现,也不禁好奇其背后技术。本文整理了一些学习过程中记录的

    2024年02月09日
    浏览(71)
  • 十分钟实现 Android Camera2 视频录制

    因为工作中要使用 Android Camera2 API ,但因为 Camera2 比较复杂,网上资料也比较乱,有一定入门门槛,所以花了几天时间系统研究了下,并在 CSDN 上记录了下,希望能帮助到更多的小伙伴。 上两篇文章使用 Camera2 实现了相机预览和拍照的功能,这篇文章我们接着上文,来实现

    2024年02月11日
    浏览(53)
  • 十分钟实现 Android Camera2 相机拍照

    因为工作中要使用 Android Camera2 API ,但因为 Camera2 比较复杂,网上资料也比较乱,有一定入门门槛,所以花了几天时间系统研究了下,并在 CSDN 上记录了下,希望能帮助到更多的小伙伴。 上篇文章 我们使用 Camera2 实现了相机预览的功能,这篇文章我们接着上文,来实现 Cam

    2024年02月11日
    浏览(68)
  • 十分钟实现 Android Camera2 相机预览

    因为工作中要使用 Android Camera2 API ,但因为 Camera2 比较复杂,网上资料也比较乱,有一定入门门槛,所以花了几天时间系统研究了下,并在 CSDN 上记录了下,希望能帮助到更多的小伙伴。 Camera2 API 的包名是 android.hardware.camera2 ,是 Android 5.0 后推出的一套调用摄像头设备的接口

    2024年02月13日
    浏览(74)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包