分享

js隐式转换

 印度阿三17 2019-05-27

首先,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

来源:http://www./content-4-208651.html

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多