Nodejs奇葩语法,arguments

Nodejs奇葩语法,arguments

为何不在传参列表里显式表示参数? 赶脚用个arguments,容易出错:(

6 回复

Node.js 奇葩语法:arguments

在 JavaScript 中,arguments 是一个内置对象,它是一个类数组对象,包含了函数调用时传递的所有参数。虽然 arguments 在某些情况下非常有用,但它也可能会导致一些不易察觉的错误。因此,在现代 JavaScript 开发中,通常推荐使用显式的参数列表来代替 arguments

为何不在传参列表里显式表示参数?

显式地列出参数可以提高代码的可读性和可维护性。通过明确列出每个参数,其他开发者可以更容易地理解函数的预期输入。此外,显式参数还可以利用 JavaScript 的默认参数、剩余参数等新特性,使代码更简洁和健壮。

示例代码

假设我们有一个简单的函数,用于计算两个数字的和:

使用 arguments 的版本:

function sum() {
    var total = 0;
    for (var i = 0; i < arguments.length; i++) {
        total += arguments[i];
    }
    return total;
}

console.log(sum(1, 2, 3)); // 输出 6
console.log(sum(1, 2, 3, 4)); // 输出 10

在这个例子中,sum 函数使用 arguments 来接受任意数量的参数。这看起来很灵活,但有几个潜在问题:

  • 可读性差:没有明确列出参数,其他开发者可能不清楚函数需要哪些参数。
  • 类型检查困难arguments 只是一个类数组对象,无法直接进行类型检查。
  • 错误处理复杂:如果传递了非数字参数,需要手动进行类型检查。

使用显式参数的版本:

function sum(...args) {
    return args.reduce((total, num) => total + num, 0);
}

console.log(sum(1, 2, 3)); // 输出 6
console.log(sum(1, 2, 3, 4)); // 输出 10

在这个改进的版本中,我们使用了 ES6 的剩余参数语法 ...args。这种方式不仅提高了代码的可读性,还利用了 reduce 方法简化了累加逻辑。

总结

虽然 arguments 在某些场景下有其用途,但在大多数情况下,使用显式的参数列表会带来更好的开发体验和代码质量。通过这种方式,可以更好地利用现代 JavaScript 特性,如默认参数、剩余参数和解构赋值,从而写出更清晰、更易维护的代码。


个人感觉这是个很灵活的语法, 在常规用法中,完全可以无视arguments对象,通过传递参数即可完成大多数的操作。感觉这里完全可以和其他语言一样的用法

function Person(name, age, gender) {
    // .. do something
    // 感觉这里和其他语言不同的地方就是没办法检查参数的合法性
}

如果有特殊的需求,那么感觉arguments是非常灵活的,比如javascript没有方法重载的语法,那么就可以通过arguments对象来灵活的实现类似重载的方法。

function Person() {
    switch(arguments.length) {
        // case ... 虽然这个实例没有多大的意义 -.-
    }
}

另外还有好多时候我们可以通过arguments对象来判断传参数中是否有某个类型的参数,然后进行对应的操作。等等。 所以感觉arguments是个很灵活的东西, 正所谓奇葩的语法能解决更奇葩的需求 ~ 呵呵 ~ 纯属个人看法 ~

为何js解释器不支持OO特性呢:(

你可以选择不用啊

这个还真不行。。。

在Node.js中,arguments对象是一个类数组对象,它包含了函数调用时传递的所有参数。这种语法在某些情况下非常有用,但在其他情况下可能会导致代码难以理解和维护。因此,如果你希望代码更清晰和易于理解,通常建议在函数定义中显式列出所有参数。

示例

假设有一个简单的函数,用于计算两个数的和:

使用 arguments 对象:

function sum() {
    let total = 0;
    for (let i = 0; i < arguments.length; i++) {
        total += arguments[i];
    }
    return total;
}

console.log(sum(1, 2)); // 输出 3
console.log(sum(1, 2, 3, 4)); // 输出 10

使用显式参数:

function sum(a, b) {
    return a + b;
}

console.log(sum(1, 2)); // 输出 3
// 如果需要更多参数,可以考虑使用剩余参数语法
function sum(...args) {
    return args.reduce((total, num) => total + num, 0);
}

console.log(sum(1, 2)); // 输出 3
console.log(sum(1, 2, 3, 4)); // 输出 10

解释

  • arguments 对象:可以在函数内部访问所有传递的参数,而不需要在函数签名中显式列出它们。这使得函数具有更强的灵活性,但同时也降低了代码的可读性和可维护性。
  • 显式参数:在函数定义中明确列出参数,使得函数的目的更加清晰。如果需要处理不定数量的参数,可以使用ES6中的剩余参数语法 (...args),这样代码既清晰又灵活。

总的来说,虽然 arguments 对象在某些情况下很有用,但在大多数情况下,显式列出参数并使用现代JavaScript语法(如剩余参数)会使得代码更易于理解和维护。

回到顶部