html中隐式转换成数字,js隐式转换

首先,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()方法,

406ce45c644a83a8558cf4065d1e1cc8.png

如果是其他的,则会调用valueOf,基本上可以说,如果你没有自己去覆盖valueOf方法,那答案就必定是NaN。

JavaScript调用该valueOf方法将对象转换为原始值。您很少需要自己调用该valueOf方法;

当遇到期望原始值的对象时,JavaScript会自动调用它。

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

这是mdn关于valueOf的描述

我的理解是,首先,js一切皆为对象。包括string,number,boolean。

上面这几种,他们是有原始值的,所以valueOf()会直接返回本身。

ac72a40768ad019de06a84a2e810ee1f.png

Object类型,一般是不会自己设valueOf()的,所以会返回对象本身

0f8e48045661bb413faf3845a29a8a18.png

如果想要对象参与运算,最好先给他定义valueOf和toString方法,否则肯定是要出现你不想要的答案

转化成Number类型会先调用valueOf(), 转化成String类型会先调用toString(),

e344fe6eeb46f7c8f3eaec1d1e1e3f38.png

function MyNumberType(n) {

this.number = n;

}

MyNumberType.prototype.valueOf = function() {

return this.number;

};

var myObj = new MyNumberType(4);

myObj + 3; // 7

a16a238fe2cb509eb1baaf4d6caddfd9.png

这个可以解释

c0cd881d32cfadc9820121534d500498.png

if判定条件里,应该是要先转化成boolean类型,

如null, ‘’, undefined, NaN, 0 => false

标签:调用,转换,string,对象,valueOf,NaN,number,js,隐式

来源: https://blog.csdn.net/sky1679/article/details/90602740

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值