欧美亚洲中文,在线国自产视频,欧洲一区在线观看视频,亚洲综合中文字幕在线观看

      1. <dfn id="rfwes"></dfn>
          <object id="rfwes"></object>
        1. 站長資訊網(wǎng)
          最全最豐富的資訊網(wǎng)站

          javascript里什么是表達式

          表達式語句實際上就是一個表達式,它是由運算符連接變量或者直接量構(gòu)成。 一般來說,表達式語句要么是函數(shù)調(diào)用,要么是賦值,要么是自增、自減,否則表達式計算的結(jié)果沒有任何意義。

          javascript里什么是表達式

          本教程操作環(huán)境:windows7系統(tǒng)、javascript1.8.5版、Dell G3電腦。

          表達式語句實際上就是一個表達式,它是由運算符連接變量或者直接量構(gòu)成。

          一般來說,表達式語句要么是函數(shù)調(diào)用,要么是賦值,要么是自增、自減,否則表達式計算的結(jié)果沒有任何意義。

          JavaScript 語法上并沒有這樣的限制,任何合法的表達式都可以當做表達式語句使用。

          a + b;

          這行代碼計算了 a 和 b 相加的值,但是不會顯示出來,也不會產(chǎn)生任何執(zhí)行效果(除非 a 和 b 是 getter ),但是不妨礙它符合語法也能夠被執(zhí)行。

          PrimaryExpression 主要表達式

          表達式的原子項:Primary Expression。它是表達式的最小單位,它所涉及的語法結(jié)構(gòu)也是優(yōu)先級最高的。

          Primary Expression 包含了各種“直接量”,直接量就是直接用某種語法寫出來的具有特定類型的值,直接量就是在代碼中把它們寫出來的語法。

          JavaScript 能夠直接量的形式定義對象,針對函數(shù)、類、數(shù)組、正則表達式等特殊對象類型,JavaScript 提供了語法層面的支持。

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

          在語法層面,function、{ 和 class 開頭的表達式語句與聲明語句有語法沖突,如果要想使用這樣的表達式,必須加上括號來回避語法沖突。

          Primary Expression 還可以是 this 或者變量,在語法上,把變量稱作“標識符引用”。

          this; myVarFun;

          任何表達式加上圓括號,都被認為是 Primary Expression,這個機制使得圓括號成為改變運算優(yōu)先順序的手段。

          (a + b);

          MemberExpression 成員表達式

          Member Expression 通常是用于訪問對象成員的。它有幾種形式:

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

          new.target 是個新加入的語法,用于判斷函數(shù)是否是被 new 調(diào)用,super 則是構(gòu)造函數(shù)中,用于訪問父類的屬性的語法。

          Member Expression 最初設(shè)計是為了屬性訪問的,不過從語法結(jié)構(gòu)需要,以下兩種在 JavaScript 標準中當做 Member Expression:

          帶函數(shù)的模板,這個帶函數(shù)名的模板表示把模板的各個部分算好后傳遞給一個函數(shù)。

          f`a$c`;

          帶參數(shù)列表的 new 運算,不帶參數(shù)列表的 new 運算優(yōu)先級更低,不屬于 Member Expression。

          new Cls();

          它們跟屬性運算屬于同一優(yōu)先級,但是沒有任何語義上的關(guān)聯(lián)。

          NewExpression NEW 表達式

          Member Expression 加上 new 就是New Expression(不加 new 也可以構(gòu)成 New Expression,JavaScript 中默認獨立的高優(yōu)先級表達式都可以構(gòu)成低優(yōu)先級表達式)。

          New Expression 特指沒有參數(shù)列表的表達式。如下代碼:

          new new Cls(1);

          直觀看上去,它可能有兩種意思:

          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));

          運行結(jié)果:這里就說明了,1 被當做調(diào)用 Cls 時的參數(shù)傳入了。

          javascript里什么是表達式

          CallExpression 函數(shù)調(diào)用表達式

          Member Expression 還能構(gòu)成 Call Expression。它的基本形式是 Member Expression 后加一個括號里的參數(shù)列表,或者可以用上 super 關(guān)鍵字代替 Member Expression。

          a.b(c); super();

          這看起來很簡單,但是它有一些變體。比如:

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

          這些變體的形態(tài),跟 Member Expression 幾乎是一一對應(yīng)的。實際上,可以理解為,Member Expression 中的某一子結(jié)構(gòu)具有函數(shù)調(diào)用,那么整個表達式就成為了一個 Call Expression。而 Call Expression 就失去了比 New Expression 優(yōu)先級高的特性,這是一個主要的區(qū)分。

          LeftHandSideExpression 左值表達式

          New Expression 和 Call Expression 統(tǒng)稱 LeftHandSideExpression,左值表達式。

          左值表達式就是可以放到等號左邊的表達式。JavaScript 語法則是:

          a() = b;

          這樣的用法其實是符合語法的,只是,原生的 JavaScript 函數(shù),返回的值都不能被賦值。因此多數(shù)時候,我們看到的賦值將會是 Call Expression 的其它形式,如:

          a().c = b;

          根據(jù) JavaScript 運行時的設(shè)計,不排除某些宿主會提供返回引用類型的函數(shù),這時候,賦值就是有效的了。

          左值表達式最經(jīng)典的用法是用于構(gòu)成賦值表達式,但是其實如果翻一翻 JavaScript 標準,就會發(fā)現(xiàn)它出現(xiàn)在各種場合,凡是需要“可以被修改的變量”的位置,都能見到它的身影。

          AssignmentExpression 賦值表達式

          AssignmentExpression 賦值表達式也有多種形態(tài),最基本的當然是使用等號賦值:

          a = b

          等號是可以嵌套的:

          a = b = c = d

          連續(xù)賦值,是右結(jié)合的,它等價于下面這種:

          a = (b = (c = d))

          先把 d 的結(jié)果賦值給 c,再把整個表達式的結(jié)果賦值給 b,再賦值給 a。

          賦值表達式的使用,還可以結(jié)合一些運算符,例如:

          a += b;

          相當于:

          a = a + b;

          能有這樣用的運算符有下面這幾種:

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

          賦值表達式的等號左邊和右邊能用的表達式類型不一樣。

          Expression 表達式

          賦值表達式可以構(gòu)成 Expression 表達式的一部分。在 JavaScript 中,表達式就是用逗號運算符連接的賦值表達式。

          在 JavaScript 中,比賦值運算優(yōu)先級更低的就是逗號運算符了??梢园讯禾柨梢岳斫鉃橐环N小型的分號。

          a = b, b = 1, null;

          逗號分隔的表達式會順次執(zhí)行,就像不同的表達式語句一樣?!罢麄€表達式的結(jié)果”就是“最后一個逗號后的表達式結(jié)果”。比如之前的例子,整個“a = b, b = 1, null;”表達式的結(jié)果就是“,”后面的null。

          在很多場合,都不允許使用帶逗號的表達式,比如我export 后只能跟賦值表達式,意思就是表達式中不能含有逗號。

          【推薦學習:javascript高級教程】

          贊(0)
          分享到: 更多 (0)
          網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號