Javascript 验证函数接收到的参数的最佳方法是什么

Javascript 验证函数接收到的参数的最佳方法是什么,javascript,Javascript,触发器参数必须接收两个非常具体的单词中的一个:“hover”或“click”,我想不出一个好方法来简化此函数的实现 我确实想到了一些解决办法: 我可以尝试验证函数中已经存在的参数,并在中断执行后立即返回“console.info”,以防发送错误的参数,通知开发人员他的错误 我可以创建一个枚举,并将其作为开发人员的接口提供(这仍然会使开发人员必须阅读它才能正确使用它) 键入此帖子时,我突然想到我可以为选项设置标准值,因此它们是可选的 我只是不知道在这种情况下哪种方法是最好的。我是否可以假设愿意使用

触发器参数必须接收两个非常具体的单词中的一个:“hover”或“click”,我想不出一个好方法来简化此函数的实现

我确实想到了一些解决办法:

  • 我可以尝试验证函数中已经存在的参数,并在中断执行后立即返回“console.info”,以防发送错误的参数,通知开发人员他的错误

  • 我可以创建一个枚举,并将其作为开发人员的接口提供(这仍然会使开发人员必须阅读它才能正确使用它)

  • 键入此帖子时,我突然想到我可以为选项设置标准值,因此它们是可选的


  • 我只是不知道在这种情况下哪种方法是最好的。我是否可以假设愿意使用代码的开发人员必须阅读代码以找到实现它的最佳方法,或者(如我所想)我应该关注像我所描述的那样的验证?另外,哪一个是最好的?

    在javascript中,直接比较字符串是一种常见的做法。类枚举结构虽然易于实现,但通常不太常用,因为您必须将类枚举定义为全局变量,或者执行以下操作:

    Create: function (title, text, orientation, trigger, layout) {
            $(this).attr
        },
    
    以这种方式,只有应用程序是全局的,但键入application.enums.myObject是一件痛苦的事情

    如何处理错误:

    选项1:引发异常:

    application.enums.myObject.hover= 1;
    application.enums.myObject.click= 2;
    
    myObject= new application.constructors.MyObject();
    myObject.create(title, text, orientation, application.enums.myObject.hover, layout)
    
    这将使脚本崩溃,除非您在某个地方有catch子句。在某些情况下,让党崩溃总比不提供一个知道问题所在的方法要好。如果您打算捕获这些异常(而不是让它们使脚本崩溃),我建议您通过为您的错误等创建类来正确地进行捕获

    选项2:返回null

    Create: function (title, text, orientation, trigger, layout) {
            if (trigger !== "hover" && trigger !== "click") {
                throw "error: invalid parameter trigger";
            }
        },
    
    如果要使用函数的返回值,这种方法效果更好。调试时,您将在尝试使用返回值时看到“object has no property named X”错误(或者,如果您这样使用返回值,您的值将被强制转换为“null”字符串)

    选项3:静静地忽略错误,什么也不做。要么你的脚本自己崩溃,要么什么也不做。不推荐

    意见:

    1-不要在生产代码中使用console对象。它不是标准的一部分,除非打开开发者控制台,否则IE不会将其公开到网页上


    2-不要以大写字母开头函数名,除非它是一个应该用“new”关键字调用的函数(即构造函数)。

    假设您的目的是创建公开可用的函数,它应该有一个已发布的API来定义参数,并且不需要开发人员阅读代码。您是否想知道如何验证一个特定参数的值,或者如何处理这么多参数。就个人而言,如果有3个以上的参数,并且可以有可选参数,我会让函数接受一个对象。在我看来,使用默认值是很好的。@JamesMontagne如果听起来像是我愿意在某个地方发布它,我很抱歉。这更多的是一个概念问题,而不是一个实际问题,但我在一家公司开发,我想使用最佳实践,因为其他开发人员也会使用该代码。@FelixKling主要问题是我是否应该关心防止第三方误用构造函数,通过控制台通知它,或者只是自己处理代码中的错误。@Hoffmann你可能会觉得奇怪,但我从来没有想过。我完全同意控制台和警报不应该在发布版本中。在这种情况下,我假设我可以使用“console.info”作为某种Intelissense来教开发人员如何实现该功能,但另一方面,这几乎与不验证和注释代码相同我同意这两种说法,只是我没有使用javascript和web开发,所以我不知道是否应该关注实现。任何阅读函数的人,在函数完成后,都应该知道如何使用它,所以我不知道我必须进行多大程度的验证,并指出它的使用错误。@v1n1akabozo回答更新了处理错误的技术。这是我一直在等待的答案,我很感激。抛出异常似乎比使用console.info提示错误要好得多,而且将返回值设置为null也非常直观。谢谢
    Create: function (title, text, orientation, trigger, layout) {
            if (trigger !== "hover" && trigger !== "click") {
                return null;
            }
        },