变量声明(var const let)
var
-
声明范围是 函数作用域,变量声明会 “提升”,范围内重复变量的声明会在代码执行的一开始被合并成一个声明
var a = 1; var a; console.log(a); // 1 全局声明时会成为window对象的属性
for循环定义的迭代变量会渗透到循环外,引用始终为初始声明的变量
let、const
- 声明范围是 代码块,范围内无法重复声明
- 暂时性死区:无声明“提升”,声明前引用会报错(严格来讲也会提升,但由于暂时性死区,实际不能在声明之前使用,因此从写代码角度来说,两种提升不一样)
- for循环时,每次循环js引擎会在后台为每个迭代声明一个新的迭代变量
- const声明时必须初始化变量,且变量引用不可修改
数据类型
- 六种基础数据类型:String、Number、Boolean、Null、Undefined、Symbol
- 一种复杂数据类型:Object
typeof 操作符
- 用于判断变量的数据类型
- 返回值有:string、number、boolean、undefined、symbol、object、function
- null 被认为是空对象的引用,因此
typeof null === 'object' - 函数严格来讲也是 Object,但函数也有自己特殊的属性,因此需要用typeof区分函数与一般Object
Undefined
- 任何声明未赋值的变量值都是undefined
- undefined值主要用于比较及明确区分于null
Null
- 建议用null来初始化对象变量,方便使用时判断是否已经重新赋值
- undefined由null派生而来,因此
null == undefined
Boolean
- falsy值:false,空字符串,0,NaN,undefin,null
Number
- 转换正整数优先使用
parseInt(),parseInt()更关注字符串是否含数值,Number()函数转换字符串规则相对复杂且有点反常规
String
- 转换字符串优先使用
String(),String()会先尝试调用入参的toString()方法,由于null和undefined没有toString()方法,String()方法会返回他们本身
Symbol
Symbol(符号) 实例是唯一且不可变更得的,用于是作为对象属性的唯一标识符,不会出现属性冲突-
通过直接调用
Symbol()函数创建Symbol实例(为了避免创建符号包装对象,不支持new创建),可以传入一个字符串作为符号描述,但这个字符串与符号的定义或标识完全无关const symbolA1 = Symbol('a') const symbolA2 = Symbol('a') console.log(symbolA1 === symbolA2) // false -
需要复用符号时,可通过
Symbol.for()在全局符号注册表中创建或复用符号Symbol.for('foo') // 该方法调用时,若全局符号注册表已存在该符号,则引用,否则新建 const symbolA1 = Symbol.for('a') const symbolA2 = Symbol.for('a') console.log(symbolA1 === symbolA2) // true // 注意,Symbol()直接定义的符号并不在全局符号注册表中 const symbolA3 = Symbol('a') console.log(symbolA1 === symbolA3) // false -
ES6中有一批内置符号,它们以Symbol工厂函数字符串属性的形式存在,例如
for of会在相关对象上使用Symbol.iterator属性,我们可以重新定义该属性以改变默认行为;在ECMAScript规范中,这类符号的名称前缀为
@@,Symbol.iterator等同于@@iterator
Object
- ECMAScript中其他类的基类,每个Object实例都有以下方法
- constructor 构造函数 用于创建对象实例
-
hasOwnProperty(propertyName)用于判断属性是否在实例上 -
isPrototypeOf(obj)判断一个对象是否是另一个对象原型 - toString 返回对象字符串表示
- toLocaleString 返回对象本地化字符串表示
- valueOf 返回对象字符串/数值/布尔值表示
-
propertyIsEnumerate(propertyName)判断给定的属性是否可用(for - in) 枚举
操作符
-
++ -- + -一元操作符都可以用于类型转换,先转换,后计数 - 位操作符
~ 非;& 与;| 或;<< 有符号左移;>> 有符号右移;<<< 无符号左移;>>> 无符号右移 - 布尔操作符
! 非&& 与|| 或注意短路运算 -
* 乘;/ 除有余数;% 取模只取余数; -
** 指数运算3 ** 2 === 9
语句
-
for in遍历对象的非Symbol键属性 -
for of遍历可迭代对象的元素 (值) -
break退出循环 执行循环后的语句 -
continue退出本轮循环 从顶部开始执行下一轮循环