JS 一元判断语句优化以及eval用法

在网上看到了 if  else if 多条语句判断的优雅写法,如下所示:

var processMsg = function (type) {
    if("Next" === type){
        processMedia("next");
    }else if("Previous" === type){
        processMedia("previous");
    }else if("Stop" === type){
        processMedia("stop");
    }else if("Pause" === type){
        processMedia("pause");
    }else if("Play" === type){
        processMedia("play");
    }else{
        console.log("the type is not supported: " + type);
    }
};

用switch case看上去比较整洁,另外如果不同的type 可能处理的函数是一样的。

var processMsg = function (type) {
    switch (type){
        case  "Next":
            processMedia("next");
            break;
        case  "Previous":
            processMedia("previous");
            break;
        case  "Stop":
            processMedia("stop");
            break;
        case  "Pause":
            processMedia("pause");
            break;
        case  "Play":
            processMedia("play");
            break;
        default:
            console.log("the type is not supported: " + type);
            break
    }
};

这种就看上去好多了。

var processMsg = function (type) {
    var actions = {
        "Next" : "next",
        "Previous" : "previous",
        "Stop" : "stop",
        "Pause" : "pause",
        "Play" : "play"
    };
    var action = actions[type];
    !!action ? processMedia(action) : console.log("the type is not supported: " + type);
};

但还有一种情况是这样的:

var processMsg = function (type) {
    if("Next" === type){
        processNext();
    }else if("Previous" === type){
        processPrevious();
    }else if("Stop" === type){
        processStop();
    }else if("Pause" === type){
        processPause();
    }else if("Play" === type){
        processPlay();
    }else{
        console.log("the type is not supported: " + type);
    }
};

那么eval函数就派上用场了:

var processMsg = function (type) {
    var actions = {
        "Next" : "Next",
        "Previous" : "Previous",
        "Stop" : "Stop",
        "Pause" : "Pause",
        "Play" : "Play"
    };
    var action = actions[type];
    !!action ? eval("process" + action + "()") : console.log("the type is not supported: " + type);
};

猜你喜欢

转载自blog.csdn.net/liubangbo/article/details/84131612