tt-up / fed-in-depth

经验、知识、笔记——让坚持学习成为一种习惯
6 stars 1 forks source link

【红宝书第4版读书笔记】03-基本语法 #9

Open yuqingc opened 4 years ago

yuqingc commented 4 years ago

03 Language Basics

数据类型

7 种基本数据类型

Null 作为结构类型的基本数据类型(比较特殊,单独写)

2 种结构类型(复杂类型)

以上数据类型来自 MDN 文档。因为红宝书出版的时候是几年前了,所以没有记录 BigInt 类型。Function 其实也是一种 Object,但是Function 可以调用,比较特殊,所以可以单独作为一种类型。其他的例如 Array, Map, Set, WeakMap, WeakSet 都毫无疑问,属于 Object 类型。

利用 typeof 就可以判断一个值的类型(null 特殊需要注意)

typeof 操作符

undefinednull

Number 类型

浮点类型

NaN

强制类型转换

有 3 个强制转换为 Number 类型的函数

String 类型

模板字符串之 Tag function

语法如下

function simpleTag (strings, ...expressions) {
  // 其中
  // stings 是一个字符串数组
  // 省下的参数为字符串中,按顺序的插值 ${}
}
// 例子
simpleTag`${a}hello${b}world`
// 那么在函数中接受的参数依次为
// ["", "hello", "world"]
// a 的值
// b 的值

注意:第一个参数是个数组,并且带有一个 raw 的属性,raw 也是一个数组,里面是原始的未转义的字符。具体 API 请查阅文档。

内置的 String.raw Tag 函数,会返回未转义的字符串

console.log(`\u00A9`); // ©
console.log(String.raw`\u00A9`); // \u00A9

Symbol 类型

我的理解:为什么 Number, String, Boolean 可以用 new 创建而 BigIntSymbol 不行呢?

因为给基本类型使用 . 语法调用其方法时,会被自动转换为包装对象,因此不需要显式的使用 new 来创建包装类型。所以 ES6 之后新加入的两个类型,就被设计成不允许使用 new 来创建包装对象了。同样地,即使其他类型支持 new 来创建包装类型,但是代码规范不建议这样使用。

注意强制类型转换和包装类型的区别。比如 Number() 的返回值是 number 类型,而 new Number() 返回一个 object 类型。

Object 类型

Object 实例上的方法

操作符

Statement