Skip to content

声明

声明的功能:

  • 定义一个标识符
  • 定义类型(对比其他语言的关键字,javaScript 中没有 type 或者 define 这类关键字,没有明确的类型声明过程)
  • 定义初值

变量的数据类型

7 种基本数据类型:

  • 其中 6 种为简单数据类型(也叫做原始类型,值类型,栈内存)
  • 其中 1 种为复杂数据类型(也叫引用类型,堆内存)
  • 运算过程中自动进行类型的转换,内部称为抽象操作(ToPrimitive()、ToObject())
类型含义说明
undefined未定义未声明的变量或声明过但未赋值的变量,当然也可以赋值为 undefined
boolean布尔true/false
number数值IEEE 754 双精度浮点数使用 64 位来表示:符号,指数,尾数
string字符串可以访问指定位置的字符,但不能修改
symbol符号唯一值
function函数视为一等公民,可以像值一样被操作和使用
object对象基于原型继承和类继承

变量声明

变量声明两种:

  • 显式声明:使用 var/let/const 关键字进行的声明
  • 隐式声明:未声明而直接赋值 (应避免)

let 与 var 关键词的不同点:

  • 作用域不同:var 声明的变量作用域取决于函数作用域(动态作用域);let 声明的变量作用域取决于代码块(静态作用域)。
  • 多次声明:语法分析时允许 var 在其作用域中多次声明,而不允许 let 这样做
  • 使用方式:var 声明的变量可以先使用(undefined)再声明,而 let 必须遵循先声明后使用。

const 与 let 关键词的不同点:前者的值无法被修改。

赋值模板的作用:声明一批变量。

在表达式左侧使用解构赋值

javascript
const { newName: name, newAge: age, ...more } = person;
const [x, y, z] = [1, 2, 3];

字面量声明

字面量也叫直接量,是指无须声明就可以使用的常量。形式上类似汇编语言的立即值。

7 种基本数据类型的字面量风格的声明:

类型字面量声明包装对象说明
undefinedconst v = undefined;
string双引号、单引号、模版字符串String
numberconst v = 1;Number
booleanconst v = true;Boolean
symbol
objectnull,/[\d]/,[],{}RegExp,Array,Object
function具名函数、匿名函数、箭头函数、类写法Function

字符串字面量、转义符

ECMAScript 要求字符串必须是 Unicode 字符序列。

转义符"\"用于表示控制字符和不能直接输入的字符(不然会被系统语言自动转义)

转义符Unicode-namecodepoint(16 进制/十进制)含义
\0NULL(NUL)0000/0字符 NUL
\bbackspace(BS)0008/8退格符
\thorizontal tabulation(HT)0009/9水平制表符
\nEOL/NL/LF000A/10换行符,向上卷纸一行
\vvertical tabulation(VT)000B/11垂直制表符
\fFORM FEED (FF)000C/12换页符
\rCARRIAGE RETURN (CR)000D/13回车符,电传打印机的打印头回到行首
'APOSTROPHE0027/39单引号
"QUOTATION MARK0022/34双引号
\\REVERSE SOLIDUS005C/92反斜线符
\xnnASCII 字符编码
\unnnnunicode 字符编码的基本平面字符(≤ FFFF)
\u{nnnnn}unicode 字符编码的基本平面字符和扩展平面字符(> FFFF)

文本文件、http 协议中常见 CRLF 组合。

常见的转义符 Controls and Basic Latin

模板字面量

本质上是动态的字符串,上下文变量需确定。

javascript
// 1
const text = `my name is ${name}`; // 上下文的name变量必须已声明且已赋值
// 2
const text = (tpl) => String.raw(tpl, "Hi");
text`${1},world`;
// 3
String.raw(raw:['',"world!"],"Hi")

数值字面量

进制字面量解析说明
二进制(Binary)[ob,0B]开头,位取值范围[0,1]采用位运算符时,引擎将以整型来运算
八进制(Octal)[0o,0O]开头,位取值范围[0-7]
十六进制(Hexadecimal)[0x,0X]开头,位取值范围[0-9,A-F]
十进制(Decimal)位的取值范围[0-9,.,e,E]除以上三种情况外走十进制解析。内部的存放格式可能是浮点数或整型数,这取决于引擎的实现,而不是字面量形式。

+/- 表示数值的正负数

其他声明

常量声明

常量声明和变量声明在本质上没有区别,都是将标识符和数据绑定起来。

javascript
const NAME = "JOHN"; // 常量声明
let temp = 1; // 变量声明

符号声明

它是值而非对象(虽然是 首字母大写的 Symbol),更没有字面量声明形式。

javascript
const key = Symbol();

函数声明

  • 具名函数
  • 匿名函数
  • 形式参数
    • 默认值:arg=default
    • 剩余参数:赋值模板语法
  • function* 表示生成器
  • class 表示类,使用 new 来实例化

Released under the MIT License.