Javascript:在函数声明中设置变量

时间:2014-03-02 15:30:06

标签: javascript

我有以下javascript代码:

    function toggleHiddenOps(dir, tour = false){
        // do stuff
    }

我注意到它在Chrome和IE中突破(似乎在FF 27中工作)。如果我将上述内容更改为:

    function toggleHiddenOps(dir, tour){
        // do stuff
    }

它解决了这个问题。在JS中声明这样的变量是否存在问题?或许我的问题实际上在别的地方?

感谢。

4 个答案:

答案 0 :(得分:1)

此功能目前仅存在于FF中。它will be in ECMAScript6,所以期望它随着时间的推移开始出现在其他引擎中。

Chrome,IE,Opera和Safari在最新版本中不支持该语法。

请参阅:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/default_parameters?redirectlocale=en-US&redirectslug=JavaScript%2FReference%2Fdefault_parameters

一个好的解决方法是使用arg= typeof arg !== 'undefined' ? arg : defaultValue;

例如:

function multiply(a, b) {
   b = typeof b !== 'undefined' ?  b : 1;
   return a*b;
}

multiply(5); // 5
  

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/default_parameters

答案 1 :(得分:0)

您不能使用PHP语法在JS中指定默认值。

公平地说,草案ECMAScript 6规范允许指定默认参数值,就像在PHP中一样,甚至在Firefox 15+中也支持这一点,但请注意,ES6本身的支持主要是实验性的,理论上可以在任何地方更改或删除点。

在未指定参数的情况下检查JS的面向未来/跨浏览器的方式如下:

function toggleHiddenOps(dir, tour) {
    if ('undefined' === typeof tour) {
        tour = 'Some default value';
    }

    // do stuff
}

答案 2 :(得分:0)

这在javascript中是非法的。

如果您想要默认false

function toggleHiddenOps(dir, tour){
   tour = tour === void(0) ? false : tour;
   // do stuff
}

如果你只关心它的错误:

function toggleHiddenOps(dir, tour){
   // do stuff, tour equals undefined now if not passed 2nd param
}

答案 3 :(得分:0)

Javascript函数不支持默认参数,黑客攻击是:

function toggleHiddenOps(dir, tour){
    tour = typeof tour === 'undefined' ? 'default value' : tour
    console.log(dir)
    console.log(tour)
}
toggleHiddenOps('dir')