js数据类型

185 阅读8分钟

JS的数据类型有8种。

在ES5的时候,我们认知的数据类型确实是 6种:Number、String、Boolean、undefined、object、Null。

ES6 中新增了一种 Symbol 。这种类型的对象永不相等,即始创建的时候传入相同的值,可以解决属性名冲突的问题,做为标记。

谷歌67版本中还出现了一种 bigInt。是指安全存储、操作大整数。(但是很多人不把这个做为一个类型)。

JS数据类型:JS 的数据类型有几种?

 8种。NumberStringBooleanNullundefinedobjectsymbol、bigInt。

js 规定的NaN 不等于NaN

image.png

Number相关的方法

toString()

  toString() 把数字转换成指定进制形式的字符串。

image.png

toFixed(num)

/*

  ``NumberObject.toFixed(num)

  ``把number数转换成一个十进制数形式的字符串。可选参数控制其小数点后的数字位数。

  ``它的值必须在0~20之间,默认为0,例如:

  ``可根据传入的参数保留小数点后几位

  ``toFixed()方法是在JavaScript1.5和JScript5.5中加入的,因此仅被Netscape6+

  ``和IE5.5+浏览器支持

  ``toFixed()在截取小数点后几位数的时候会进行四舍五入。

*/

image.png

关于NaN

1、Number.NaN:NaN是一个特殊的数值,NaN即非数值(Not a Number),这个数值用于本来要返回数值的操作数未返回数值的情况(这样就不会抛出错误了)。
2、NaN本身有两个非同寻常的特点。
首先,任何涉及NaN的操作,如NaN/10都会返回NaN,这个特点在多步计算中有可能会导致问题,但是同样也解决了如果出现任何数值/0会抛出错误,停止代码执行这样的情况。其次,NaN与任何值都不相等,包括NaN本身。
3、可以通过isNaN()方法来判断某个数值是否是NaN这个特殊的数。
使用isNaN()方法会将传入的数值如果是非数值的会将其自动转换成数值类型,若能转换成数值类型,那么这个函数返回false,若不能转换成数值类型,则这个数就是NaN,即返回true。
4、isNaN()方法确实适用于对象,在基于对象的调用时,会首先调用对象的valueOf()方法,然后确定该返回的数值能否转换成数值,如果不能,则基于这个返回值再调用toString()方法,再测试返回值。而这个过程也是ECMAScript中内置的函数和操作符的一般执行流程。

String数据类型

1、String字符串类型的相关知识

1.1、String类型用于表示由零或多个16位Unicode字符组成的字符序列,即字符串。字符串可由单引号或者双引号表示。
1.2、字符串由零个或多个字符构成。字符包括字母、数字、标点符号和空格。字符串必须放在引号里——单引号和双引号都允许使用。
1.3、如果字符串包含双引号字符,就应该把整个字符串放在单引号中;如果字符串包含单引号字符,就应该把整个字符串放在双引号中;如果执意要使用一种引号来包括字符串,那么可以使用转义字符(escaping)来使得字符串中的内容不被解释成这个字符串的结束标志。在JavaScript语言中,对字符进行转义需要用到反斜杠字符。

2、转换字符串

  要把一个值转换为一个字符串有两种方式:
2.1、就是使用几乎每个值都有的toString()方法,这个返回唯一要做的就是返回相应值的字符串表现。

image.png
2.2、在不知道要转换的值是不是null或undefined的情况下,还可以使用转型函数String([value]),这个函数能够将任何类型的值转换为字符串。

image.png

Boolean类型

1、Boolean类型相关概念

  1、Boolean类型只有两个值:true、false。
2、true和false这两个值和数字0、1是两回事,true不一定就是1,false也不一定就是0。
3、ECMAScript所有类型都有与这两个boolean值等价的值。

2、""和“ ”的区别

image.png

Object数据类型(date、fonction、Array等)

Array数组类型

1、Array数组类型的相关概念

  1、数组是一种特殊的变量,他由多个数组元素构成,可以保存多个不同类型的数据。数组的存在是为了解决一个变量只能存储一个数据的局限,使用数组可以保存多个数据项。
2、数组的声明不同于变量的声明,需要通过new Array()来创建数组。
3、每个数组元素的索引是唯一的,通过索引就可以为指定的数组元素赋值或访问指定的数组元素。
4、ECMAScript中的数组是数据的有序列表,不同于其它语言,ECMAScript数组的每一项可以保存不同的任何类型的数据。ECMAScript数组的大小是可以动态调整的,即可以随着数据的添加自动增长以容纳新增数据。

image.png
5、JavaScript只支持一维数组,而不存在多维数组。JavaScript允许把一个数组的元素声明为一个新的数组,从而模拟出多维数组。

image.png

2、创建数组的基本方式有两种

  1、使用Array构造函数

image.png
2、使用数组字面量表示法,与对象一样,在使用数组字面量表示法时,也不会调用Array构造函数。

正则对象

Symbol 数据类型

Symbol 是ES6 引入的一种新的原始数据类型,用于表示独一无二的值;
主要用于当做属性名,防止属性名重名,因为用字符串当属性名很容易就会在不经意间造成重名;

(1)Symbol值生成: 通过 Symbol() 函数

image.png

Symbol 函数可以接收一个字符串参数,可以传一个对象作为参数(当然得这个对象要有toString() 方法才行,因为会先调用对象的toString方法来得到字符串),也可以不传参数;

image.png
1.参数一样,值也是不一样;不传参数,值也不一样,这就是Symbol值的独一无二性;
2.另外,Symbol 值不可以和其他类型值进行混合运算,否则会报错;
3.Symbol 值可以转换显式或者隐式转换为布尔值,同时却是不能转换成数值。

image.png

(2)Symbol 值作为属性名

image.png

image.png

需要注意的几点是:

  • Symbol 值如果想要作为属性名,那就不能再用点运算符,因为点运算符后面跟的总是字符串;
  • 在对象内部使用Symbol 值作为属性名的时候,必须要将值放在方括号中;

(4)如何去创建同一个Symbol值

image.png

JS最新基本数据类型:BigInt

BigInt数据类型的目的是比Number数据类型支持的范围更大的整数值。在对大整数执行数学运算时,以任意精度表示整数的能力尤为重要。使用BigInt,整数溢出将不再是问题。

对于学过其他语言的程序员来说,JS中缺少显式整数类型常常令人困惑。许多编程语言支持多种数字类型,如浮点型、双精度型、整数型和双精度型,但JS却不是这样。在JS中,按照IEEE 754-2008标准的定义,所有数字都以双精度64位浮点格式表示。

在此标准下,无法精确表示的非常大的整数将自动四舍五入。确切地说,JS 中的Number类型只能安全地表示-9007199254740991 (-(2^53-1)) 和9007199254740991(2^53-1)之间的整数,任何超出此范围的整数值都可能失去精度。

image.png

image.png

使用BigInt,应用程序不再需要变通方法或库来安全地表示Number.MAX_SAFE_INTEGERNumber.Min_SAFE_INTEGER之外的整数。 现在可以在标准JS中执行对大整数的算术运算,而不会有精度损失的风险。
要创建BigInt,只需在整数的末尾追加n即可。

image.png
或者,可以调用BigInt()构造函数:

image.png
BigInt文字也可以用二进制、八进制或十六进制表示

请记住,不能使用严格相等运算符将BigInt与常规数字进行比较,因为它们的类型不同:

image.png
相反,可以使用等号运算符,它在处理操作数之前执行隐式类型转换

image.png
除一元加号(+)运算符外,所有算术运算符都可用于BigInt

image.png

当然,与BigInt操作数一起使用时,算术运算符应该返回BigInt值。因此,除法(/)运算符的结果会自动向下舍入到最接近的整数。例如:

image.png