【问题标题】:How to define optional parameters in Java Script如何在Javascript中定义可选参数
【发布时间】:2013-05-28 10:49:59
【问题描述】:

这是我的对象构造,

function Employee(name, dob) {
       this.Name = name;
       this.DateOfBirth = new Date(dob);
   }

现在,我为此创建了一个实例,例如

var emp = new Employee("sample","12/12/12");

当我打印输出时它工作正常。

但是,如果我创建像

这样的对象
var emp = new Employee(name = "sample");

var emp = new Employee(dob = "12/12/12");

它不能正常工作。在这两种情况下,DateOfBirth 字段都是无效的。

我需要定义一个带有可选参数的对象。

【问题讨论】:

  • 您可以将一个对象传递然后读取给构造函数; new Employee({name: "bob", age: 40});

标签: javascript optional-parameters


【解决方案1】:

JavaScript 不支持命名的可选参数。

当你做var emp = new Employee(name = "sample");

您正在声明一个name 全局变量,将sample 分配给它并将那个 传递给new 调用。

你可以在 JS 中使用对象来完成类似的语法:

var emp = new Employee({name:"sample"}); 

Employee 函数的位置:

function Employee(options) {
       this.Name = options.name;
       if(options.dob !== undefined){
           this.DateOfBirth = new Date(options.dob);
       }
}

值得一提的是,在实践中,您通常不需要 Employee 类,只需这样做:

var emp = {name:"sample"};

或者:

var emp = {dob:new Date("12/12/12");}

因此,除非 Employee 成长为真正的模特(并且拥有不止两个领域),否则我认为您可能需要考虑这一点。

【讨论】:

    【解决方案2】:
    function Employee(params) {
        if (typeof params != "undefined") {
            this.Name = (typeof params.name != "undefined") ? params.name : "";
            this.DateOfBirth = (typeof params.dob != "undefined") ? new Date(params.dob) : null;
        }
    }
    
    new Employee({
        name: "John",
        dob: "12/12/12"
    });
    new Employee({
        name: "John"
    });
    new Employee({
        dob: "12/12/12"
    });
    

    或使用|| 的简单语句。

    function Employee(params) {
        params = params || {};
        this.Name = params.name || "";
        this.DateOfBirth = new Date(params.dob || "");
    }
    

    【讨论】:

    • typeof 是一个运算符,而不是一个函数。请考虑typeof name !== "undefined"。另外,我认为设置默认值(如您的情况下的空字符串)和保持值undefined 之间存在很大差异。最后一件事,您的第一个示例不起作用(您设置为 null,但与完全不同的 undefined 进行检查),请考虑修改这些内容。
    【解决方案3】:

    作为一种良好做法,您永远不应遗漏变量。 你可以显式调用var emp = new Employee(null, "12/12/12");

    这样一切都被初始化了,以后你就不会头疼了。 也有类似的,但你确实需要在分配之前检查值。

    function Employee() {
           this.Name = name;
           this.DateOfBirth = new Date(dob);
       }
    
    var emp = new Employee(name = null,dob = "12/12/12");
    

    【讨论】:

    • 您在这里定义了两个全局变量! 您正在创建一个 name 全局变量和一个 dob 全局变量。 OP也想要一个清晰的语法。此外,在 JavaScript 中,null 和 undefined not 含义相同。
    • 是的......你是对的。对于那个很抱歉。我只是开始了解变量在 js 中的实际工作方式
    猜你喜欢
    • 2018-05-07
    • 1970-01-01
    • 1970-01-01
    • 2021-06-08
    • 2018-05-08
    • 1970-01-01
    • 1970-01-01
    • 2021-11-14
    相关资源
    最近更新 更多