簡體   English   中英

在Javascript變量聲明中使用邏輯與

[英]Using Logical AND in Javascript Variable Declarations

我對使用&&這樣聲明變量的實際應用感興趣:

var x = undefined && 4;

// Evaluate to the first falsey value
// or else the last value.

eval(x);
// undefined

我了解如何評估值(請參閱此SO答案 )。 我也了解它的姐姐|| (有關詳細說明,請參見此處 )以及為什么使用以下表達式聲明變量會很有用:

// Some other variable
var y;

var x = y || 4;

// Evaluate to the first truthy value
// or else the last value.

實際上:使用第一個值,除非該第一個值是false;否則,請使用第一個值。 如果是這樣,請使用最后一個值。 我們可以證明||特征 在瀏覽器控制台中:

> null || 4
  4
> 4 || null
  4

> null || undefined
  undefined
> undefined || null
  null

> true || 4
  true
> 4 || true
  4

至於&&

> null && 4
  null
> 4 && null
  null

> null && undefined
  null
> undefined && null
  undefined

> true && 4
  4
> 4 && true
  true

我們應該這樣說嗎:使用第一個值,除非第一個值是真實的; 如果是這樣,請使用最后一個值?

我對使用編碼快捷方式來最大程度地減少條件語句的使用感興趣,並且我想知道是否可以以某種方式使用此語句。

我在jQuery核心源代碼的472行中找到了這種編碼方法的示例:

scripts = !keepScripts && [];

所以問題是這樣的:任何人都可以描述在JavaScript變量聲明中使用&&的良好環境嗎? 您認為這是不好的做法嗎?

謝謝!

通常,只有在這樣的“快捷方式”使典型的JavaScript程序員比其他代碼更具可讀性的情況下,才應使用這種“快捷方式”。

在考慮更具可讀性和不足之處的內容時,請考慮

var foo;
if(bar) {
    foo=[];
}

var foo = bar && [];

不一樣。 例如,如果barNaN ,那么在以后的情況下foo將是NaN ,這可能在以后會有些麻煩。

由於存在用於優化/最小化JavaScript的工具,因此您應將重點放在代碼的可讀性上,這與簡潔性並不總是相同的。

可以說您連續有幾個這樣的重復初始化,它們都依賴於不同的變量(這樣就不能將它們包裝到單個條件中),但是遵循相同的邏輯公式。 在這種情況下,一旦讀者在精神上解析了公式的含義,他們便可以快速掃描所有實例並查看每個實例之間的差異。 在這種情況下,您不是創建大多數JavaScript程序員都熟悉的約定(例如var foo = some_opt || {} ),而是創建一個本地化的約定,讀者將只需要為此文件學習。 即使在這種情況下,我還是建議您仔細考慮一下,這可能不值得。

我發現了一種特定的情況,在調試過程中使用&&可能會很有用。

假設我們有一個變量x 有時x的值為null ,有時x是值為{'foo':'bar'}的Object。 我們想編寫一個表達式,如果存在x.foo則返回x.foo的值。

但是,我們必須小心。 調用不存在的對象的屬性可能導致以下結果:

> Uncaught TypeError: Cannot read property 'foo' of null

所以我們可以這樣寫:

x && x.foo

請執行以下操作:

  1. 如果x是一個Object並且x.foo存在,請給我們x.foo的值。

  2. 如果x是一個Object並且x.foo不存在,則返回undefined

  3. 如果x為null,則返回null

只要在某處提到了x (即使x只是簡單地設置為null或未定義),該表達式就不會破壞代碼。

實際上,您不應該像Jquery那樣定期使用&&運算符,因為它總是有風險的代碼。 您可能會忘記所做的事情,或者由於這種用法而找不到錯誤。 我個人認為這是不好的做法。 您可能更喜歡使用,但是代碼變得不可讀。 我們,開發人員應考慮代碼的可理解性和可讀性。

嗯,這是一個常見的習慣用法,但也許會使您的代碼可讀性降低。 因此,我的建議是保持簡單,即使這意味着還要再擊幾次鍵。

暫無
暫無

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

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