Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 哪种方法更适合有条件地分配?_Javascript - Fatal编程技术网

Javascript 哪种方法更适合有条件地分配?

Javascript 哪种方法更适合有条件地分配?,javascript,Javascript,下面的代码只是初始化两个变量,具体取决于传递的cloudType,这两个变量可以通过任何一种方法分配。在JavaScript中,建议减少代码行数,因此我喜欢第二种方法,因为它可以消除重复 方法一使我能够灵活地在将来需要时在特定情况下添加操作,其中第二种方法为我节省了大量字节,还帮助我减少了重复 switch (cloudType) { case "aws": value = this._resetMessageDefaultValues.aws reset

下面的代码只是初始化两个变量,具体取决于传递的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;
}


当然,我更喜欢第二种代码

如果您的
cloudType
变量与这两个其他对象的属性有一对一的映射,为什么不澄清一下呢?这也避免了重复代码

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

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

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

放大@Mohammad的答案

第二个代码已经是通过括号
foo['bar']
通过键引用对象属性的行业标准。如果您想添加额外的操作,只需放入下面的switch case块。仍然比您编写的第一个解决方案节省了几个字节

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

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

考虑到键确实与
cloudType
变量直接匹配,即使不匹配,我建议进行匹配。

第二种方法在我看来已经更具可读性了-如果您想让事情更清楚,只需在上面加一条注释,比如:
//cloudType可能是'aws','private',或'azure'
“在javascript中,建议减少代码行数…”“由谁推荐?”减少代码行数“就其本身而言,这从来不是采用某一特定模式的好理由。然而,第二种方法更可取,因为可以独立地维护消息值。整个代码,包括保存数据的对象,很可能是更多的代码。第一种方法多次重复相同的代码位,增加了出错的机会。DRY原则支持第二种方法。在许多方面,这个问题是离题的,因为答案是基于观点的,而不是关于具体的编程问题。我投票将这个问题作为离题来结束,因为它属于站点。虽然我知道,那个网站上的问题不会像这里这样引起人们的注意。我希望有更简单的方法来移动问题。
value=this.\u resetMessageDefaultValues[cloudType]| |“无效的cloudType”
@mplungjan我不同意。无效值将在程序中出现,谁知道它何时会导致问题?在我看来,这是至关重要的。当然:
if(value==“Invalid cloudtype”
:)
value = this._resetMessageDefaultValues[cloudType];
resetText = this._messages.current[cloudType];

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