javascript - 为什么 !!!undefined 在 JS Golf 中不起作用?

标签 javascript recursion undefined stack-overflow

我目前正在研究整数数字反转方法只是为了好玩(它是递归的,因为递归很酷)。这是来自 UglifyJS 的代码:

function rev(r,e){var n=r%10;return void 0==e?rev(r,0):0==r?e:n==r?10*e+r:rev((r-n)/10,10*e+n)}

请注意,UglifyJS 使用 void 0 作为 undefined 的同义词,is probably a better choice in everyday programming .

我偶然发现了这个未定义的测试:

function isundef(x) {
  return !!!x;
}

因为 undefined 测试的目的是将辅助方法风格的递归算法塞进一个可以使用适当参数重新调用自身的函数中,所以我只是尝试替换 void 0 ==eisundef(e)

function rev(r,e){var n=r%10;return isundef(e)?rev(r,0):0==r?e:n==r?10*e+r:rev((r-n)/10,10*e+n)}

在最新的 Chrome 中,这不起作用。我收到 RangeError:超出最大调用堆栈大小为什么在这种情况下 isundef 不能用于测试 undefined?!!!

编辑:

为什么 truthiness test 没有工作吗?

function rev(r,e){var n=r%10;return e?0==r?e:n==r?10*e+r:rev((r-n)/10,10*e+n):rev(r,0)}

最佳答案

原因是您的 isundef 函数没有检查其参数是否为 undefined。对于任何假值 e,表达式 !etruee === undefined 就是这种情况,而且 e 的所有假值也是如此,例如 e === nulle === 0,等等

因此,当您使用 rev(arg, 0) 调用函数时,它将无限递归地调用自身。

关于javascript - 为什么 !!!undefined 在 JS Golf 中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25146706/

相关文章:

javascript - 从 Momentjs 数组中添加阻止星期几的日期

C++ 使用递归函数创建链表

list - 返回最频繁的 OCaml 函数

php - 消息: Undefined variable in controller of codeigniter

javascript - 不同系统上Javascript中初始化数组的初始值是多少?

javascript - 在 React 中将数据从一个函数传递到另一个函数

javascript - 如何使用确认密码字段检查密码字段

javascript - Node.js request.post 返回未定义

javascript - 如何在for循环中使用angular http rest api保证顺序?

c++ - 为什么在更改赋值语句中的顺序时代码的实现方式不同?