js隐式转换

参考文章:https://www.cnblogs.com/ihboy/p/6700059.html

首先,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()方法,
在这里插入图片描述
如果是其他的,则会调用valueOf,基本上可以说,如果你没有自己去覆盖valueOf方法,那答案就必定是NaN。

JavaScript调用该valueOf方法将对象转换为原始值。您很少需要自己调用该valueOf方法;
当遇到期望原始值的对象时,JavaScript会自动调用它。

默认情况下,该valueOf方法由后代的每个对象继承Object。每个内置核心对象都会覆盖此方法以返回适当的值。如果对象没有原始值,则valueOf返回对象本身。

这是mdn关于valueOf的描述
我的理解是,首先,js一切皆为对象。包括string,number,boolean。
上面这几种,他们是有原始值的,所以valueOf()会直接返回本身。
在这里插入图片描述
Object类型,一般是不会自己设valueOf()的,所以会返回对象本身
在这里插入图片描述
如果想要对象参与运算,最好先给他定义valueOf和toString方法,否则肯定是要出现你不想要的答案
转化成Number类型会先调用valueOf(), 转化成String类型会先调用toString(),

在这里插入图片描述

function MyNumberType(n) {
    this.number = n;
}

MyNumberType.prototype.valueOf = function() {
    return this.number;
};

var myObj = new MyNumberType(4);
myObj + 3; // 7

在这里插入图片描述
这个可以解释
在这里插入图片描述

if判定条件里,应该是要先转化成boolean类型,
如null, ‘’, undefined, NaN, 0 => false

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值