如何用变量调用对象属性?代码遇Uncaught SyntaxError报错求助
解决通过字符串调用对象属性/方法的问题
首先,咱们拆解你遇到的两个核心问题:语法错误,以及属性与方法的逻辑混淆。
1. 关于Uncaught SyntaxError: Unexpected token [
这个错误几乎肯定是你实际代码的语法写错了——比如你可能误写了这种错误格式:
myobject.[show].thisfunction(); // ❌ 点操作符后不能直接跟方括号
正确的属性/方法访问逻辑是二选一:要么用点语法(myobject.lastName),要么用方括号语法(myobject[show]),不能把两种语法错误地拼接在一起。
2. 你的示例代码本身的逻辑问题
看你给出的代码:
var myobject = { firstName: "Bob", lastName: "Joe" }; var show = "lastName"; myobject[show].thisfunction();
这里myobject[show]拿到的是字符串"Joe",而字符串本身并没有thisfunction这个自定义方法——就算语法写对了,运行时也会抛出TypeError,提示“无法读取未定义的属性'thisfunction'”。
正确的实现方式
根据你的需求,分两种场景处理:
场景1:通过字符串调用对象的自定义方法
如果lastName是一个方法(而非字符串属性),需要把它定义为函数类型:
var myobject = { firstName: "Bob", // 将lastName设为方法 lastName: function() { return "Joe"; }, // 定义你要调用的thisfunction thisfunction: function() { console.log("thisfunction执行了!"); } }; var show = "lastName"; // 调用lastName方法,注意要加() console.log(myobject[show]()); // 输出 "Joe" // 如果要调用thisfunction,用对应的属性名字符串 var funcKey = "thisfunction"; myobject[funcKey](); // 输出 "thisfunction执行了!"
场景2:调用属性值(比如字符串)的原生方法
如果lastName确实是字符串属性,你可以调用字符串自带的原生方法,比如:
var myobject = { firstName: "Bob", lastName: "Joe" }; var show = "lastName"; // 调用字符串的toUpperCase方法 console.log(myobject[show].toUpperCase()); // 输出 "JOE"
关键总结
- 方括号语法
obj[variable]是完全合法的属性/方法访问方式,但不要和点语法错误拼接(比如obj.[variable]是无效写法) - 调用方法前,务必确认你通过方括号获取到的是函数类型的值,否则会抛出类型错误
内容的提问来源于stack exchange,提问作者Matt
相关产品推荐
相关产品推荐

