(1)比较两个数的大小:
数值型的我们不用比较,只做下字符串与数值型和字符串与字符串之间的比较。
上面例子中的数据完全和《第四章:第11节 PHP运算符-比较运算符》的数据一样
可结果却不太一样:
总结下:
1)在JS中,字符串与字符串做比较,按两边首个字符的ascii码对应的值比较,首字符一样,就往下比较,直到不一样分出大小。
2)在PHP中,如果两边都是纯数字字符串,转为数字比较。可在JS中,还是当做字符串去比较。(重点!易出错的地方)
3)在PHP中,如果一边有数字(整数型、浮点型),另一边转为数字比较。JS也符合这项规则,另一边如果是纯数字字符串会转成数字,不是纯数字字符串会变成数字NaN。
4)如果有布尔值,true转换数值1,false转换数值0做比较。这点JS和PHP是一样的。
(2)比较两个数是否相等:
document.write(0 == "");//true
总结:
1)字符串与字符串做相等比较,会比较两个字符串是否完全一样。哪怕是两个纯数字字符串,也是做字符串相等比较,而不是数字比较。这点和PHP不一样。
2)数值与字符串相等比较,字符串会转成数值型,和PHP一样。
3)数值与布尔值相等比较,布尔值false会转成数值0,true会转成数值1。这点和PHP不一样,在PHP中是数值转成布尔值。
4)字符串与布尔值相等比较,它们都是转成数值后做相等比较。(也就是所有的比较都转成数值型为准)这点也和PHP不一样,这样就会出现下面的情况:
在PHP下,上面两个if语句都是真(true);而在JS,上面两个if语句第一个是真(true),第二个是假(false)。
注意:if语句在程序中用得非常多,喜欢这样写if条件的朋友要特别注意下,不然会出错的。
5)“undefined”和“null”最好不要参与相等比较,经过楠神几次测试,出现这样的结果:
“undefined”和“null”是可以相等的,但与其他数据类型全不是相等的。
三节内容总结:
通过这三节内容介绍,会发现JS虽然和PHP语法相差不多,可某些数据运算后的结果却完全不一样。所以我们一定要搞清楚,不然在写JS代码时很容易想当然地把PHP中运算结果想象成JS也是这样的结果,这样很容易给自己造成困惑。
通过与JS的比对,楠神感觉还是PHP更人性化,比较符合人直观的思维。比如:
"0"转成布尔值,第一反应把它当成false,可JS却偏偏把它当成true;
'30000' > '100000',第一反应会认为它是false,可JS却偏偏把它当成true。
null == false ,第一反应会认为它是true,可JS却偏偏是false。
10+'20',第一反应会认为结果是30,可JS却把它当字符串连接起来了。
总之,JS处处是“陷阱”。