PHP和JavaScript中关于数字字符串比较的差异和坑 js告诉我 '17' < '9'

if ('17' < '9')
    echo 1;
else
    echo 0;

上面为PHP代码,下面为JavaScript代码。

if ('17' < '9')
    console.log(true);
else
    console.log(false);

如果是PHP,执行的结果是0,即false,而JavaScript执行的结果是true。

最近我把后端的一些处理逻辑挪到前端,直接使用关键词替换,很快捷的将PHP的代码转为js。直到有个用户向我反馈一个bug,我调试了许久也不知道问题出在哪儿,只好一个一个代码细推。当看到js信誓旦旦的告诉我17<9为true时,我震惊了。

原来,这不是两个数字,而是两个数字字符串。在js里,两个字符串进行大小比较时,是比较第一个字符的ASCII码,'1'的ASCII小于'9',所以'17'<'9'=true。而PHP则智能很多,当纯数字的字符串进行比较时,会转为整数变量。

但如果是字符串和数字比较,两个语言都会尝试将字符串转为数字。

解决方案很简单:通过Number()或parseInt()将js中的字符串变量强制转为数字。虽然PHP不会有这种问题,但出于安全起见,也可以在数据前加入 (int) 强制转换为整数变量。

欢迎来到Yari的网站:yar2001 » PHP和JavaScript中关于数字字符串比较的差异和坑 js告诉我 '17' < '9'