js中有默认的隐试转换
| 数字和字符串隐试转换规则 | 任何非零的数为true,0为false。 任何非空字符串为 true,空字符串为false。 |
如果想非自动隐试转换判断可以使用=== 或者 !==替代 ==和!==
如:
('' == 0) //true
('' === 0) //false
MyBatis的表达式是用OGNL处理的
OGNL对于boolean的定义和JavaScript有点像,即 '' == 0 == false

如我们经常使用到的MyBatis动态sql表达式:
<if test="x!= null and x!=''">
and x= #{x}
</if>
在对象为Number类型(包括浮点)时,值为0(0.00)将被解析为false;
出现此问题的根源在于编码的规范问题,只有String类型才需要判断是否 x!=''
参考:
本文探讨了JavaScript中数字与字符串的隐式转换规则,并指出如何避免非预期行为。同时,针对MyBatis动态SQL中OGNL表达式的特性进行了详细说明,特别是当对象为Number类型时,其值0被视为false的情况。
1129

被折叠的 条评论
为什么被折叠?



