JavaScriptの式とは何ですか

醉折花枝作酒筹
醉折花枝作酒筹オリジナル
2021-07-22 11:46:065777ブラウズ

式ステートメントは実際には式であり、変数または直接量を接続する演算子で構成されます。一般に、式ステートメントは関数呼び出し、代入、またはインクリメントまたはデクリメントのいずれかです。それ以外の場合、式の計算結果は意味を持ちません。

JavaScriptの式とは何ですか

このチュートリアルの動作環境: Windows7 システム、JavaScript バージョン 1.8.5、Dell G3 コンピューター。

式ステートメントは実際には式であり、変数または直接量を接続する演算子で構成されます。

一般的に、式ステートメントは関数呼び出し、代入、または自己インクリメントまたは自己デクリメントのいずれかです。それ以外の場合、式の計算結果は意味を持ちません。

JavaScript 構文にはそのような制限はなく、あらゆる正当な式を式ステートメントとして使用できます。

a + b;

このコード行は、a と b の加算値を計算しますが、(a と b がゲッターでない限り) 表示されず、実行効果も生成されませんが、それが妨げられるわけではありません。文法的に実行されます。

PrimaryExpression プライマリ式

式のアトミック項目: プライマリ式。これは表現の最小単位であり、それに含まれる文法構造も最優先されます。

Primary Expression にはさまざまな「直接量」が含まれています。直接量は、特定の構文を使用して直接記述される特定の型の値です。直接量は、コードで書き出すための構文です。

JavaScript は、直接量の形式でオブジェクトを定義できます。JavaScript は、関数、クラス、配列、正規表現などの特殊なオブジェクト タイプの文法サポートを提供します。

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

文法レベルでは、function、{、class で始まる式ステートメントは宣言ステートメントと文法的に矛盾します。そのような式を使用する場合は、文法上の矛盾を避けるためにかっこを追加する必要があります。

Primary Expression は this または変数にすることもできます。構文では、変数は「識別子参照」と呼ばれます。

this;
myVarFun;

任意の式と括弧は主式とみなされます。このメカニズムにより、括弧は操作の優先順位を変更する手段となります。

(a + b);

MemberExpression メンバー式

Member Expression は、通常、オブジェクト メンバーにアクセスするために使用されます。これにはいくつかの形式があります。

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

new.target は新しく追加された構文で、関数が new によって呼び出されるかどうかを決定するために使用されます。 super はコンストラクター内の親クラスのプロパティにアクセスするために使用される構文です。

メンバー式はもともと属性アクセス用に設計されましたが、構文構造の要件により、JavaScript 標準では次の 2 つのタイプがメンバー式とみなされます:

関数付きのテンプレート、これ1 つは関数付き 名前付きテンプレートは、テンプレートの各部分が計算されて関数に渡されることを意味します。

f`a${b}c`;

パラメータ リストを使用した新しい操作とパラメータ リストを使用しない新しい操作は優先順位が低く、メンバー式に属しません。

new Cls();

これらは属性操作と同じ優先度に属しますが、意味的な関係はありません。

NewExpression NEW 式

メンバー式と new は、新しい式です (新しい式は、new を追加せずに作成することもできます。これは、デフォルトで独立した優先度の高い式です) JavaScript は優先度の低い式を形成する可能性があります)。

新しい式は、特にパラメーター リストのない式を指します。次のコード:

new new Cls(1);

直観的には 2 つの意味があると思われます:

new (new Cls(1));
new (new Cls)(1);

実際には、最初の意味と同等です。コードを使用して確認します。

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

new (new Cls(1));

実行結果: これは、Cls を呼び出すときにパラメーターとして 1 が渡されることを示しています。

JavaScriptの式とは何ですか

#CallExpression 関数呼び出し式

メンバー式も呼び出し式を構成できます。その基本的な形式は、メンバー式の後に括弧で囲まれたパラメーター リストが続く形式です。または、メンバー式の代わりに super キーワードを使用することもできます。

a.b(c);
super();

これは簡単そうに見えますが、いくつかのバリエーションがあります。例:

a.b(c)(d)(e);
a.b(c)[3];
a.b(c).d;
a.b(c)`xyz`;

これらのバリエーションの形式は、メンバー式とほぼ 1 対 1 に対応します。実際、Member Expression 内の特定の部分構造に関数呼び出しがある場合、式全体が Call Expression になることがわかります。 Call Expression には New Expression よりも優先度の高い機能がありませんが、これが大きな違いです。

LeftHandSideExpression 左辺値式

New Expression と Call Expression は、まとめて LeftHandSideExpression、lvalue 式と呼ばれます。

左辺値式は、等号の左側に配置できる式です。 JavaScript 構文は次のとおりです。

a() = b;

このような使用法は実際には文法的ですが、ネイティブ JavaScript 関数によって返される値を割り当てることはできません。したがって、ほとんどの場合、割り当ては次のような他の形式の呼び出し式になります。

a().c = b;

JavaScript ランタイムの設計によれば、一部のホストが次のような関数を提供する可能性は排除されません。参照型を返します。この時点では、代入は有効です。

左值表达式最经典的用法是用于构成赋值表达式,但是其实如果翻一翻 JavaScript 标准,就会发现它出现在各种场合,凡是需要“可以被修改的变量”的位置,都能见到它的身影。

AssignmentExpression 赋值表达式

AssignmentExpression 赋值表达式也有多种形态,最基本的当然是使用等号赋值:

a = b

等号是可以嵌套的:

a = b = c = d

连续赋值,是右结合的,它等价于下面这种:

a = (b = (c = d))

先把 d 的结果赋值给 c,再把整个表达式的结果赋值给 b,再赋值给 a。

赋值表达式的使用,还可以结合一些运算符,例如:

a += b;

相当于:

a = a + b;

能有这样用的运算符有下面这几种:

*=、/=、%=、+=、-=、<<=、>>=、>>>=、&=、^=、|=、**=

赋值表达式的等号左边和右边能用的表达式类型不一样。

Expression 表达式

赋值表达式可以构成 Expression 表达式的一部分。在 JavaScript 中,表达式就是用逗号运算符连接的赋值表达式。

在 JavaScript 中,比赋值运算优先级更低的就是逗号运算符了。可以把逗号可以理解为一种小型的分号。

a = b, b = 1, null;

逗号分隔的表达式会顺次执行,就像不同的表达式语句一样。“整个表达式的结果”就是“最后一个逗号后的表达式结果”。比如之前的例子,整个“a = b, b = 1, null;”表达式的结果就是“,”后面的null。

在很多场合,都不允许使用带逗号的表达式,比如我export 后只能跟赋值表达式,意思就是表达式中不能含有逗号。

【推荐学习:javascript高级教程

以上がJavaScriptの式とは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。