6个意象不到的javaScript输出值

78 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第9天,点击查看活动详情

前言

作为前端开发工程师,JavaScript是我们主要的开发语言,是每个人必须要掌握的,它是弱类型语言,本身语法也比较简单,但是在我们平时使用中也会遇到很多奇奇怪怪的问题,下面分享了几个比较有意思的问题,希望对大家有所帮助同时欢迎讨论指出问题!

1.!!“”

!!""//false


详解:
"";   //false""; //true
!!""; //false

!表示运算符“非”,如果变量不是布尔类型,会将变量自动转化为布尔类型,再取非

!!表示在逻辑“非”的基础上再"非"一次,那么!!就可以转化为对应布尔值.简而言之就是负负得正

示例:

!!0//false
!!"PP";   //true
!!123456; //true

2.true+false

true+false   //1
详解:
Number(true); // -> 1
Number(false); // -> 0
1 + 0; // -> 1

布尔值类型与其它任何类型进行比较,布尔值类型将会转换为number类型。

注意这些特殊的值:0,+0,-0,"",NAN,false,null, Number()都为0;undefined 为NAN

3. +!![]

[]//true


详解:
[]//true
!![];    //true
+!![];   //1

此处用了双非号,显示数组Number()为true,两个!为双非号 转化为对应的布尔值true ,此处+ 为正号,将其转化为数字1

4."" - - ""

"" - - "" //0 
详解:
换个写法:
+"" - -"";
+0 - -0;

此处考的是 Number("") 等于0,减号和空字符串之间放置空格只是为了混淆您的眼睛,但减号之间的空格很重要。如果没有空格就会报错哦!

5. 0.1 + 0.2 === 0.3

0.1 + 0.2 === 0.3 //false
详解:
0.1 -> 0.0001100110011...(0011 无限循环)
0.2 -> 0.001100110011...(0011 无限循环)
0.1+0.2== 0.30000000000000004

先看一下0.1+0.2 等于多少,为什么不是0.3呢?

JS是不区分整数和浮点数的,js的number类型是浮点型,浮点型是用二进制表示的,但是二进制浮点数表示法并不能精确的表示类似 0.1 这样 的简单的数字,会有舍入误差。在它们相加的时候,两个近似值(50位)进行了计算,导致最后的结果出现0.30000000000000004,此时对于JS来说,其不够近似于0.3,所以出现了0.1+0.2 != 0.3。