为何eval("{'x': gridSize, 'y':gridSize}")语句会抛出语法错误?
问题原因解析
- 核心问题出在eval对字符串的解析规则:它默认把传入的字符串当作**语句(statement)**执行,而非表达式(expression)。
- 当你传入
"{'x': gridSize, 'y':gridSize}"时,JS引擎会把{'x': gridSize, 'y':gridSize}当作一个代码块来解析:'x'会被识别为一个标签(label)(JS里标签用来标记循环/语句,格式是标签名: 语句)- 但标签后面需要跟合法的语句,而
gridSize后面直接跟逗号和'y':gridSize完全不符合语句语法,所以触发Unexpected token ':'错误。
- 而你直接写
{'x': gridSize, 'y':gridSize}时,代码处于表达式上下文,引擎会自动把它解析为对象字面量,自然能正常运行。
修复方法
给字符串里的对象字面量套一层括号,强制让eval把它当作表达式处理:
var gridSize = 20; eval("({'x': gridSize, 'y':gridSize})")
括号会改变解析优先级,让引擎把内部的{'x': ...}识别为对象表达式,而非代码块。
内容的提问来源于stack exchange,提问作者Felipe Ramos Mendes
相关产品推荐
相关产品推荐

