簡體   English   中英

咖啡/ javascript中的短路

[英]Short-circuiting in coffee/javascript

這個coffeescript:

if  typeof(groups) is undefined or groups.length == 0

被編譯成以下javascript:

if (typeof groups === void 0 || groups.length === 0)

基本上我想檢查groups數組是否為空或空,並希望如果第一個條件為真,則不會檢查第二個條件(短路)。 但是,Chrome會引發以下錯誤:

未捕獲類型錯誤:無法讀取未定義的屬性長度

關於它為什么不會發生短路的任何見解?

因為第一個條件永遠不會成真。 void 0將計算值undefined (不是字符串“undefined”),但typeof返回字符串“undefined”。

JavaScript應該是:

if (typeof groups === "undefined" || groups.length === 0)

要么:

if (groups === void 0 || groups.length === 0)

要修復CoffeeScript,您需要檢查字符串“undefined”:

if typeof groups is "undefined" or groups.length == 0

CoffeeScript有一個操作員可以為您處理這種情況。 如果您使用:

unless groups?.length > 0

它將形成您正在尋找的東西,處理undefined / null情況,並且僅在定義了groups嘗試groups.length 這具有易於鏈接的優點:

if foo?.bar?.length > 0

如果groups是局部變量,您可以詢問:

if not groups or groups.length is 0
  ...

如果它是一個可能未定義的全局變量(即訪問groups將拋出“未定義”錯誤),您可以使用存在運算符?

if not groups? or groups.length is 0
  ...

最后,當您在第二個條件中要求length屬性時,您可以利用0為假的事實:

if not groups?.length
  ...

最后一個表達式不關心是否定義了groups變量; 它將適用於兩種情況= D.

暫無
暫無

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

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