我正在尝试编写一个可用于测试所有虚假值的函数,保持简洁,因为它将经常在服务器端运行。
function is_falsy(val){
val = eval(String(val).toLowerCase());
return !!val;
}
我想知道是否有任何方法可以缩短它,或者使用 eval()
可能会产生哪些负面影响。 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/