JavaScript的7大类型补缺补漏

这是我参与8月更文挑战的第13天,活动详情查看:8月更文挑战

知道你对JavaScript的类型很熟了,那以下几个关于类型的问题你能答出几个呢?

  • String字符串有最大长度吗?
  • 0.1+0.2 == 0.3 是否正确?
  • 3和Number(3)是否相同?3和new Number(3)又是否相同?
  • typeof null 得到的是什么?

快到文中找答案吧!

前言

JavaScript语言规定了以下7种语言类型,JavaScript语言的每一个值都属于某一种数据类型。

基本类型

  • Undefined;

  • Null;

  • Boolean;

  • String;

  • Number;

  • Symbol;(ES6新加)

引用类型

  • Object。

Undefined 类型

Undefined 类型表示未定义

  • 它只有一个值undefined
  • 任何变量在赋值前是 Undefined 类型、值为 undefined
  • undefined是运行时创建的一个全局变量,并非JavaScript的关键字

在es5之后undefined这个全局变量已经变成了read-only了,在开头直接写undefined = 123 或 var undefined = 12 并不会生效(除非是老旧浏览器),但如果是node环境下,或者局部作用域下,用var undefined = 123或let undefined = 123重新声明一个undefined全局变量则是允许的

image-20210813204321608

Null 类型

Null 表示的是:“定义了但是为空”,它的语义表示空值。

  • Null 类型也只有一个值,就是 null

  • Null是JavaScript关键字

  • 可以通过将变量的值赋值为null将其清空

    image-20210813204416023

Boolean 类型

Boolean 类型用于表示逻辑意义上的【真和假】,有关键字 true 和 false 来表示两个值。

String 类型

String 用于表示文本数据。

问:String字符串有最大长度吗?

『答』

String 有最长长度,且长度不是视觉上的返回的字符长度,而是字符串 UTF16 编码码点的长度,String的最大长度是 2^53 – 1。

『注1』

String 的意义并非“字符串”,而是字符串的 UTF16 编码,我们字符串的操作 charAt、charCodeAt、length 等方法针对的都是 UTF16 编码。

let a = '?'; 
a.length
复制代码

image-20210813205200532

『注2』

JavaScript 中的字符串是永远无法变更的,一旦字符串构造出来,无法用任何方式改变字符串的内容,所以字符串具有值类型的特征。

比如:let a = ‘Axjy’, 你没办法将它变为’Bxjy’,除非重新赋值;

image-20210813205804393

Number 类型

Number 类型表示我们通常意义上的“数字”。JavaScript 中的数字类型只有 Number 一种,Number 类型采用 IEEE754 标准中的 “双精度浮点数” 来表示一个数字,不区分整数和浮点数 。

问:0.1+0.2 == 0.3 是否正确?

image-20210812211518031

『答』

我们可以看上0.1+0.2 == 0.3,结果得到的是false,说明它们是不相等的,这是【浮点运算】的特点;

【浮点数运算的精度问题】导致等式左右的结果并不是严格相等,而是相差了个微小的值。

【浮点数运算精度问题】的原因是什么?

『答』

因为我们输入的是十进制的数,但是电脑会把它转为二进制运算,计算完之后再转回十进制,在转化的过程中出现了精度丢失。

任何使用二进制浮点数的编程语言都会有这个问题,只不过因为JavaScript是一门弱类型语言,所以进度误差的问题显得格外突出。

“0.1 + 0.2” 在计算机里的计算过程如下:

image-20210813215127941

特定数值

  • Infinity 代表数学上的无穷大。

  • NaN(非数字)是不正确或未定义的数学运算的结果。

    image-20210813214549260

Symbol 类型

Symbol 是 ES6 中引入的新类型,它是一切非字符串的对象 key 的集合。

问:以下代码输出结果是什么?

let A = Symbol("Axjy");let B = Symbol("Axjy");

console.log(A == B)  Or console.log(A === B)
复制代码

『答』

不论哪种都是false,Symbol 可以具有字符串类型的描述,但是即使描述相同,Symbol 也不相等。

Object类型

Object 是 JavaScript 中最复杂的类型,也是 JavaScript 的核心机制之一。Object 表示对象的意思,它是一切有形和无形物体的总称。

问:3和Number(3)是否相同?3和new Number(3)又是否相同?

?

?

?

?

?

?

?

?

『答』

3和Number(3)相同;3 与 new Number(3) 是完全不同的值,它们一个是 Number 类型, 一个是对象类型。

image-20210813211057937

image-20210813210947102

Number、String 和 Boolean,三个构造器是两用的,当跟 new 搭配时,它们产生【对象】,当直接调用时,它们表示【强制类型转换】。

其他

关于判断类型

JavaScript 语言中提供了 typeof 这样的运算,用来返回操作数的类型,但 typeof 的运算结果,与运行时类型的规定有的时候并不一致

image-20210813212658787

『注意』

object——Null 和 function——Object

image-20210813213222011

结语

以上如果有错误的地方,请在评论区中指出!?

参考:

细说 JavaScript 七种数据类型

ECMAScript Language Specification


小可爱看完点个赞再走吧!?

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享