提问人:M A 提问时间:10/5/2023 最后编辑:M A 更新时间:10/5/2023 访问量:65
在 Javascript 函数中获取变量 outside-name?[复制]
Getting variable outside-name inside Javascript function? [duplicate]
问:
我正在尝试处理一些列出数据内部对象(无论有多深)并带有间距的东西。
像这样:
const data = [1,2,3];
test(data);
Output:
"[
1,
2,
3
]"
到目前为止,我已经解决了获取对象变量名称等的所有噱头,因此得到了类似的东西:
const data = {a: 1, b: 2};
test(data);
Outputs:
"{
a: 1,
b: 2
}"
因此,我能够递归地循环几乎所有内容,并且我还添加了第二个参数以能够搜索给定的键或变量。
所以这已经是有效的代码,但我缺少的是我想用给定给函数的对象名称开始打印,类似于:
const data = "hello";
test(data);
Outputs:
"data: "hello""
或
const data = {a: 1, b: 2};
test(data);
Outputs:
"data: {
a: 1,
b: 2
}"
我尝试了 Object.keys,但我无法访问函数外部的对象名称。
我已经看到您可以通过在 start 中将给定变量分配为对象来做到这一点,例如: 测试({数据});
因此,通过这种方式,这将生成一个传递的对象,其中有一个数据键和数据值。
但我只是想知道这是否可以在没有的情况下完成?
我只是想让我的编码伙伴们尽可能简单,并且更喜欢按原样传递的变量,而不添加任何额外的内容。
为了避免任何混淆,我想要的只是函数开始编写带有变量名称的输出(在本例中;data),以 “[variable name]: ” 开头,或如示例 “data: ”,在调用函数时不要尝试添加大括号。
像这样:
function getObjectData(o) {
oName = ...
console.log(oName + ": " + o)
}
这要简单地称为(同样,没有大括号):
const data = "hello";
getObjectData(data);
并产生输出:
"data: hello"
答:
2赞
Florent M.
10/5/2023
#1
在原生 JavaScript 中,变量本身不能直接传递到函数中。相反,传递的是存储在变量中的值。
但是,您可以使用解决方法,方法是传递一个将变量保存为属性的对象。这样,您可以访问函数中的键(变量名称)和值。
下面是一个示例:
test({data})
function test(obj) {
const key = Object.keys(obj)[0];
const value = obj[key];
console.log(`${key}: ${JSON.stringify(value)}`);
}
评论
0赞
M A
10/5/2023
谢谢,但我正在寻找可以不用大括号的东西。我看到有一些可能性可以尝试通过循环窗口来获取变量名称,现在尝试测试一下。
0赞
Florent M.
10/5/2023
只有当变量是全局变量时,您的变量才会存储在变量中,即使它是全局变量,我也不认为遍历所有属性是一个有效的解决方案。由于属性数量过多,这可能会导致性能下降,如果多个变量具有相同的值,则此方法将不起作用window
window
2赞
Florent M.
10/5/2023
这是不可能的,函数不能知道变量的原始名称,只能知道参数的名称。所以是的,你被全局方法困住了,如果两个属性具有相同的值,你可以同时显示它们。我不知道你的用例,但它似乎有点混乱。
1赞
Nick Parsons
10/5/2023
除此之外,全局方法不适用于使用 或(或者如果您在模块中使用)声明的变量,即使在脚本的顶层声明也是如此,所以我认为这是最好的选择。let
const
class
var
1赞
Florent M.
10/5/2023
如果仅用于调试目的,则使用 IDE 调试器将提供变量及其值
评论
global
global
window
const
let
class
var
function
window