变量:
命名规则(常用):字母、数组、下划线、&,不能以数字开头。适用于:变量、函数名、class名、对象属性名
声明:var let const的区别
赋值:为赋值时,默认undefined,值决定变量的类型(弱类型语言)
解构赋值:当多个变量与数组或对象值对应时:
值交换:[a,b]=[b,a]
for……of获取键值对
模式和变量:模式不能匹配时,变量值是undefined
{x,y}={y=1},x和y既是模式也是变量,y的值是1,x没有匹配到
表达式:由变量、运算符、基本数据组成
运算符:
算术:+ - * / % += ++ --
比较运算符:> < == >= ===
逻辑运算符:&& || ! &&= ||=
链判断: ?. 当链式调用为undefined时,提前结束
unll判断运算符:?? ,与||相比,验证能是unll和undefined
数据类型:
基本类型:string number boolean undefined unll Symbol bigInt
引用类型:array object function
Object。prototype.toString.call(),结果是"[object 首字母大写的数据类型]"
基本类型存在栈中,引用类型存在堆中
基本类型不能修改值
栈中的每一个数据独占一个内存空间(系统自动分配)
栈中存储基本类型数据,引用类型的指向堆中存储引用类型的数据
栈是先进后出,堆里的数据是无序的
栈中的内存空间固定的,堆中的内存空间动态分配,大小可以调整
变量提升:
var声明变量:提升值当前作用域顶部
let、const、函数声明是块级作用域
数据转换:
数字与字符串:
强制:String() Number()
转成字符串:String(100) .toString()
转成数字:Number() parseInt() parseFloat()
Number将纯数字字符串转成数字,将其他转成NaN
parseInt将首字符是非数字的字符串转成NaN,其他情况遇到非数字停止转化,与parseFloat相比,不支持小数
隐式:运算符
转成字符串:+" "
转成数字:*1 /1 -0
转成布尔值:!!数据
布尔值:
false类型:false、 0、 undefined、 unll、 NaN、 " "、 0n
!"0"=="0"
![]==[]
条件、判断
if……else 如果……否则
if……else if……else
if
&&
||
? :
switch
条件:
短路原则,当多个条件&&连接时,有一个不成立,则不判断其他条件;多条件用||连接时,有一个成立时就时true
&&连接,要求尽可能将不成立的条件放在第一个
||连接,尽可能将成立的条件放在第一个