[英]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.