__x__(75)1012第十三天__ JavaScript 包装对象

包装对象

所谓“包装对象”,就是分别与数值、字符串、布尔值相对应的NumberStringBoolean三个原生对象

这三个原生对象可以把原始类型的值变成(包装成)对象

    • var v1 = new Number(123);
      var v2 = new String('abc');
      var v3 = new Boolean(true);
      
      typeof v1    // "object"
      typeof v2    // "object"
      typeof v3    // "object"
      
      v1 === 123    // false
      v2 === 'abc'    // false
      v3 === true    // false
  • 目的:
    • 使得 JavaScript 的对象涵盖所有的值
    • 使得原始类型的值可以方便地调用某些方法

 

  • 实例方法 : 
      • 三种包装对象各自提供了许多实例方法。这里介绍两种它们共同具有、从Object对象继承的方法:valueOftoString
    • .valueOf()    返回包装对象实例对应的原始类型的值
    • .toString()    方法返回对应的字符串形式
    • new Number(123).valueOf();     // 123
      new String('abc').valueOf();    // "abc"
      new Boolean(true).valueOf();    // true
      
      new Number(123).toString();    // "123"
      new String('abc').toString();    // "abc"
      new Boolean(true).toString();    // "true"
  • 原始类型与实例对象的自动转换 : 
    • 原始类型的值,可以自动当作包装对象调用,即调用包装对象的属性和方法。
    • 这时,JavaScript 引擎会自动将原始类型的值转为包装对象实例,在使用后立刻销毁实例
    • 'abc'.length    // 3
      
      // abc是一个字符串,本身不是对象,不能调用length属性。
      // JavaScript 引擎自动将其转为包装对象,在这个对象上调用length属性。
      // 调用结束后,这个临时对象就会被销毁。
              //这就叫原始类型与实例对象的自动转换
    • 调用结束后,包装对象实例会自动销毁。
    • 这意味着,下一次调用字符串的属性时,实际是调用一个新生成的对象,而不是上一次调用时生成的那个对象,所以取不到赋值在上一个对象的属性。
    • 如果要为字符串添加属性,只有在它的原型对象String.prototype上定义

 

  • 自定义方法 : 
    • 除了原生的实例方法,包装对象还可以自定义方法和属性,供原始类型的值直接调用
      • // 比如,我们可以新增一个double方法,使得字符串和数字翻倍
        String.prototype.double = function () {
            return this.valueOf() + this.valueOf();
        };
        
        'abc'.double();    // abcabc
        
        Number.prototype.double = function () {
            return this.valueOf() + this.valueOf();
        };
        
        (123).double();    // 246    123外面必须要加上圆括号,否则后面的点运算符(.)会被解释成小数点
    • 这种自定义方法和属性的机制,只能定义在包装对象的原型上,如果直接对原始类型的变量添加属性,则无效

 

猜你喜欢

转载自www.cnblogs.com/tianxiaxuange/p/9780406.html