首先,js的typeof返回的是字符串 一共有 “number”, “string”, “boolean”, “object”, “undefined” “function” 其实function也是object,为什么这么返回我也不知道 在进行( - * / % )运算时 基本类型的转换形式 先说加,这个与其他的不太一样。无论什么类型,遇到string都会转换成字符串。比如 true '1' => 'true1'
undefined '1' => 'undefined1'
null '1' => 'null1'
其余时候是转换成数字。 null, false => 0
undefined => NaN
true => 1
其他运算符,那就没办法做字符串拼接操作了,统一转化成"number"类型(即使是string类型也不例外) "a1" => NaN
"1" => 1
大概很好理解吧,如果是纯数字就能转,不是纯数字,就会转成NaN 对象 分类讨论 如果是 ,会调用toString()方法,
![在这里插入图片描述](http://image109.360doc.com/DownloadImg/2019/05/2714/162223849_1_20190527024939457.png) 如果是其他的,则会调用valueOf,基本上可以说,如果你没有自己去覆盖valueOf方法,那答案就必定是NaN。 JavaScript调用该valueOf方法将对象转换为原始值。您很少需要自己调用该valueOf方法; 当遇到期望原始值的对象时,JavaScript会自动调用它。 默认情况下,该valueOf方法由后代的每个对象继承Object。每个内置核心对象都会覆盖此方法以返回适当的值。如果对象没有原始值,则valueOf返回对象本身。
这是mdn关于valueOf的描述 我的理解是,首先,js一切皆为对象。包括string,number,boolean。 上面这几种,他们是有原始值的,所以valueOf()会直接返回本身。
![在这里插入图片描述](http://image109.360doc.com/DownloadImg/2019/05/2714/162223849_2_20190527024939629) Object类型,一般是不会自己设valueOf()的,所以会返回对象本身
![在这里插入图片描述](http://image109.360doc.com/DownloadImg/2019/05/2714/162223849_3_20190527024939957) 如果想要对象参与运算,最好先给他定义valueOf和toString方法,否则肯定是要出现你不想要的答案 转化成Number类型会先调用valueOf(), 转化成String类型会先调用toString(), ![在这里插入图片描述](http://image109.360doc.com/DownloadImg/2019/05/2714/162223849_4_2019052702494082.png)
function MyNumberType(n) {
this.number = n;
}
MyNumberType.prototype.valueOf = function() {
return this.number;
};
var myObj = new MyNumberType(4);
myObj 3; // 7
![在这里插入图片描述](http://image109.360doc.com/DownloadImg/2019/05/2714/162223849_5_20190527024940222) 这个可以解释
![在这里插入图片描述](http://image109.360doc.com/DownloadImg/2019/05/2714/162223849_6_20190527024940363)
if判定条件里,应该是要先转化成boolean类型, 如null, ‘’, undefined, NaN, 0 => false 来源:http://www./content-4-208651.html
|