![](/img/trans.png)
[英]Using ANTLR to identify global variable declarations in a JavaScript file
[英]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 && [];
不一樣。 例如,如果bar
是NaN
,那么在以后的情況下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
請執行以下操作:
如果x
是一個Object並且x.foo
存在,請給我們x.foo
的值。
如果x
是一個Object並且x.foo
不存在,則返回undefined
。
如果x
為null,則返回null
。
只要在某處提到了x
(即使x
只是簡單地設置為null或未定義),該表達式就不會破壞代碼。
實際上,您不應該像Jquery那樣定期使用&&運算符,因為它總是有風險的代碼。 您可能會忘記所做的事情,或者由於這種用法而找不到錯誤。 我個人認為這是不好的做法。 您可能更喜歡使用,但是代碼變得不可讀。 我們,開發人員應考慮代碼的可理解性和可讀性。
嗯,這是一個常見的習慣用法,但也許會使您的代碼可讀性降低。 因此,我的建議是保持簡單,即使這意味着還要再擊幾次鍵。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.