JS的数据类型

/ Javascript前端 / 没有评论 / 479浏览

JS一共有7种数据类型:

6种简单数据类型

  1. Undefined
  2. Null
  3. String
  4. Number
  5. Boolean
  6. Symbol(符号)(ES6)

1种复杂数据类型

  1. Object(对象)

Object是一种无序名值对的集合。在ES中所有值都可以用上述7种数据类型之一来表示。它是JS这门语言的基类。 Symbol(符号)是ECMAScript 6新增的数据类型。符号是原始值,且符号实例是唯一、不可变的。符号的用途是确保对象属性使用唯一标识符,不会发生属性冲突的危险。符号就是用来创建唯一记号,进而用作非字符串形式的对象属性。

基础类型和引用类型(原始值和引用值)的不同,主要体现在以下几个方面:

  1. 变量存储的方式不同,原始值存储在栈内存,引用值存储在堆内存,变量值指向内存中的地址。
  2. 引用值在创建后可以动态的增加、删除、修改属性。原始值没有属性。
  3. 复制值的方式不同,在通过变量把一个原始值赋值到另一个变量时,原始值会被复制到新变量的位置。把引用值从一个变量赋给另一个变量时,存储在变量中的值也会被复制到新变量所在的位置。区别在于,这里复制的值实际上是一个指针,它指向存储在堆内存中的对象。操作完成后,两个变量实际上指向同一个对象,因此一个对象上面的变化会在另一个对象上反映出来。
  4. 原始值和引用值在作为函数的参数进行传递时,都是按值传递。变量有按值和按引用访问,而传参则只有按值传递。在按值传递参数时,值会被复制到一个局部变量(即一个命名参数,或者用 ECMAScript 的话说, 就是 arguments 对象中的一个槽位) 。ECMAScript 中所有函数的参数都是按值传递的。这意味着函数外的值会被复制到函数内部的参数中,就像从一个变量复制到另一个变量一样。如果是原始值,那么就跟原始值变量的复制一样,如果是引用值,那么就跟引用值变量的复制一样。
  5. 类型判断的方式不同,判断原始值用typeof。判断引用值用instanceof。更确切的说,typeof是判断一个变量是否为字符串、数值、布尔值或 undefined 的最好方式。如果值是对象或 null,那么 typeof 返回"object"。通过 instanceof 操作符检测任何引用值和Object 构造函数都会返回 true。类似地,如果用 instanceof 检测原始值,则始终会返回 false, 因为原始值不是对象。