科普向--详解JavaScript中的数据类型

164 阅读4分钟

对于前端的小伙伴而言,JS的数据类型可谓是必懂的知识点。虽然这个知识点很是基础了,不过仍然有不少人会在这一块犯些小错误。比如网上流传的“JavaScriptS一切皆对象”,其实是个很不严谨的说法,JS中只有部分数据类型是对象;再比如有小伙伴面试回答“JS的数据类型有哪些”这类问题时,给出的答案中竟然还包含了arrayfunction。本文就是针对JavaScript中的数据类型,做一个详细的汇总。

JavaScript中的数据类型到底有哪些

至ES6为止,JavaScript共有七种数据类型:NumberStringBooleanUndefinedNullObjectSymbol。其中,Number、String、Boolean、Undefined、Null、Symbol属于简单数据类型(也称基本数据类型),Objec则属于复杂数据类型,同时Symbol则是ES6新出的数据类型

1、Number

在JS中,Number这种数据类型使用IEEE754的格式来表示整数和浮点数值,而ECMA定义了不同的数值字面量格式

  • 整数和小数:1 1.1 .1
  • 科学记数法: 1.23e2
  • 二进制:0b11
  • 八进制:011(后来 ES5 添加了 0o11 语法)
  • 十六进制:0x11
  • 特殊数值:NaN(Not a Number,这个数值用于表示一个本来要返回数值的操作数未返回数值的情况)

2、String

String类型用于表示由0个或多个16位的Unicode字符组成的字符序串,字符串可以由双引号"或者单引号'表示

  • 空字符串:''
  • 单行字符串:var s = '12345'
  • 多行字符串:
var s = '12345' +
                '67890' // 无回车符号var s = `12345
  67890` // 含回车符号

3、Boolean

Boolean这种数据类型只有两个取值:true和false

  • a && b 在 a 和 b 都为 true 时,取值为 true;否则为 false
  • a || b 在 a 和 b 都为 false 时,取值为 false;否则为 true

4、 Undefined

Undefined这种数据类型只有一个取值,即:undefined。在使用var声明变量但未对变量加以初始化时,这个变量的值就是undefined

5、Null

同Undefined数据类型一样,Null这种数据类型也只有一个取值null,如果定义的变量准备在将来用来保存对象,那么最合适的做法就是将这个变量初始化为null,比如:

var person = null
person = {name:'wjm',gender:'male'}

6、Object

Object之所以被称为复杂数据类型,就是因为其本质上就是由前面的一种或多种基本数据类型(无序地)组合在一起而形成的数据

  • object 的 key 一律是字符串,不存在其他类型的 key
  • object[''] 是合法的,因为空字符串也是个String数据类型的值
  • object['key'] 可以写作 object.key
  • 注意 object.key 与 object[key] 不同
  • object 里面可以有 object、array、function
var person = {
      name: 'Frank', 
      'child': {
          name: 'Jack'
      }, 
      like: ['font','teach'],
      walk: function(){},// 最后这个逗号可有可无
  }
  • object中的属性可以用delete操作符删除:delete object['name']
  • 一般来说,object的属性可以用for-in语句来枚举,值得注意的是,JS对象的属性没有顺序,因此,通过for-in循环出的属性名是无序的
for(var propName in object) {
    console.log(object[propName])
}

7、Symbol

Symbol 是ES6所支持的一种新的数据类型,使用Symbol 能够生成一个全局唯一的值,如下:

var a1 = Symbol('a')
var a2 = Symbol('a')
a1 !== a2 // true

一般来说,Symbol这种数据类型,主要有以下作用:

  • 作为对象属性名避免属性名冲突
  • 替代代码中多次使用的字符串(例如:abc),多次使用的字符串在代码中不易维护,而这时候定义一个对象的属性(属性名用Symbol格式),值为abc,就可以作为全局变量来使用了
  • 由于以Symbol值作为名称的属性,不会被常规方法遍历得到。我们可以利用这个特性,为对象定义一些非私有的、但又希望只用于内部的方法
  • 如果我们希望重新使用同一个Symbol值,Symbol.for方法可以做到这一点。它接受一个字符串作为参数,然后搜索有没有以该参数作为名称的Symbol值。如果有,就返回这个Symbol值,否则就新建并返回一个以该字符串为名称的Symbol值

以上理解,参考了阮一峰的ECMAScript 6入门

所以JavaScript中的数据类型到底有哪些,至此已经很明朗清晰了,请随我再回忆一遍:NumberStringBooleanUndefinedNullObjectSymbol。然后,不要再弄错了哟!

如果这篇文章对你有帮助,可以的话,不妨点个喜欢呢