哪种方法最好有条件分配?

时间:2018-08-23 05:06:02

标签: javascript

下面的代码只是初始化两个变量,具体取决于传递的cloudType,可以通过两种方法之一进行分配。在JavaScript中,建议减少代码行的数量,因此我喜欢第二种方法,它也消除了重复。

一种方法使我可以在将来需要时在特定情况下灵活地添加操作,其中第二种方法为我节省了大量字节,也有助于减少重复。

switch (cloudType) {
    case "aws":
        value = this._resetMessageDefaultValues.aws
        resetText = this._messages.current.aws
        break;
    case "private":
        value = this._resetMessageDefaultValues.private;
        resetText = this._messages.current.private
        break;
    case "azure":
        value = this._resetMessageDefaultValues.azure;
        resetText = this._messages.current.azure
        break;
}

value = this._resetMessageDefaultValues[cloudType];
resetText = this._messages.current[cloudType]

2 个答案:

答案 0 :(得分:6)

无论如何,我更喜欢第二个代码。

如果您的cloudType变量具有到其他两个对象的属性的一对一映射,为什么不弄清楚呢?这样也可以避免重复代码。

为了安全起见,请将以下检查添加到您的代码中:

value = this._resetMessageDefaultValues[cloudType];
resetText = this._messages.current[cloudType]
if (typeof value == "undefined" || typeof resetText == "undefined") {
    // throw some error
}

通过这种方式,您将知道在向系统中添加新的cloudType时,应将相关属性添加到其他对象中。

答案 1 :(得分:1)

放大@Mohammad的答案

第二个代码已经成为行业标准,即通过方括号foo['bar']通过其键来引用对象属性。如果要添加其他操作,只需将其放在下面的开关盒中。仍然比您编写的第一个解决方案节省了几个字节

value = this._resetMessageDefaultValues[cloudType];
resetText = this._messages.current[cloudType];

switch (cloudType) {
    case "aws": break;
    case "private": break;
    case "azure": break;
}

考虑到键确实与cloudType变量直接匹配,即使不是,我也建议将其匹配。