标识符
变量、函数、属性或函数参数的名称
- 第一个字符必须是字母,下划线(_)或美元符号($)
- 剩下的其他字符可以是字母、下划线、美元符号或数字
var、let 和 const
var 变量的作用域包括函数和全局,let 还有块级作用域;
在函数内定义变量省略操作符会创建一个全局变量;
var 声明变量存在声明提升,let 在声明之前存在“暂时性死区”,任何引用 let 声明的变量都会抛出错误;
在浏览器中 var 声明的变量会成为 window 对象的属性,let 不会;
var 允许重复声明,let 不允许;
const 和 let 基本一致,唯二的区别是 const 声明变量必须同时初始化,尝试修改 const 声明的变量会报错;
数据类型
简单数据类型:Undefined、Null、Boolean、Number、String、Symbol
复杂数据类型:Object
typeof
可以确定简单数据类型,还能区别 object 和 function
Undefined
目的是为了正式明确空对象指针(null)和未初始化变量的区别
判断一个变量是否存在可以用 typeof xxx
Number
类型转换规则
parseInt
Number 类型使用 IEEE 754 格式(双精度)表示整数和浮点数。
八进制:0o
,十六进制:0x
Number.MIN_VALUE=5e-324,NUMBER.MAX_VALUE=1.8e308
0 和 0 相除会返回 NaN,只有分母有 0 会返回 Infinity
String
toString()
方法
原始字符串 String.raw
Symbol
确保对象属性使用唯一标识符
Symbol.for() 在全局符号注册表中创建
Symbol.keyFor() 查询全局注册表
Object.getOwnPropertyNames() 返回对象实例的常规属性数组
Object.getOwnPeopertySymbols() 返回对象实例的符号属性数组
Object.getOwnPropertyDescriptors() 同时包含常规和符号属性描述符的对象
Symbol.hasInstance —— instanceof 操作符
Symbol.isConcatSpreadable —— Array.prototype.concat()
Symbol.iterator —— for-of
Object
对象:一组数据和功能的集合。每个 Object 实例都有如下属性和方法
- constructor:创建当前对象的函数
- hasOwnProperty:判断当前实例是否存在给定的属性
- isPrototypeOf:当前对象是否是另一个对象的原型
- propertyIsEnumerable:给定的属性是否可以使用 for-in 枚举
- toString()
- valueOf()
for-in 和 for-of
for...in
语句以任意顺序遍历一个对象的除Symbol以外的可枚举属性,包括继承的可枚举属性。配合 hasOwnProperty() 能够保证只迭代自身属性。
for...of
遍历可迭代对象的元素,调用对象 next() 方法顺序迭代元素。