Sequelize中[Op.like]对象语法合法性及JS实现方式问询
问题解答
1. [Op.like]是否为合法的对象字段名?
这不是直接的“字段名”,而是ES6引入的计算属性名语法。它的作用是把Op.like表达式的求值结果作为对象的实际属性名,整个语法完全符合JavaScript规则。比如如果Op.like的值是字符串'$like',那最终生成的对象属性名就是'$like',而非字符串'[Op.like]'。
2. 执行title.[Op.like] = 'foo%'或title["[Op.like]"] = 'foo%'是否有效?
title.[Op.like] = 'foo%':完全无效,JavaScript的点语法要求后面必须是合法的标识符(不能是表达式),这种写法会直接抛出语法错误。title["[Op.like]"] = 'foo%':语法上有效,但它设置的属性名是字面量字符串'[Op.like]',和Sequelize示例里的逻辑完全不同——示例里是用Op.like的实际值作为属性名,而这里是把字符串'[Op.like]'当成属性名,无法被Sequelize识别为查询操作符。
3. 若该语法不符合JavaScript规则,应如何在JS中实现类似逻辑?
这个语法本身是ES6及以上版本支持的标准语法,不存在不符合规则的问题。如果要在不支持ES6的环境下实现相同逻辑,或者用更直观的方式编写,可以先计算出目标属性名,再通过方括号语法赋值:
// 先获取Op.like的实际值作为属性名 const operator = Op.like; const title = {}; // 用方括号语法赋值 title[operator] = 'foo%';
最终得到的对象和用计算属性名写法的结果完全一致。
内容的提问来源于stack exchange,提问作者Jose Cabrera Zuniga
相关产品推荐
相关产品推荐

