JavaScript的数据类型(一)

123 阅读3分钟
  • 01.关于js的数据类型,你有什么了解?
  • 02.说说,BigInt和Symbol
  • 03.说说null和undefined
  • 04.说说number,为什么0.1+0.2不是0.3

01. 关于 JavaScript 的数据类型,你有什么了解?****

javaScript的数据类型可以分为两类,一类是原始数据类型,一类是引用数据类型。原始数据类型有7种,number,string,boolean,null,undefined,BigInt,Symbol。对于原始数据类型来说,他们占的空间相对于引用数据类型来说,没那么大,所以原始数据类型保存在栈内存里。

  引用数据类型,其实就是各种对象,比如说数组,函数,正则,日期,对象等。它们的话,占用的空间要大一些,所以存放在堆内存里,以及在栈内存里存放一个指针指向这个堆内存中的对象。

02. 说说, BIgInt Symbol ****

Symbol和BigInt都是ES6新增的数据类型。

BigInt是数据类型的数据,用它可以保存和操作大整数,即使这个数超过了number能表示的整数范围。

(number能表示的整数范围:-9007 1992 5474 0991 到9007 1992 5474 0991 九千零七万一千九百九十二亿五千四百七十四万零九百九十)

  Symbol可以创建一个独一无二且不可变的数据,它主要是为了解决可能出现的全局变量命名冲突问题。

(全局变量命名冲突指的是:两个或多个全局变量有相同的名称。)(怎么解决全局变量命名冲突的问题:避免使用全局变量而是使用局部变量、使用命名空间、使用模块化)(怎么创建命名空间:创建对象字面量的形式或者模块化) (模块化:将代码分隔成独立的模块,每个模块都有自己的作用域)

03. 说一说 null undefined

 Null和undefined都是原始数据类型,都只有一个值。就是null和undefined。

 null表示一个空值,明确赋值为null。它用于表示一个空的或不存在的对象、变量或者表达式。

undefined的话,当声明了一个变量但是没有给它赋值时,这个变量的默认值是undefined。

 当使用双等号==对undefined和null进行比较时,会返回true;全等号进行判断时为false

2.null与undefined相等全等比较.png

当使用typeof对其进行判断时,结果不一样。undefined是undefined,null是object

1.类型判断.png

为什么用typeof对null进行判断时,返回object?

这属于历史遗留问题,因为在javaScript的早期版本里,单个值在栈中是占有32位来存储的,32位里面又可以分为类型部分与实际数据。其中表示这个数据是什么类型的用32位里的低3位表示。

其中null从第0位到第31位都是0,而第0位第1位第2位皆为0时判断为object。因此冲突了。

为了保持与早期代码的兼容,这个错误的表示就一直保留了下来。如果想正确判断一个值是否为null的话,使用全等号===来比较

4. 说一说 number ,为什么 0.1+0.2 不是 0.3 ****

3.0.1+0.2图.png

先是浮点数运算的精度问题,在计算的时候需要将数据转化为二进制再计算。

Javascript采用的是IEEE754的双精确度来表示浮点数。其中0.1,0.2转为为对应的二进制时都是无穷尽的,无法用二进制数精确表示,需要进行舍入,因此有精度的丢失。

 然后进行浮点数相加的时候,也会有精度的丢失。所以最终的结果不是0.3.

如何解决?

(1)使用整数运算:先把浮点数转化成整数来运算,算好后再转后为浮点数。

4.解决0.3的问题.png

(2)用toFixed()方法。toFixed()方法可以保留指定的小数位数,并返回字符串

5.toFixed()浮点数.png