传递键值时JavaScript函数返回undefined的问题排查
问题分析与解决方案
这个问题的核心是你在访问对象属性时用错了语法,导致无法正确获取到目标属性值~
问题根源
在你的代码里,var b = matrix.a;这一行是关键错误:JavaScript里的点语法(.)会把后面的a当成字面量属性名,也就是它会去matrix对象里找名为"a"的属性,而不是把变量a的实际值(也就是传入的"key1")作为键名去查找,所以最终返回了undefined。
修正后的代码
只需要把属性访问的语法改成方括号[]形式,就能解决问题,完整代码如下:
var testfunc = function(a) { var matrix = { key1: ["first", "second"], key2: ["third", "fourth"] }; var b = matrix[a]; // 改用方括号语法,用变量值作为键名 console.log(a); console.log(b); } var otherfunc = function() { return "key1"; } testfunc(otherfunc());
语法区别说明
- 点语法(
.):只能用于固定的、已知的属性名,比如matrix.key1,这里的属性名是写死的字符串"key1"。 - 方括号语法(
[]):可以接受变量、表达式作为键名,它会先计算括号内的值,再用这个结果去对象中匹配对应的属性,完美适配你这里用变量动态获取属性的场景。
运行修正后的代码,控制台就会输出你预期的结果:
key1 ["first", "second"]
内容的提问来源于stack exchange,提问作者boller002
相关产品推荐
相关产品推荐

