[JS高程]|[JS高程] 特殊的原始值类型


目录

  • 原始值包装类型 (特殊引用类型)
    • 原始值包装类型和应用类型的区别

原始值包装类型 (特殊引用类型) 在ES6 时,ECMAScript 数据类型是这样去分类的:
  • 原始值(基本数据类型)
    • Number
    • String
    • Boolean
    • Undefined
    • Null
    • Symbol
  • 引用值(复杂数据类型)
    • 【[JS高程]|[JS高程] 特殊的原始值类型】Object
      函数也是一种引用类型
且我们知道,通常情况下,只有对象才有方法。但是我们知道,实际上,字符串有字符串方法,如:
  • indexOf() , lastIndexOf()
  • search()
  • slice(), substring(), substr()
  • replace()
  • toUpperCase(), toLowerCase()
  • concat()
  • trim()
  • 等等...
Number 有Number 方法,如:
  • toExponential()
  • toFixed()
  • toPrecision()
  • 等等...
Boolean 有 Boolean 方法,如:
  • toString()
  • valueOf()
这些都是基本的数据类型, 但是却有着对象的方法。
实际上,ECMAScript 为了方便的操作原始值,提供了3中 特殊的引用类型 :
  1. Boolean
  2. Number
  3. String
let s1 = "some text"; let s2 = s1.substring(2);

这里,第二行在访问s1 的时候,是以读模式访问的。 也就是要从内存中读取变量保存的值, 以读模式访问字符串值的任何时候,后台都会执行以下3个步骤:
  1. 创建一个String类型的实例;
  2. 调用实例上的特定方法;
  3. 销毁实例。
let s1 = new String("some text"); let s2 = s1.substring(2); s1 = null;

布尔值和数值也是一样的, 以上3步也会在后台发生,不过使用的是Boolean 和 Number 包装类型而已 。
这三种特殊的引用类型,也叫做原始值包装类型。
原始值包装类型和应用类型的区别
引用类型与原始包装类型的主要区别在于对象的生命周期。 在通过new 实例化引用类型后。 得到的实例会在离开作用域时被销毁,而自创建的原始值包装对象则只存在于访问它的那行代码执行期间。 这也为之不能在运行时给原始值添加属性和方法。
let s1 = "some text"; s1.color = "red"; // 创建临时String 对象,并在执行完该行后立即被销毁。 console.log(s1.color); // undefined

不过如果真的期望达到给一个原始值添加属性。 可以显式的去调用 new Boolean()new Number()new String() 这些构造函数以创建原始值包装对象。
有几点值得注意:
  1. 不推荐使用, 因为会让开发者容易疑惑。
  2. 原始值包装类型的实例上使用 typeof 会返回 "object"
    let objNumb = new Number(100); let objStr = new String("some text"); let objBool = new Boolean(true); typeof objNumb; //'object' typeof objStr; //'object' typeof objBool; //'object'

  3. 通过原始值包装类型构造函数显式的实例化对象 都是 对应原始值包装类型的实例
    objNumb instanceof Number; // true objStr instanceof String; // true objBool instanceof Boolean; // true

  4. 通过工厂方法 Object构造函数,也能够根据传入值的类型返回相应原始值包装类型的实例
    let Ostr = new Object("some text"); let Onum = new Object(100); let Obool = new Object(false); Ostr instanceof String; // true Onum instanceof Number; // true Obool instanceof Boolean; // true

    推荐阅读