javascript - 在这个函数中使用 eval() 是否不正确?如果没有它,我可以以某种方式完成相同的功能吗?

标签 javascript

我正在尝试编写一个可用于测试所有虚假值的函数,保持简洁,因为它将经常在服务器端运行。

function is_falsy(val){
   val = eval(String(val).toLowerCase());
   return !!val;
}

我想知道是否有任何方法可以缩短它,或者使用 eval() 可能会产生哪些负面影响。 JSBIN 告诉我这是“邪恶的”。

JSBIN

最佳答案

假设 val 是一个表示 JavaScript 文字字符串,那么我们可以利用这个事实那唯一的false-y values在 JavaScript 中是:

  • 0(+ 或 -)
  • NaN
  • 空字符串 ('') 或 ("")
  • 未定义

因此,忽略边缘情况(例如 0.0),我们可以这样编写(可以像原始代码一样执行小写):

function is_falsey_literal (lit) {
  if (['""', "''", "null", "undefined", "false", "0", "NaN"].indexOf(lit) >= 0) {
    return true;
  }
  // Ideally there are more checks on numeric literals such as `-0` or `0.0`.
  return false;
}

如果需要检查完整的表达式,那么eval可能会“起作用”,并且与编写完整的JavaScript-in-JavaScript解析器相比可能更实用。例如,在上面,输入字符串 (void 0) 将为“true”,尽管它的计算结果为 undefined 这绝对不是一个 true-y 值。

当然,也许原始数据可以被写入/使用,这样就根本不需要这样的构造..

关于javascript - 在这个函数中使用 eval() 是否不正确?如果没有它,我可以以某种方式完成相同的功能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20963483/

相关文章:

javascript - 从主干获取 Instagram 访问 token

javascript - 在 JQuery 中将 rel 属性更改为 data-rel 以使用 HTML5

javascript - 如何使用 jquery/ajax 刷新 div 中的表格内容

javascript - D3 : improving my shape-text linkup

javascript - jQuery 事件停止与 RxJS 一起工作

来自现有 divs innerHTML 的 javascript 数组

javascript - 使用 Google api 获取城市的州/国家建议

javascript - 如何让我的导航栏出现在某个部分?

javascript - 禁用网页中的突出显示

javascript - JQuery ajax stoppen in $.when 服务器返回 500 错误