海阔凭鱼跃,天高任鸟飞。Hey 你好!我是猫力 Molly
温故而知新,可以为师矣。重读红宝书(第四版)系列文章意在对 JS 知识点复盘整理、查漏补缺,构建自己的前端知识体系。该系列会以自己的理解将红宝书的各个章节知识点整理为文章并发布出来。喜欢的小伙伴欢迎加入我们,让我们一起重读红宝书,温故知新。
# 语法的规范与定义
任何语言的核心所描述的都是这门语言在最基本的层面上如何工作,涉及语法、操作符、数据类型以及内置功能,在此基础之上才可以构建复杂的解决方案。JavaScript
也不例外。
ECMAScript
中一切都区分大小写。无论是变量、函数名还是操作符,都区分大小写- 标识符(变量、函数、属性或函数参数的名称)的定义
- 第一个字符必须是一个字母、下划线(_)或美元符号($)
- 剩下的其他字符可以是字母、下划线、美元符号或数字
- 注释可以有单行注释(//)与多行注释(/* */)
- 语句以分号(;)结尾,代码块使用花括号包起来({})
- 关键字与保留字不能用作标识符定义声明
# 变量的声明与区别
ECMAScript
变量是松散类型的(运行时才能确认具体类型),可以用来存放任何类型的数据。可以使用var
,let
,const
这三个关键字来声明变量
# var
var
声明的变量会成为包含它的函数的局部变量,不在函数体内则是全局变量- 声明时如果去掉
var
关键字,则视为全局变量(挂载在 Window 对象) var
声明的变量存在变量提升(变量会自动提升到函数作用域顶部)- 反复多次使用
var
声明同一个变量,并不会报错,则以最后一次声明为准
# let
let
关键字声明的是块级作用域,只在代码块({})中有效let
在同一个块作用域中不允许重复声明同一个变量let
声明的变量不会在作用域中被提升- 使用
let
声明的全局变量并不会像var
那样挂载在 Window 对象里,而是在Script 域(环境记录空间)
# const
const
的行为与let
基本相同const
用于声明一个常量,并且在声明变量时必须同时初始化变量const
不允许重新赋值,如果声明的是引用类型,可以支持修改对象的内部属性
建议不再使用 var 声明变量,let 与 const 优先使用 const
# 数据类型概括
ECMAScript
的数据类型可分为基本数据类型
和引用数据类型
两大类
基本数据类型包括
- undefined
Undefined
类型只有一个值,就是特殊值undefined
。当使用var
或let
声明了变量但没有初始化时,就相当于给变量赋予了 undefined 值
- null
Null
类型只有一个值,即特殊值null
。表示一个空对象指针
- boolean
Boolean
类型表示“真假”,有两个字面值true
和false
- number
Number
类型表示整数和浮点值
- string
String
类型表示零或多个 16 位 Unicode 字符序列
- symbol
symbol
类型表示一个符号且唯一不可变的,可以确保对象属性使用唯一标识,不会发生属性名冲突
- bigint
Bigint
类型表示大于2^53 - 1
的整数。可以表示任意大的整数。
引用数据类型包括
- object
Object
类型表示一个对象,一组数据和功能的集合。
# 函数
函数是ECMAScript
的一个核心,函数可以封装语句,接收、返回参数,然后在任何地方,任何时间执行。
- 可以通过函数名来调用函数,要传入的参数放到括号里面,多个参数可以用逗号隔开
- 可以通过
return
语句来表示返回值,或提前退出函数 - 不指定返回值的函数实际上会返回特殊值
undefined
。 - 建议函数要么返回值,要么不返回值。只在某个条件下返回值的函数会带来麻烦,尤其是调试时。
# 感谢
欢迎关注我的个人公众号前端有猫腻 (opens new window)每天给你推送新鲜的优质好文。回复 “福利” 即可获得我精心准备的前端知识大礼包。愿你一路前行,眼里有光!
该系列持续更新中,喜欢的小伙伴欢迎加入我们,让我们一起重读红宝书,温故知新。微信:猫力 molly (opens new window)