js在处理字符串和数值加运算的时候会转换数值为字符串 然后执行字符串连接
在覆盖String.prototype.valueOf之前,new String(111)这样的字符串与数值加法也是字符串连接:
> var s = new String(11);
undefined
> s+11
'1111'
重写String.prototype.valueOf之后 用new String("xxx")构造的字符串对象会转换成数值与数值进行加法运算 而字符串常量仍旧是字符串连接
如下:
> String.prototype = function(){
... return 11;
... }
[Function]
> str = "22";
'22'
> var str2 = new String("22");
undefined
> var str3 = new String(22);
undefined
> 11+str
'1122' > 11+str2
22
> 11+str3
22
>