JS权威指南笔记

第一章:

字符编码:
1 byte = 8 bit
ASCII编码,1字节;
Unicode编码:2字节(原先ASCII编码只需在前一个字节补0);
UTF-8编码:1~6字节,为了节省空间;
计算机内存中统一使用 Unicode编码,保存到硬盘以及传输时转换 UTF-8;
eg:文件存储在硬盘时为UTF-8编码,读取到内存时 从UTF-8编码 转换为 Unicode编码,修改完保存后再由 Unicode编码 转换为 UTF-8编码存储到硬盘;
eg:服务器动态生成Unicode编码内容,转换为 UTF-8 传输给客户端;
ASCII编码最早只有大小写英文字母、数字和一些符号,不能表示其他国家的一些文字符号,各国有各国的编码标准,这导致多语言混合文本出现乱码,为了解决这一问题,Unicode把所有语言统一到一套编码里(秦皇统一文字……);
UTF-8根据Unicode字符的数字大小,用1~6个字节表示,原先的ASCII编码字符在UTF-8里是一致的,当你用英文编写文章,Unicode编码下假设需要200kb,在UTF-8编码下只需要100kb;
原先在ASCII编码里的字符可以直接在前面补上一个全为0的字符得到Unicode字符编码;

Unicode转义序列:
因某些计算机硬件和软件无法显示、输入或正确处理全部 Unicode 字符(可能是年代比较久远的老机子老软件)。为方便程序员编码和支持这部分老机子,JS定义了转义序列,用 ASCII 码表示 Unicode ,\u 开头,后跟 4 位十六进制数字(1~F),在代码中的转义序列会被解释成 Unicode ,但是在注释里的 转义序列 只会当做 ASCII 字符处理

Unicode归一化:
Unicode 允许用多种编码方式表示同一个字符,当你使用ASCII字符以外的Unicode字符,就会出现在编辑器里看起来一样的变量或常量,但是实际解析出来的二进制编码却不一样,JS认为他们是不同的,因为 JS 默认自己解释的源代码是已经做过归一化处理的,为了避免这种在编辑器里看起来一样但是实际解释的二进制编码却不同的情况,Unicode 标准为所有字符定义了首选编码并规定了归一化例程,用于把文本转换为合适比较的规范形式,我们应该保证自己的编辑器或其他工具对自己的源代码执行 Unicode 归一化

JS 省略分号需要注意:
JS 只在下一个非空格字符串无法被解释为当前语句的一部分时才会把换行符当做分号,需要注意的是一下3种特殊情况:
1.注意 return、break、continue 等关键字后面不要换行
2. ++、-- 作为后置操作符时,必须与自己操作的表达式在同一行,(A+B)++; (B)–
3. 箭头函数的参数与箭头必须在同一行

第二章:

JS概念及定义:
可以表示和操作的值被称为类型
原始类型和对象类型:
原始类型:
字符串、数值、布尔值、null、undefined、Symbol
null、undefined 的是各自特殊类型的唯一成员
ES6 新增 Symbol 特殊类型,用于对语言进行扩展而不破坏向后兼容性
对象类型:
对象:属性的集合
数组:特殊对象,表示数字值的有序集合
函数:特殊对象
Set对象:表示一组值的集合
Map对象:表示键与值的映射
RegExp:表示文本模式,实现对字符串进行匹配
Date、Error及其子类…

本质都是可以「表示」和「操作」的「值」;

JS内存管理:垃圾回收机制,解释器会自动释放一些不被引用、标记的值所占的空间;

面向对象面向过程:
面向对象:对象本身定义了很多方法能够操作本身值「自带方法」
面向过程:自己定义函数方法去操作值「自己定义方法」

数值:
整数字面量:
二进制字面量:基数2,OB/Ob前缀 eg: Ob0101;
八进制字面量:基数8,OO/Oo前缀 eg: Oo377;
十进制字面量:基数10,直接写数字序列 eg: 10
十六进制字面量:基数16,OX/Ox前缀 eg: Ox1B2C
浮点字面量:
小数点传统语法:实数值由数值的整数、小数点、数值的小数组成
指数计数法:实数值后面跟字母 e/E ,跟一个可选+/-,再跟一个整数指数 2e3 ——> 2 * 10^3

JS中的运算:
操作运算符:+。-、*、/、%、**……
JS通过 Math 对象的属性提供了一组函数和变量,以支持更复杂的运算

日期和时间:
Date对象,2021/11/22 11:11:11 ,用 / 分隔 年/月/日 ,在 ios 环境下兼容性更好

原始值引用值:
原始值是值的拷贝,引用值是指针的拷贝。
对象的浅拷贝与深拷贝

类型转换:
原始值类型的转换:
String(value)
Number(value)
undefined——>NaN
null——>0
Boolean(value)
(null undefined 0 ‘’ NaN)——>false
引用值类型的转换:(对象——原始值转换)
ToPrimitive:
*“string” hint:
alert(obj) // 输出
obj2[obj]=123 // 将对象作为属性键
*“number” hint:
显示转换:
let num = Number(obj)
数学运算:(除了二元加法)
let n = +obj // 一元运算
小于/大于的比较运算符:
let greater = user1 > user2
*“default” hint:
二元加法:obj 遇到 二元加法
依据”default“hint进行转换
== 比较:obj 与 字符串、数字、symbol 进行 == 比较,使用 “default” hint
根据三种类型转换的变体(hint),JavaScript尝试查找并调用三个对象方法:
1、如果 obj[Symbol.toPrimitive] (hint) 方法存在,则先调用此方法
2、否则,如果 hint 是 ”string“ ,尝试 obj.toString() 和 obj.valueOf()
3、否则,如果 hint 是 ”number“ 或 ”default“,尝试 obj.valueOf() 和 obj.toString() Symbol.toPrimitive:toString/valueOf:

……

對象用作集合——集合對象——ES6 新增 Set類
數學集合的概念:“一個或多個元素構成的整体” 简单理解成 “一堆东西”,这堆东西里的东西就是 “元素”;

数学集合所具有的特性:
确定性:元素要么在某个集合里,要么不在;
互异性(唯一性):同一个集合里,不可能出现同样的元素;
无序性:集合中的元素没有先后顺序,两个集合比较,只比较集合中所有元素是否相同;
逻辑性:以上三点就能确定一堆东西能否被称为 一个完整的” 集合“
(完备性、纯粹性)

JavaScript中 Set() 構造函數用於創建 集合對象——Set類,因此 Set類 都將擁有以上幾個特性

const set1 = new Set() // 不傳參,創建一個新的空集合
const set2 = new Set([1, s]) // 一個有兩個新成員的集合
const set3 = new Set(‘Mississippi’) // 獲得 4 個元素:‘M’ ‘i’ ‘s’ ‘p’ 的新集合
const set4 = new Set(set3) // 一個複製了 set3 元素 的新集合
傳入一個可迭代對象(注意 在 ES6 中,字符串是可迭代的,如果對字符串使用 for/of 循環 或 … 操作符,迭代的是字符而不是16位數),或者其他集合。

Set類 具有的屬性和方法:
在这里插入图片描述

size 屬性:這個屬性的值表示集合中元素的個數(如數組 length 屬性相似)
set3.size // 4

add()方法:給集合添加新的元素
delete()、clear()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值