关于类型

在JavaScript语言中,有7种语言类型,他们分别是:

  • Undefined
  • Null
  • Boolean
  • Number
  • String
  • Object
  • Symbol(ES6中新加)

下面我们一个个来看:

Undefined

Undefined表示未定义,他的值只有一个,就是undefined。在JavaScript中,任何变量在赋值前都是Undefined类型,值为undefined。
根据他的意义,我们一般不会把undefined赋给一个值,从而确保所有undefined的值都处于定义了没有赋值的状态。
值得注意的是,在JavaScript中,undefined是一个变量,而不是关键字,所以我们为了避免undefined被篡改,我们通常会使用void 0来代替undefined。

Null

Null表示定义了但为空,他的值也只有一个就是null。和undefined不同的是,null是一个关键字,所以可以放心使用。

Boolean

布尔类型有两个值,分别为true和false,分别代表真假。

Number

数字类型总共有18437736874454810627(就是:2^64 - 2^53+3)个。
他有三个额外的数值:

  • NaN
  • Infinity(无穷大)
  • -Infinity(负无穷大)
    后面两个数值的引入主要是为了不让除以0出错。(JavaScript中有+0和-0的区别)
    因为JavaScript的非整数是根据浮点数定义的,所以非整数的类型无法用==(===更不行)来比较,最为著名的就是0.1+0.2 == 0.3这段代码的输出为false,我们可以用最小精度值来进行比较:
    Math.abs(0.1+0.2-0.3) <= Number.EPSILON

String

字符串,值得注意的是,他有一个最大长度的限制:2^53 - 1

Object

Object表示对象,他可以被视为一切物体的总称。
甚至于JavaScript中的基本类型,在对象类型中我们都可以找到对应的对象:

  • Boolean
  • Number
  • String
  • Symbol
    值得注意的是,当我们执行下面这段代码true === new Boolean(true),我们会发现他返回的结果是false,等号的两边一个是布尔类型的true,另一边确是一个对象。(Symbol比较特殊,直接new会报错)
    有了上面这个对象,我们甚至可以给基本类型来增加一些临时的方法。
String.prototype.sayHi = () => console.log('hello world');
'test'.sayHi();

我们可以看到在控制台真的打印出来了hello world

Symbol

这是一个ES6新引入的类型,他在对象中存在,但是却不能用new的方式来生成一个新的Symbol,我们可以通过传入一个key来对他进行赋值,我们可以这样来使用他:
  let symbol1 = Symbol('test');
值得注意的是,即使我们创建两个Symbol('test'),这两个symbol也是不相等的。

类型转换

作为一门弱类型语言,JavaScript的==运算会实现跨类型的比较,这经常会造成一些判断的失误,在我们真实的工作场景中,经常会要求程序员对类型转换后使用===来判断左右两边的相等。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容