美文网首页
基本包装类型

基本包装类型

作者: zxhnext | 来源:发表于2019-10-01 14:59 被阅读0次

ECMAScript 提供了 3 个特殊的引用类型:Boolean、Number 和 String。

基本类型值不是对象,因而从逻辑上讲它们不应该有方法。但是,为了让我们实现这种直观的操作, 后台已经自动完成了一系列的处理。当第二行代码访问 s1 时,访问过程处于一种读取模式,也就是要从内存中读取这个字符串的值。而在读取模式中访问字符串时,后台都会自动完成下列处理。
(1) 创建 String 类型的一个实例;
(2) 在实例上调用指定的方法;
(3) 销毁这个实例。
可以将以上三个步骤想象成是执行了下列 ECMAScript 代码。

var s1 = new String("some text");
var s2 = s1.substring(2);
s1 = null;

经过此番处理,基本的字符串值就变得跟对象一样了。而且,上面这三个步骤也分别适用于 Boolean 和 Number 类型对应的布尔值和数字值。

引用类型与基本包装类型的主要区别就是对象的生存期。使用 new 操作符创建的引用类型的实例, 在执行流离开当前作用域之前都一直保存在内存中。而自动创建的基本包装类型的对象,则只存在于一 行代码的执行瞬间,然后立即被销毁。这意味着我们不能在运行时为基本类型值添加属性和方法。来看下面的例子:

var s1 = "some text";
s1.color = "red";
alert(s1.color); // undefined

第二行代码试图为字符串 s1 添加一个 color 属性。但是,当第三行代码再次访问 s1 时,其 color 属性不见了。问题的原因就是第二行创建的 String 对象在执行第三行代码时已经被销毁了。第三行代码又创建自己的 String 对象,而该对象没有 color 属性。

var value = "25";
var number = Number(value); //转型函数 
alert(typeof number); //"number"

var obj = new Number(value); //构造函数 
alert(typeof obj); //"object"

在这个例子中,变量 number 中保存的是基本类型的值 25,而变量 obj 中保存的是 Number 的实例。

1. Boolean类型

var falseObject = new Boolean(false);
var result = falseObject && true;
alert(result);  //true
var falseValue = false;
result = falseValue && true;
alert(result);  //false

我们使用 false 值创建了一个 Boolean 对象。然后,将这个对象与基本类型值 true 构成了逻辑与表达式。在布尔运算中,false && true 等于 false。可是,示例中的这行代码是对 falseObject 而不是对它的值(false)进行求值。前面讨论过,布尔表达式中的所有对象都会被转换为 true,因此 falseObject 对象在布尔表达式中代表的是 true。结果,true && true 当然就等于 true 了。
基本类型与引用类型的布尔值还有两个区别。首先,typeof 操作符对基本类型返回"boolean", 而对引用类型返回"object"。其次,由于 Boolean 对象是 Boolean 类型的实例,所以使用 instanceof 操作符测试 Boolean 对象会返回 true,而测试基本类型的布尔值则返回 false。例如:

alert(typeoffalseObject); //object 
alert(typeof falseValue); //boolean 
alert(falseObject instanceof Boolean); //true 
alert(falseValue instanceof Boolean); //false

理解基本类型的布尔值与 Boolean 对象之间的区别非常重要——当然,我们的建议是永远不要使 用 Boolean 对象。

2. Number类型

var numberObject = new Number(10);
var numberValue = 10;
alert(typeof numberObject);   //"object"
alert(typeof numberValue);    //"number"
alert(numberObject instanceof Number);  //true
alert(numberValue instanceof Number);   //false

在使用 typeof 操作符测试基本类型数值时,始终会返回"number",而在测试 Number 对象时, 则会返回"object"。类似地,Number 对象是 Number 类型的实例,而基本类型的数值则不是。

相关文章

  • Java基础知识(一):基本类型 VS 包装类型

    1. 基本类型 VS 包装类型 基本类型包装类型booleanBooleancharCharacterintInt...

  • Java的自动装箱(Autoboxing)和拆箱(unboxin

    装箱和拆箱 装箱-将基本数据类型转换为包装器类型;拆箱-包装器类型转换为基本数据类型。 基本类型包装类型intIn...

  • 第五章(5):基本包装类型和单体内置对象

    基本包装类型 每当读取一个基本类型值的时候,后台就会创建一个与之对应的基本包装类型。基本包装类型顾名思义就是对基本...

  • 基本包装类型

    基本包装类型 3个特殊的引用类型:Boolean、Number、String 引用类型与基本包装类型的主要区别就是...

  • 基本包装类型

    本身是基本类型,但是在执行代码的过程中,如果这种类型的变量调用了属性或者是方法,那么这种类型就不再是基本类型了,而...

  • 基本包装类型

  • 基本包装类型

    基本类型:字符串 + 数值 + null + undefined + 布尔值 为了便于操作基本类型,ECMAScr...

  • 基本包装类型

    针对布尔类型,数值类型,字符串类型JavaScript都提供了对应的包装类型。当三种类型的变量在读取操作的时候,J...

  • 基本包装类型

    JS中的数据分为基本数据和引用类型数据两大类,最大的区别在于: 基本数据类型的值不可变,引用类型可变 这里改变的只...

  • 基本包装类型

    number类型 .toFixed(num) 返回string,num指定小数点后位数 toExponentia...

网友评论

      本文标题:基本包装类型

      本文链接:https://www.haomeiwen.com/subject/hduructx.html