-
表达式语句由 运算符连接变量 或者 直接量构成
A. PrimaryExpression 主要表达式
* Primary Expression 表达式的原子项 ( 表达式的最小单位,所涉及的语法结构也是优先级最高的 )
任何表达式加上圆括号都被称为 Primary Expression直接量 直接用某种语法写出来的具有特定类型的值 "Hello world"; 123; null; true; false; 直接量的形式定义对象 ( function、{和class开头的表达式语句与生命语句有语法冲突 所以要加上括号来避免语法冲突 ) ({}); (function(){}); (class{ }); []; /abc/g; 标识符引用 this; myVar;
B. MemberExpression 成员表达式
Member Expression 加上new 就是 NewExpression
后加一个括号里的参数列表 或者用super关键字代替MemberExpression 就是 CallExpression* 通常是用于访问对象成员 a.b; a["b"]; new.target; // 判断函数是否被new调用 super.b; // 构造函数中 访问父类的属性的语法 不带参数列表的new运算优先级更低 不属于 Member Expression
C. NewExpression NEW 表达式
Member Expression 加上 new 就是 New Expression ( JS中默认独立的高优先级表达式都可以构成低优先级表达式 ) class Cls{ constructor(n){ console.log("cls", n); return class { constructor(n) { console.log("returned", n); } } } } new (new Cls(1)); // cls 1 // returned undefined 第一层new 首先调用了构造函数里面的 cls 第二层new 调用了 return // new (new Cls(1)) (1) ; // returned 1
D. CallExpression 函数调用表达式
Member Expression 中的某一子结构具有函数调用 整个表达式就成为了一个 Call Expressiona.b(c)(d)(e); a.b(c)[3]; a.b(c).d; a.b(c)`xyz`; Call Expression 就失去了比 New Expression 优先级高的特性,这是一个主要的区分
E. LeftHandSideExpression 左值表达式
放到等号左边的表达式
a() = b;F. AssignmentExpression 赋值表达式 ( JS语法_4.txt 是右边部分 )
a = b
a = b = c = d
等价于:
a = (b = (c = d))a += b; a = a + b; 一共有这么多种效果 : *=、/=、%=、+=、-=、<<=、>>=、>>>=、&=、^=、|=、**=
G. Expression 表达式
表达式就是用逗号运算符连接的赋值表达式 比赋值运算优先级更低的就是逗号运算符 a = b, b = 1, null; ( 顺序执行 )
js语法(4)
最新推荐文章于 2024-10-30 19:10:39 发布