如题:在获取JS传入参数及其数量时,有哪些正确和错误的做法(结合示例说明)?
本文参与了 【 HarmonyOS NEXT 技术问答冲榜,等你来战!】欢迎正在阅读的你也加入。
如题:在获取JS传入参数及其数量时,有哪些正确和错误的做法(结合示例说明)?
本文参与了 【 HarmonyOS NEXT 技术问答冲榜,等你来战!】欢迎正在阅读的你也加入。
arguments
对象在 JavaScript 函数内部,可以使用 arguments
对象来获取传递给函数的参数及其数量。
示例:
function exampleFunction() {
console.log("Number of arguments: " + arguments.length);
for (let i = 0; i < arguments.length; i++) {
console.log("Argument " + (i + 1) + ": " + arguments[i]);
}
}
exampleFunction(1, 'hello', true);
输出:
Number of arguments: 3
Argument 1: 1
Argument 2: hello
Argument 3: true
ES6 引入了剩余参数(Rest Parameters)语法,允许我们将一个不定数量的参数表示为一个数组。
示例:
function exampleFunction(...args) {
console.log("Number of arguments: " + args.length);
args.forEach((arg, index) => {
console.log("Argument " + (index + 1) + ": " + arg);
});
}
exampleFunction(1, 'hello', true);
输出:
Number of arguments: 3
Argument 1: 1
Argument 2: hello
Argument 3: true
如果不使用 arguments
对象或剩余参数语法,函数将只能访问其显式声明的参数,无法处理额外传递的参数或缺少的参数。
示例:
function exampleFunction(a, b, c) {
console.log("Argument 1: " + a);
console.log("Argument 2: " + b);
console.log("Argument 3: " + c);
}
exampleFunction(1, 'hello');
输出:
Argument 1: 1
Argument 2: hello
Argument 3: undefined
在这个例子中,尽管只传递了两个参数,函数仍然会尝试访问第三个参数(c
),结果会是 undefined
。
arguments
对象尽管 arguments
对象看起来像一个数组,但它并不是真正的数组,且修改 arguments
对象中的值并不会影响对应的命名参数,反之亦然(除非在非严格模式下且索引小于命名参数数量)。
示例(严格模式下):
'use strict';
function exampleFunction(a, b, c) {
arguments[0] = 10;
console.log("Argument 1 (arguments): " + arguments[0]);
console.log("Argument 1 (named): " + a);
}
exampleFunction(1, 'hello', true);
输出:
Argument 1 (arguments): 10
Argument 1 (named): 1
在严格模式下,修改 arguments
对象中的值不会影响命名参数。在非严格模式下,这种行为可能会有所不同,但通常也不建议依赖这种行为,因为它会导致代码难以理解和维护。
1 回答530 阅读✓ 已解决
1 回答537 阅读
1 回答480 阅读
492 阅读
491 阅读
496 阅读
461 阅读
正确做法:
nullptr
获取传入参数真实数量,再根据数量创建合适大小的数组来获取参数,如GetArgvDemo1
函数中,先通过OH_JSVM_GetCbInfo(env, info, &argc, nullptr, nullptr, nullptr)
获取参数数量,然后创建JSVM_Value* argv = new JSVM_Value[argc]
数组来获取参数,使用完后手动释放数组(delete argv
)。argc
和argv
的大小关系,如GetArgvDemo2
函数中,size_t argc = 2
,JSVM_Value* argv[2] = {nullptr}
,确保OH_JSVM_GetCbInfo
能正确写入参数。错误做法:
argc
未正确初始化,导致其值不确定,可能使argv
长度小于argc
声明数量,造成数据越界,如IncorrectDemo1
函数中,size_t argc
未初始化,JSVM_Value argv[10] = {nullptr}
,调用OH_JSVM_GetCbInfo
可能出错。argc
声明数量大于argv
实际初始化长度,导致OH_JSVM_GetCbInfo
写入argv
时数据越界,如IncorrectDemo2
函数中,size_t argc = 5
,JSVM_Value argv[3] = {nullptr}
,调用OH_JSVM_GetCbInfo
会出现问题。本文参与了 【 HarmonyOS NEXT 技术问答冲榜,等你来战!】欢迎正在阅读的你也加入。