困惑于大括号与props的行为,求解析代码报错原因
大括号与Props行为问题解析
先看你测试的代码:
function Give({need}){ let type1={need===true?'chemist':'others'} let type2={need}===true?'chemist':'others' }
报错含义
报错提示Unexpected token, expected ",",意思是JS解析器在第4行第17位识别到了不符合语法的内容,它原本预期这里是逗号(用于分隔对象的键值对),但实际是三元表达式的开头,因此触发语法错误。
为什么会出现这种情况
你混淆了JSX中的大括号和纯JavaScript中的大括号的作用:你之前了解的是JSX里的大括号(用来在类HTML结构中嵌入JS表达式),但这段代码是纯JS函数,不属于JSX环境,大括号的含义完全不同。
type1的语法错误原因
你写的{need===true?'chemist':'others'}被JS解析成对象字面量,但对象字面量必须遵循键: 值的结构。这里既没有明确的键名,也没有用[]包裹计算属性(正确计算属性写法是{[表达式]: 值}),解析器无法识别该语法,认为你漏写了逗号,于是报错。
如果你的意图是根据need的值得到对应字符串,正确写法应该直接去掉大括号:
let type1 = need === true ? 'chemist' : 'others';
type2的语法合法性(注意逻辑存在问题)
{need}是JS对象的简写语法,等价于{need: need},也就是创建一个包含need属性的对象。你用这个对象和true做全等比较,语法上是合法的,但逻辑完全错误——对象和布尔值true比较永远返回false,所以type2永远会是'others'。
内容的提问来源于stack exchange,提问作者cheems
相关产品推荐
相关产品推荐

