JavaScript中实现默认参数的三种方法

作者:半夏

时间:2026-10-28

浏览:176

本文详解在JavaScript中实现默认参数的三种方案。首先介绍现代语法中的直接声明方式,接着针对旧版环境提供手动判断undefined的兼容写法,最后推荐利用对象合并库(如Underscore.js的extend方法)处理多参数默认值,确保代码简洁且具备向后兼容性。

文章目录

JavaScript默认参数概述

部分编程语言如Ruby、CoffeeScript以及未来的JavaScript标准,允许在定义函数时直接声明默认参数,示例如下:

代码如下:

function myFunc(param1, param2 = "second string") {
console.log(param1, param2);
}
// 输出:"first string" 和 "second string"
myFunc("first string");
// 输出:"first string" 和 "second string version 2"
myFunc("first string", "second string version 2");

手动判断undefined的兼容方案

然而,在当前的JavaScript版本中,这种语法写法无效。因此,我们需要利用现有工具集来实现类似功能。

最简单的解决方案如下所示:

代码如下:

function myFunc(param1, param2) {
if (param2 === undefined) {
param2 = "second string";
    }
console.log(param1, param2);
}
// 输出:"first string" 和 "second string version 2"
myFunc("first string", "second string version 2");

事实上,被省略的参数在访问时始终为“undefined”。如果仅有一个参数,这是良好的解决方式;但如果存在多个参数,该如何处理?

使用对象合并处理多参数

当参数数量超过一个时,可以使用对象作为参数传入,这样每个参数都有明确的命名。若传递对象参数,可采用相同方式声明默认值。

代码如下:

function myFunc(paramObject) {
var defaultParams = {
param1: "first string",
param2: "second string",
param3: "third string"
    };
var finalParams = defaultParams;
// 遍历paramObject的每个属性
 for (var key in paramObject) {
 // 如果当前属性不是继承的,则继续
 if (paramObject.hasOwnProperty(key)) {
 // 如果当前属性已定义,
 // 将其添加到finalParams
 if (paramObject[key] !== undefined) {
 finalParams[key] = paramObject[key];
 }
 }
 }
console.log(finalParams.param1,
 finalParams.param2,
 finalParams.param3);
}
myFunc({param1: "My own string"});

这种方式略显笨拙,如果多处使用,可以封装一个函数。幸运的是,许多库已提供相关方法,例如jQuery和Underscore中的extend方法。

下面使用Underscore的extend方法实现上述相同结果:

代码如下:

function myFunc(paramObject) {
var defaultParams = {
param1: "first string",
param2: "second string",
param3: "third string"
    };
var finalParams = _.extend(defaultParams, paramObject);
console.log(finalParams.param1,
 finalParams.param2,
 finalParams.param3);
}
// 输出:
// "My own string" 和 "second string" 和 "third string"
myFunc({param1: "My own string"});

这就是在当前JavaScript版本中实现默认参数的方法。

文中如有不妥之处,欢迎批评指正。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章