avaScript的实际参数的个数有时候是不确定的。 本关任务:学习处理未定义的实参。 相关知识 函数的基本功能是对函数内的参数进行操作,其中,函数定义时的参数被称为形式参数,函数被调用时传入的参数被称为实际参数。 未定义的实参 在大部分的编程语言里面,都会对调用函数时传入的实参个数和类型进行检查,而JavaScript既不检查实参的类型,也不检查实参的个数。 JavaScript中的实参会按照顺序从左到右依次匹配上形参,例如: function myFunction(a,b,c) { console.log(a); console.log(b); console.log(c); } myFunction(1,2,3); 实参1传入形参a,实参2传入形参b,实参3传入形参c。 当实参个数少于形参时,靠右的形参会被传入值undefined。如: function myFunction(a,b,c) { console.log(a); console.log(b); console.log(c); } myFunction(1,2); 实参1传入形参a,实参2传入形参b,undefined传入形参c。 如果只想给右侧的参数传入数据,可以给前几个实参传入undefined。如: function myFunction(a,b,c){ console.log(a); console.log(b); console.log(c); } myFunction(undefined,1,2); 上面这两种做法不够严谨,最佳实践是给可能被传入undefined值的形参设定一个默认值。如: function getSum(a,b,c) { if(c === undefined) c = 0; console.log(a+b+c); } myFunction(1,2); 编程要求 本关的编程任务是补全右侧代码片段中Begin至End中间的代码,具体要求如下: 路口有四个方向的红绿灯,其默认值分别是green、green 、red和yellow; 对于函数mainJs(a,b,c,d)的四个参数,要求在没有传入实参或者传入undefined时,其分别设置为上述默认值; 最后返回四个字符串型参数的拼接结果,字符串中间用-符号隔开,如分别传入red、red、yellow和undefined时,返回red-red-yellow-yellow; 具体请参见后续测试样例。 测试说明 测试过程: 平台将读取用户补全后的UndefinedArguments.js; 调用其中的mainJs()方法,并输入若干组测试数据; 接着根据测试结果判断程序是否正确。 以下是测试样例: 测试输入: red,red,red 预期输出: red-red-red-yellow
时间: 2025-06-25 20:25:59 浏览: 15
### 解题思路与代码实现
#### 题目分析
题目要求我们编写一个函数 `mainJs(a, b, c, d)`,能够根据输入的参数情况动态地设置默认值。如果没有传入某个参数或者传入的是 `undefined`,则需要为其指定默认值。
已知条件:
- 四个方向红绿灯的默认颜色分别为:`green`, `green`, `red`, 和 `yellow`。
- 拼接这四个字符串时需要用 `-` 符号连接起来。
- 参数可以部分传递甚至完全省略,此时需自动填充为默认值。
---
### 实现步骤
1. **检查每个参数是否为 `undefined`**:
如果某参数是 `undefined`,就将其替换为预设的默认值。
2. **拼接字符串**:
将处理过的参数按顺序用 `-` 连接成一个完整的字符串。
3. **返回结果**:
最终将生成的字符串作为结果返回。
---
### 最终代码
```javascript
function mainJs(a, b, c, d) {
// 设置默认值
if (a === undefined) a = "green";
if (b === undefined) b = "green";
if (c === undefined) c = "red";
if (d === undefined) d = "yellow";
// 返回拼接后的字符串
return `${a}-${b}-${c}-${d}`;
}
// 测试示例
console.log(mainJs("red", "red", "red")); // 输出 red-red-red-yellow
console.log(mainJs()); // 输出 green-green-red-yellow
console.log(mainJs(undefined, "yellow")); // 输出 green-yellow-red-yellow
```
---
### 程序解析
1. **默认值初始化**:
对于每一个参数,先判断它是否等于 `undefined`,如果是,则赋予相应的默认值。
2. **模板字符串拼接**:
利用 JavaScript 的模板字符串功能(`${}`),方便高效地完成字符串间的拼接工作。
3. **灵活性支持**:
即使只提供了一部分参数甚至是完全没有提供参数的情况,也能正确输出满足需求的结果。
---
### §相关问题§:
1. **除了直接使用 `if` 条件语句外,还有更简洁的方式来设定参数默认值吗?**
是的,在 ES6 中可以直接在函数声明处定义默认参数值。例如:
```javascript
function mainJs(a = "green", b = "green", c = "red", d = "yellow") {
return `${a}-${b}-${c}-${d}`;
}
```
2. **为什么这里要特别关注 `undefined` 而不是 `null`?**
在 JavaScript 中,`null` 表示“有意缺席”,而 `undefined` 才代表参数未被显式传递。因此,默认值判定一般针对 `undefined`。
3. **如果有额外的需求——比如允许自定义所有信号灯的状态列表怎么办?**
我们可以用数组代替固定长度参数的设计模式,同时结合解构赋值及扩展运算符来增强通用性和可维护性。
阅读全文
相关推荐














