【犀牛书】JavaScript 类型、值、变量章节读书笔记

news2024/11/27 18:01:23

本文为对《JavaScript权威指南》第三章:类型、值、变量精读的读书笔记,对重点进行了记录以及在一些地方添加了自己的理解。

JavaScript类型可以分为两类:原始类型和对象类型。Javascript的原始类型包括数值、文本字符串(也称字符串)和布尔类型(也称布尔值)。

在Javascript中,任何不是数值、字符串、布尔值、符号、null和undefined的值都是对象。

JavaScript与静态语言的差别在于,函数和类不仅仅是语言的语法,它们本身就是可以被JavaScript程序操作的值。与其他JavaScript非原始值一样,函数和类也是特殊的对象。

在内存管理方面,JavaScript解释器会执行自动垃圾收集。这意味着JavaScript程序员通常不用关心对象或其他值的析构与释放。当一个值无法触达时,或者说当程序无法以任何方式引用到这个值时,解释器就知道这个值以及用不到了,会自动释放它占用的内存(但是Javascript程序呀有时需要留意,不要让某些值在不经意间存续过长时间后仍可触达,从而导致它们无法被回收)。

JavaScript支持面向对象的编程风格。初略地说,这意味着不用定义全局函数去操作不同类型的值,而是由这些类型本身定义操作值的方法。比如说要对数组元素进行排序,不用把数组传给一个sort()函数,而是直接可以调用数组a的sort()方法:a.sort()

在JavaScript中,只有null和undefined是不能调用方法的值。

在实践中,相等操作符==已经被弃用,取而代之的是不会做类型转换的严格相等操作符===。

常量使用const声明,变量使用let声明。JavaScript常量和变量是无类型的(untyped),声明并不会限定要赋何种类型的值。

这一章的内容非常宽泛,设置到了JavaScript如何表示和操作数据的很多基础性细节。


当数值真正出现在JavaScript程序中的时候,就叫做数值字面量(numeric literal)。任何数值字面量前面都可以加上一个减号(-)来将数值变成负值。

比如-11,无需写成 -1*11.

浮点字面量中,可以包含小数点。

也可以使用指数计数法来表示。也就是实数值后面跟一个字母e(或E),跟一个可选的加号或者减号,再跟一个整数指数。

简洁的符号表示为:

【digits】【 . digits】【(E|e)【(+|-)】digits】

也可以用下划线将数值字面量分割,为了更加容易看清数字段。这样子是不会报错的。

例如:let billion = 1_000_000_000;


除了基础的加减乘除取模之外,ES6新增了取幂运算符 **.

注意,JavaScript中的算数在遇到上溢出、下溢出或者被零除时不会发生错误。

Javascript预定义了全局常量Infinity和NaN以应对正无穷和非数值。

1.在数值操作的结果超过最大可表示数值时(上溢出),结果是一个特殊的无穷值 Infinity。同理,负数对应的是负无穷值就是 -Infinity。任何数加减乘除无穷值的结果还是无穷值(只是符号可能相反)。

2.下溢出发送在数值操作的结果比最小可表示数更接近0的情况下。 此时,JavaScript返回0。如果下溢出来自负数,JavaScript返回一个被称为“负零”的特殊值。这个值与常规的零几乎完全无法区分

3.被零除在JavaScript中也不是错误的,只会简单的返回无穷或负无穷。但是!有一个例外:当0除以0时是没有意义的值,这个操作的结果是一个特殊的“非数值”(NaN,NotaNumber).此外,无穷除无穷,负数平方根或者用无法转换为数值的非数值作为算术操作符的操作数,结果也都是NaN

注意,非数值在JavaScript中有一个不同寻常的特性:它与任何值比较都不相等,也不等于自己。

所以我们不可以通过 x === NaN 来判断a是否是非数值,我们需要使用 x!=x或者Number.isNaN(x)来判断。


BigInt

ES2020为JavaScript定义了一种新的数值类型BigInt。

BigInt这个数值类型表示的值是整数。增加这个类型主要是为了表示64位整数。(它的实验不适合加密,因为它们没有考虑防止时序攻击)

BigInt字面量写作一串数字后跟小写字母n。例如1234n。(这里举的一个不太大的BigInt字面量)


日期和时间

let timestamp = Date.now();  //当前时间的时间戳(数值)
let now = new Date();        //当前时间的日期对象
let ms = now.getTime();      //转换为毫秒时间戳
let iso = now.toISOString(); //转换为标准格式的字符串

要在js程序中包含字符串,可以把字符串放到一对匹配的单引号(’)、双引号(“)或者反引号(`)中。其中一种也可以出现在其他两种引号内部(你懂我的意思吧..)

就比如:‘name = "myfrom" '

而使用反引号定界字符串是ES6的特性,允许在字符串字面量中包含或插入js表达式。即表达式插值语法。

我们可以在每行末尾加一个反斜杠(\)从而把字符串字面量写到多行上。租房反斜杠和他后面的行终结符都不属于字符串字面量。(如果要在单引号或者双引号字符串中包含换行符,需要使用字符序列\n)

’two\nlines‘//写在一行但表示两行

如果要将js和html代码混合在一起,最好js和html分别使用不同的引号。


拼接字符串是js的一个内置特性,可以使用标准的全等===和不全等!==操作符比较字符串。

js提供了丰富的操作字符串API。

 注意:js中的字符串是不可修改的。

像replace()和同UpperCase()这样的方法都返回一个新字符串,它们并不会修改调用它们的字符串,这意味着我们需要去接收结果值而不是直接操作。 


 模板字面量

let s = `hello world`

这不仅仅是一种新的字符串字面量语法,因为模板字面量可以包含任意js表达式。

反引号中字符串字面量最终值的计算,涉及了其中包含的所有表达式求值、将这些表达式的值转换为字符串,然后再把这些字符串与反引号中的字面量组合:

let name = "STATICHIT";
let greeting = `Hello ${name}.`; //greeting == "Hello STATICHIT"

(注意好好理解这个例子,反引号中的不是直接字面量,而是需要通过计算和处理得到最终的真实字面量,注释中的即为真实字面量) 

位于 ${和对应的} 之间的内容都被当作js表达式来解释。

模板字面量可以包含任意数量的表达式。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/620738.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

驱动操作控制LED灯

控制LED灯: 驱动如何操作寄存器 rgb_led灯的寄存器是物理地址,在linux内核启动之后, 在使用地址的时候,操作的全是虚拟地址。需要将物理地址 转化为虚拟地址。在驱动代码中操作的虚拟地址就相当于 操作实际的物理地址。 物理地址&…

2023年5月榜单丨飞瓜数据B站UP主排行榜(哔哩哔哩)发布!

飞瓜轻数发布2023年5月飞瓜数据UP主排行榜(B站平台),通过充电数、涨粉数、成长指数三个维度来体现UP主账号成长的情况,为用户提供B站号综合价值的数据参考,根据UP主成长情况用户能够快速找到运营能力强的B站UP主。 飞…

Git—版本管理工具

作用:分布式版本控制 一句话:在开发的过程中用于管理对文件、目录或工程等内容的修改历史,方便查看历史记录,备份以便恢复以前的版本的软件工程技术 官网下载安装:https://git-scm.com/ 命令大全:https://g…

OceanBase 4.1 全面测评及部署流程,看这篇就够了【建议收藏】

背景 测试 OceanBase 对比 MySQL,TiDB 的性能表现,数据存储压缩,探索多点内部项目一个数据库场景落地 Oceanbase(MySQL->OceanBase)。 单机测试 准备 OBD 方式部署单机 文件准备 wget https://obbusiness-pri…

Bilinear CNN:细粒度图像分类网络,对Bilinear CNN中矩阵外积的解释。

文章目录 一、Bilinear CNN 的网络结构二、矩阵外积(outer product)2.1 外积的计算方式2.2 外积的作用 三、PyTorch 网络代码实现 细粒度图像分类(fine-grained image recognition)的目的是区分类别的子类,如判别一只狗…

【web自动化测试】Web网页测试针对性的流程解析

前言 测试行业现在70%是以手工测试为主,那么只有20%是自动化测试,剩下的10%是性能测试。 有人可能会说,我现在做手工,我为什么要学自动化呢?我去学性能更好性能的人更少? 其实,性能的要求比自动…

蓝桥杯2022年第十三届决赛真题-齿轮

题目描述 这天,小明在组装齿轮。 他一共有 n 个齿轮,第 i 个齿轮的半径为 ri,他需要把这 n 个齿轮按一定顺序从左到右组装起来,这样最左边的齿轮转起来之后,可以传递到最右边的齿轮,并且这些齿轮能够起到提…

小程序容器与PWA是一回事吗?

PWA代表“渐进式网络应用”(Progressive Web Application)。它是一种结合了网页和移动应用程序功能的技术概念。PWA旨在提供类似于原生应用程序的用户体验,包括离线访问、推送通知、后台同步等功能,同时又具有网页的优势&#xff…

软件验收测试该怎么进行?权威的软件检测机构应该具备哪些资质?

软件测试是软件开发周期中非常重要的一个环节。软件测试的目的是发现软件在不同环境下的各种问题,保证软件在发布前能够达到用户的要求。软件验收测试是软件测试的最后一个环节,该环节主要验证软件是否满足用户需求。那么对于软件验收测试,该…

分布式事务二 Seata使用及其原理剖析

一 Seata 是什么 Seata 介绍 Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。AT模式是阿里首推的模式,阿里云上有商用版本…

【Spring源码】Spring源码导入Idea

1.基础环境准备 相关软件、依赖的版本号 Spring源码版本 5.3.x软件 ideaIU-2021.1.2.exeGradle gradle-7.2-bin.zip https://services.gradle.org/distributions/gradle-7.2-bin.zip - 网上说要单独下载gradle并配置环境变量,亲测当前5.3.X版本通过gradlew的方式进…

虚函数详解及应用场景

目录 概述1. 虚函数概述2. 虚函数的声明与重写3. 析构函数与虚函数的关系4. 虚函数的应用场景4.1. 多态性4.2. 接口定义与实现分离4.3. 运行时类型识别4.4. 多级继承与虚函数覆盖 结论 概述 虚函数是C中一种实现多态性的重要机制,它允许在基类中声明一个函数为虚函…

PDCCH monitoring capability

欢迎关注同名微信公众号“modem协议笔记”。 前段时间看search space set group (SSSG) switching相关内容时,注意到R17和R16的描述由于PDCCH monitoring capability的变化,内容有些不一样。于是就顺带看了下R16 R17PDCCH monitoring capability的内容。…

Domino 14.0早期测试版本

大家好,才是真的好。 本篇是超级图片篇,图片多,内容丰富,流量党请勿手残。 前天我们说到Engageug2023正在如火如荼进行,主题是“The Future is Now”。 因为时差的关系,实际上在写这篇公众号时&#xff…

设计模式(七):结构型之适配器模式

设计模式系列文章 设计模式(一):创建型之单例模式 设计模式(二、三):创建型之工厂方法和抽象工厂模式 设计模式(四):创建型之原型模式 设计模式(五):创建型之建造者模式 设计模式(六):结构型之代理模式 设计模式…

Java --- springboot3之web内容协商原理

一、内容协商原理 HttpMessageConverter 定制 HttpMessageConverter 来实现多端内容协商 编写WebMvcConfigurer提供的configureMessageConverters底层,修改底层的MessageConverter ResponseBody由HttpMessageConverter处理 标注了ResponseBody的返回值 将会由支持它…

蹭个高考热度,中国人民大学与加拿大女王大学金融硕士项目给你更多的选择

今日各大平台热搜都被“高考”霸屏,朋友圈里到处都是高考的祝福。期待莘莘学子都将交上满意的答卷,考出理想的未来。针对职场上的我们而言高考已是过去时,但知识的力量却是无穷的,在职的我们依然可以向上生长,中国人民…

FreeRTOS_任务相关API函数

目录 1. 任务创建和删除 API 函数 1.1 函数 xTaskCreate() 1.2 函数 xTaskCreateStatic() 1.3 函数 xTaskCreateRestricted() 1.4 函数 vTaskDelete() 2. 任务创建和删除实验(动态方法) 2.1 实验程序与分析 3. 任务创建和删除实验(静…

ZC-CLS381RGB颜色识别——配置寄存器组(上)

文章目录 前言一、ZC-CLS381RGB简介二、配置寄存器组1.主控寄存器2.检测速率寄存器2.增益寄存器2.颜色数据寄存器 三、状态转移图和信号波形图绘制总结 前言 在现代工业生产中,颜色识别技术已经成为了一个非常重要的技术。颜色识别可以用于产品质量检测、物料分类、…

特瑞仕|常见电子元器件的故障现象及原因详解

​电子元器件是现代电子设备中不可或缺的组成部分,但在长时间的使用过程中,它们也可能会出现各种故障现象。本文将详细介绍一些常见电子元器件的故障现象及原因,以帮助读者更好地理解和处理这些问题。 一、电阻器 故障现象:电阻值…