首先看一段JS高级编程中,有关加法(+)操作符的解释:

js null加法的处理_js null


一个简单的测试:

alert(3 + null); // 3
alert('3' + null); // 3null


可见对于null的处理,并不是简单的取String。


ecma262的定义如下:

js null加法的处理_Addition_02


对第7、8步骤的理解:

7. 如果lprim或者rprim有一个的类型为String的话,则执行加法连接操作;

8. 否则,执行Number(lprim)+Number(rpirm)


所以:

alert(3 + null);

相当于

Number(3) + Number(null) = 3 // 注:Number(null)=0


alert('3' + null);

相当于

String('3') + String(null) = '3null'



个人对note1的理解:除了Date对象取String外,其他的引用型对象都取Number?有待验证!


例1:

var x = 5;
var y = new Date();
var z = x + y;
alert(z); // 5Thu Nov 21 2013 08:41:51 GMT+0800 (China Standard Time)


例2:

var x = '5';  // 注意区别
var y = new Date();
var z = x + y;
alert(z); // 5Thu Nov 21 2013 08:46:40 GMT+0800 (China Standard Time)


未完,待续..