咖啡/ javascript中的短路

Yas*_*ser 2 javascript coffeescript

这个coffeescript:

if  typeof(groups) is undefined or groups.length == 0
Run Code Online (Sandbox Code Playgroud)

被编译成以下javascript:

if (typeof groups === void 0 || groups.length === 0)
Run Code Online (Sandbox Code Playgroud)

基本上我想检查groups数组是否为空或空,并希望如果第一个条件为真,则不会检查第二个条件(短路).但是,Chrome会引发以下错误:

未捕获类型错误:无法读取未定义的属性长度

关于它为什么不会发生短路的任何见解?

Jam*_*ice 5

因为第一个条件永远不会成真.void 0将评估值undefined(不是字符串"undefined"),但typeof返回字符串"undefined".

JavaScript应该是:

if (typeof groups === "undefined" || groups.length === 0)
Run Code Online (Sandbox Code Playgroud)

要么:

if (groups === void 0 || groups.length === 0)
Run Code Online (Sandbox Code Playgroud)

要修复CoffeeScript,您需要检查字符串"undefined":

if typeof groups is "undefined" or groups.length == 0
Run Code Online (Sandbox Code Playgroud)