JavaScript - 包含变量名称的Throw Exception

时间:2013-07-11 11:10:53

标签: javascript

如何在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();

1 个答案:

答案 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]()