zoukankan      html  css  js  c++  java
  • [JS高程] 特殊的原始值类型

    原始值包装类型 (特殊引用类型)

    在ES6 时,ECMAScript 数据类型是这样去分类的:

    • 原始值(基本数据类型)

      • Number
      • String
      • Boolean
      • Undefined
      • Null
      • Symbol
    • 引用值(复杂数据类型)

      • 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
      
  • 相关阅读:
    bootstrap之CDN
    bootstrap之HTML模板
    Glyphicon 字体图标
    crawler4j 学习(二)
    【软件构造】第二章 软件构建的过程和工具(2)
    【软件构造】第二章 软件构建的过程和工具(1)
    【软件构造】第一章 软件构造基础(2)
    【软件构造】第一章 软件构造基础(1)
    机器学习技法笔记-Lecture 1 Linear support vector machine
    机器学习基石笔记-Lecture 15 Validation
  • 原文地址:https://www.cnblogs.com/jaycethanks/p/15593300.html
Copyright © 2011-2022 走看看