JavaScript语法:什么是表达式语句?

2023年 7月 15日 91.6k 0

JavaScript语法:什么是表达式语句?

表达式语句实际上就是一个表达式,它是由运算符连接变量或者直接量构成。 一般表达式语句要么是函数调用,要么是赋值,要么是自增,自减,否则表达式的计算结果没有任何意义。但在语法上并没有限制。

PrimaryExpression 主要表达式

表达式的原子项:PrimaryExpress。它是表达式的最小单位,它涉及的语法结构也是优先级最高的。 PrimaryExpression包含各种“直接量”,直接量就是直接用某种语法写出来的具有特定类型的值。比如,数字123,字符串hello world。通俗地讲,直接量就是在代码中把它们写出来的语法。 在类型的部分,已经介绍过一些基本类型的直接量:

123;
null;
true;
false;

除此之外,JavaScript还能够直接量的形式定义对象,针对函数、类、数组、正则表达式等特殊对象类型:

({});
(function(){});
(class{ });
[];
/abc/g;

Primary Expression还可以是this或者变量,在语法上,把变量称作“标识符引用”。

this;
myVar;

任何表达式加上圆括号,都被认为是Primary Expression,这个机制使得圆括号成为改变运算优先顺序的手段。

(a + b)

MemberExpression 成员表达式

Member Expression通常是用于访问对象成员的。它有几种形式:

a.b;
a["b"];
new.target;
super.b;

new.target是个新加入的语法,用于判断函数是否是被new调用 super则是构造函数中,用于访问父类的属性的语法。

以下两种为了语法结构需要,在JavaScript中当作Member Expression: 这个是一个带函数的模板,表示把模板的各个部分算好后传递给一个函数。

f`a${b}c`;

带参数列表的new 运算,注意不带参数列表的new运算优先级更低,不属于Member Expression。

new Cls();

NewExpression NEW表达式

Member Expression加上new就是New Expression(当然,不加new也可以构成New Expression,JavaScript中默认独立的高优先级表达式都可以构成低优先级表达式)。 New Expression特指没有参数列表的表达式:

new new Cls(1);
// 直观看上去,可能有两个含义:
// new (new Cls(1));
// new (new Cls)(1);

实际上它等价于"new (new Cls(1));",1被当作调用Cls时的参数传入了。

class Cls{
    constructor(n){
        console.log("cls", n);
        return class {
            constructor(n) {
                console.log("returned", n);
            }
        }
    }
}
new (new Cls(1));
// cls 1
// returned undefined

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论