【问题标题】:handle empty object passed as argument in javascript处理在javascript中作为参数传递的空对象
【发布时间】:2013-11-18 19:12:27
【问题描述】:

大家好。

我有这个问题:我必须提供一种方法来将一些可选参数传递给 javascript 函数,这很容易,好的。我决定让所有参数成为一个对象,因此任何需要调用该函数的人都必须提供参数的名称。但大多数时候,编辑器只是简单地使用整个参数对象调用函数,而不会省略空参数,因为参数是通过另一种方式传递给页面的(比如说在查询字符串中,但这并不重要)。

这是我制作函数的方式:

function playAnimation(options) {
var timeOutAnimation = options.animationDuration || 15;
var backgroundColor = options.color ; // this argument will be always present, so no default.
//more code...
}

这就是调用(我使用 php 代码作为示例)

$(document).ready(function(){
    var opt = {
        animationDuration: '<?php echo $_GET['stopAnimationAfter'] ?>', //could be a number, or nothing.
            color: 'black'
        }
    playAnimation(opt);     
});

问题是参数被传递,并且它永远不会落在默认值上。我无法更改调用函数的方式(即检查“get”参数的可用性并相应地构建函数调用,我必须找到一种方法来测试我的 javascript 中的参数。

有没有一种安全的方法可以做到这一点,例如 options.animationDuration === "undefined"(不起作用)或其他什么?

解决方案:在调用中的每个参数周围加上'',使参数相应地是满的或空的。然后我可以测试它们。

【问题讨论】:

  • options.animationDuration 的值是多少?如果那个值是错误的,我不明白为什么它不会回到默认值。 options.animationDuration 的值是真的吗?
  • 它可以是一个数字,或者什么都不是,如果“get”参数存在,那么它是一个数字,否则,它什么都没有。

标签: javascript function arguments


【解决方案1】:

你可以使用:

function playAnimation(options) {
    options = options || {}
    var timeOutAnimation = options.animationDuration || 15;
    var color = options.color;
}

将选项设置为一个空对象(如果它不存在)。如果需要,您还可以像这样检查未定义:

if(typeof options === "undefined") {
    // options not passed
}

这是一个fiddle 演示。

【讨论】:

  • 对不起,我会添加更多信息,但选项可能包含更多参数,其中一些可以设置,而另一些则不能...
  • 没关系。 options 未定义或未定义,在这种情况下您可以使用默认选项
猜你喜欢
  • 2017-05-20
  • 1970-01-01
  • 1970-01-01
  • 2013-05-28
  • 1970-01-01
  • 2018-02-23
  • 2012-05-30
  • 1970-01-01
  • 2017-03-29
相关资源
最近更新 更多