亚洲最大看欧美片,亚洲图揄拍自拍另类图片,欧美精品v国产精品v呦,日本在线精品视频免费

  • 站長(zhǎng)資訊網(wǎng)
    最全最豐富的資訊網(wǎng)站

    javascript里什么是表達(dá)式

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

    javascript里什么是表達(dá)式

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

    表達(dá)式語(yǔ)句實(shí)際上就是一個(gè)表達(dá)式,它是由運(yùn)算符連接變量或者直接量構(gòu)成。

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

    JavaScript 語(yǔ)法上并沒(méi)有這樣的限制,任何合法的表達(dá)式都可以當(dāng)做表達(dá)式語(yǔ)句使用。

    a + b;

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

    PrimaryExpression 主要表達(dá)式

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

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

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

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

    在語(yǔ)法層面,function、{ 和 class 開頭的表達(dá)式語(yǔ)句與聲明語(yǔ)句有語(yǔ)法沖突,如果要想使用這樣的表達(dá)式,必須加上括號(hào)來(lái)回避語(yǔ)法沖突。

    Primary Expression 還可以是 this 或者變量,在語(yǔ)法上,把變量稱作“標(biāo)識(shí)符引用”。

    this; myVarFun;

    任何表達(dá)式加上圓括號(hào),都被認(rèn)為是 Primary Expression,這個(gè)機(jī)制使得圓括號(hào)成為改變運(yùn)算優(yōu)先順序的手段。

    (a + b);

    MemberExpression 成員表達(dá)式

    Member Expression 通常是用于訪問(wèn)對(duì)象成員的。它有幾種形式:

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

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

    Member Expression 最初設(shè)計(jì)是為了屬性訪問(wèn)的,不過(guò)從語(yǔ)法結(jié)構(gòu)需要,以下兩種在 JavaScript 標(biāo)準(zhǔn)中當(dāng)做 Member Expression:

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

    f`a$c`;

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

    new Cls();

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

    NewExpression NEW 表達(dá)式

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

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

    new new Cls(1);

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

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

    實(shí)際上,它等價(jià)于第一種。用代碼來(lái)驗(yàn)證:

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

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

    javascript里什么是表達(dá)式

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

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

    a.b(c); super();

    這看起來(lái)很簡(jiǎn)單,但是它有一些變體。比如:

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

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

    LeftHandSideExpression 左值表達(dá)式

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

    左值表達(dá)式就是可以放到等號(hào)左邊的表達(dá)式。JavaScript 語(yǔ)法則是:

    a() = b;

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

    a().c = b;

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

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

    AssignmentExpression 賦值表達(dá)式

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

    a = b

    等號(hào)是可以嵌套的:

    a = b = c = d

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

    a = (b = (c = d))

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

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

    a += b;

    相當(dāng)于:

    a = a + b;

    能有這樣用的運(yùn)算符有下面這幾種:

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

    賦值表達(dá)式的等號(hào)左邊和右邊能用的表達(dá)式類型不一樣。

    Expression 表達(dá)式

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

    在 JavaScript 中,比賦值運(yùn)算優(yōu)先級(jí)更低的就是逗號(hào)運(yùn)算符了??梢园讯禾?hào)可以理解為一種小型的分號(hào)。

    a = b, b = 1, null;

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

    在很多場(chǎng)合,都不允許使用帶逗號(hào)的表達(dá)式,比如我export 后只能跟賦值表達(dá)式,意思就是表達(dá)式中不能含有逗號(hào)。

    【推薦學(xué)習(xí):javascript高級(jí)教程】

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