2f0f318d98d6fb482d5e52552d7c4660
从一道奇怪的题目谈 JavaScript 隐式转换

如果有人问你let param = new Boolean(false); param == false的结果是什么?你会怎么回答呢?

国外程序员出题

国外程序员出题

1.从一道题开始

我先把图片上的代码写出来,防止图片看不清楚。

let bool = new Boolean(false);
if (bool)
  console.log("js is amazing");

大家可以现在自己的浏览器控制台里试一下这段代码,看看结果是不是和图片中的一致。

这道题目的关键是判断 bool 的真假,我们先把 bool 打印出来看看。

let bool = new Boolean(false);
console.log(bool);

结果如下:

看到这里相信大家就明白了,原来bool是一个对象。那么在if判断的时候自然为真了,语句也就能输出出来了。

这个例子很好的说明了Boolean()new Boolean()的区别:

当Boolean()作为构造函数使用时,及 new Boolean()将把它的参数转换成一个布尔值,并且返回一个包含该值的 Boolean 对象。

上面的题目只是一个引子,下面才是重点-- JavaScript类型的显式转换和隐式转换。

2.JavaScript类型的显式转换

显式转换是指通过JavaScript的函数,按照JavaScript的规定对类型进行转换。我来举几个例子:

  • 转换为字符串:toString()
  • 转换为数字:parseInt(), parseFloat()
  • 强制转换
Boolean(0)                // => false - 零
Boolean(new object())   // => true - 对象
Number(undefined)       // =>   NaN
Number(null)              // => 0
String(null)              // => "null"

JavaScript显式转换的函数有很多高级的用法,比如转换为浮点数的函数 parseFloat() 可以指定小数位数。其他的转换函数的用法大家有需要的时候可以去百度或者谷歌,如果有想了解的用户可以给我留言,我可以单独写一篇文章介绍。

3.JavaScript类型的隐式转换

top Created with Sketch.