簡體   English   中英

使用?時需要使用“ =”嗎? :javascript快捷方式?

[英]Do I need to use an “=” when using the ? : javascript shortcut?

有人可以告訴我這是否是有效的JavaScript來做到這一點:

        if (wf.statusId == Status.Dirty) {
            wf.createdDate
                ? promises.push(self.wordFormUpdateSubmit(wf, key))
                : promises.push(self.wordFormAddSubmit(wf, key));
        } 

如果未定義createdDate,是否會有無法正常工作的情況?

這是替換的內容:

        if (wf.statusId == Status.Dirty) {
            if (wf.createdDate) {
                var updatePromise = self.wordFormUpdateSubmit(wf, key);
                promises.push(updatePromise);
            } else {
                var addPromise = self.wordFormAddSubmit(wf, key);
                promises.push(addPromise);
            }
        }

也是一個相關的問題。 可以將相同的語法用於嗎? :是否需要if(){}構造?

除非將expr1expr2返回某些內容並將其保存在其他變量中,否則不強制將=與三元運算符一起使用。

在您的情況下,除非promises.push(self.wordFormAddSubmit(wf, key))promises.push(self.wordFormUpdateSubmit(wf, key))返回要保存其變量的內容,否則不需要=

if (wf.statusId == Status.Dirty) {
    promises.push(self[wf.createdDate ? 'wordFormUpdateSubmit' : 'wordFormAddSubmit'](wf, key));
}

wf.createdDate僅在未定義或沒有值的情況下才為true。 所以這應該工作正常。

if (wf.statusId == Status.Dirty) {
            wf.createdDate
                ? promises.push(self.wordFormUpdateSubmit(wf, key))
                : promises.push(self.wordFormAddSubmit(wf, key));
        } 

問候Mk

這是使用條件(三元)運算符的三元語句的示例,根據定義,該運算符將替換if...else構造。

從MDN:

條件(三元)運算符是唯一采用三個操作數的JavaScript運算符。 該運算符通常用作if語句的快捷方式。

[ 來源 ]

您的兩個代碼示例都將以相同的方式工作,即,如果未定義createdDate ,則將運行三元語句的第二個表達式( :之后的行),就像if...else構造的else塊將運行一樣。

標題問題似乎無關緊要,因為如果您要保存對某些內容的引用,則只需要使用= 在這種情況下,您似乎沒有這樣做。

關於您的后續問題,很多人使用三元語句來執行適合一行或幾行的小額檢查和任務(我個人不是因為我更喜歡if...else的可讀性),但是適度的任何操作復雜的代碼會很快使您的代碼難以閱讀和理解。 但是是的,從技術上講,三元語句可以替換if...else塊。

關於第二個問題:

假設您不需要將結果保存在變量中,則可以執行以下操作:

 promises.push(wf.createdDate?  
            self.wordFormUpdateSubmit(wf, key) :
            self.wordFormAddSubmit(wf, key);
 );

甚至可以工作:

 promises.push( 
      (wf.createdDate? self.wordFormUpdateSubmit:self.wordFormAddSubmit)(wf, key)           
     );

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM