如何在throw new
语句中使用异常名称中的变量抛出异常?
我有一个例外列表,我试图根据一个变量的长度是否为零而抛出。例如,异常的名称包含变量名称。
作品
if (X.length === 0)
{
throw new NoXException();
}
if (Y.length === 0)
{
throw new NoYException();
}
if (Z.length === 0)
{
throw new NoZException();
}
不起作用
var X = 'Oh';
var Y = 'Hai';
var Z = '';
// Contains "NoZException"
var ex = "No" + ((X.length != 0) ? ((Y.length != 0) ? 'Z' : 'Y') : 'X') + "Exception";
// Throwing ex gives an error
throw new ex();
答案 0 :(得分:3)
您正在尝试将字符串转换为函数并创建变量的新实例,但这不起作用。
有一些方法可以获得与字符串相对应的函数:How to turn a String into a javascript function call?
但更好的方法是简单地执行第一个if语句,或将其转换为开关。
对于全局变量:
// Set up in global scope, not in the scope of something else.
var NoXException = function () { ... }
var variable = "No" + getMissing() + "Exception";
throw new window[variable]()
对于存储在另一个范围内的变量:
var exceptions = {}
exceptions.NoXException = function () { ... }
var variable = "No" + getMissing() + "Exception";
throw new exceptions[variable]()
// Alternatively
throw new window['exceptions'][variable]()