引用类型(三)——基本包装类型(一)

本文详细介绍了ECMAScript中的三种基本包装类型:Boolean、Number和String。这些类型将基本数据类型封装成对象,使得它们拥有更多的功能和特殊行为。文章还对比了基本包装类型与普通引用类型之间的主要区别。

基本包装类型,也是一种引用类型。基本包装类型是对基本数据类型的封装,封装后,既具有基本类型的功能,也有各自的特殊行为(方法)。

ECMAScript提供了三个特殊的引用类型(基本包装类型):Boolean、Number和String。

引用类型与基本包装类型的主要区别是对象的生存期。使用new操作符创建的引用类型的实例,在执行流离开当前作用域之前都一直保存在内存中,而自动创建的基本包装类型只存在于一行代码的执行瞬间,然后立即销毁。

(一)Boolean类型:与布尔值对应的引用类型。

1、创建Boolean对象

调用Boolean构造函数并传入true或false。

var booleanObject = new Boolean(true);

Boolean对象代表两个值:“true”或“false”。

在布尔表达式中使用Boolean对象常会产生误解,比如看下面这个例子。

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

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

在这个例子中,我们先用false值创建了一个Boolean对象,然后在布尔运算中,false && true 等于false。但是,例子中的这行代码是对falseObject而不是对它的值(false)进行求值。
在这里,我们需要明确一点,对基本包装类型的实例调用typeof会返回“object”,并且所有基本包装类型的对象在转换为布尔类型时值都是true。
所以,falseObject对象在布尔表达式中代表的是true,那么最后结果也就为true了。

2、属性
  • constructor:返回对创建此对象的Boolean函数的引用。
  • prototype:可以向对象添加属性和方法。
3、方法
  • valueOf():返回基本类型值true或false。
  • toString():返回字符串”true”和”false”。
4、基本类型与引用类型的布尔值的区别
  • typeof操作符对基本类型返回“boolean”,对引用类型返回“object”。
  • 使用instanceof操作符测试Boolean对象会返回true,测试基本类型的布尔值返回false。

【注】建议永远不要使用Boolean对象。

(二)Number类型:与数字值对应的引用类型。

1、创建Number对象

调用Number构造函数时传递相应的数值。

var numberObject = new Number(10);
2、属性
属性描述
constructor返回对创建此对象的 Number 函数的引用。
MAX_VALUE可表示的最大的数。
MIN_VALUE可表示的最小的数。
NEGATIVE_INFINITY负无穷大,溢出时返回该值。
POSITIVE_INFINITY正无穷大,溢出时返回该值。
NaN非数字值。
prototype可以向对象添加属性和方法。
3、方法

1)(重写)继承的方法

  • valueOf():返回对象表示的基本类型的数值。
  • toLocaleString():返回字符串形式的数值。
  • toString():返回字符串形式的数值;传递一个表示基数的参数,可以返回几进制数值的字符串形式。

2)非继承的方法

  • toFixed():按照指定小数位返回数值的字符串表示。可以自动舍入。适合处理货币值。
  • toExponential():用于格式化数值,返回以指数表示法(e表示法)表示的数值的字符串形式。接收一个参数,即用于指定输出结果中的小数位数。
  • toPrecision():返回最合适的格式,可能是固定大小格式,也可能是指数格式。接收一个参数,即表示数值的所有数字的位数(不包括指数部分)。
var num1 = 10.005;
alert(num1.toFixed(2));  // 10.01

var num2 = 10;
alert(num2.toExponential(1));  // 1.0e+1

var num3 = 99;
alert(num3.toPrecision(1));  // 1e+2
alert(num3.toPrecision(2));  // 99
alert(num3.toPrecision(3));  // 99.0
### Java 中引用类型数组与基本数据类型数组的区别 #### 定义与声明 在Java中,基本数据类型引用数据类型的数组有着不同的特性和行为。对于基本数据类型数组而言,其元素直接保存数值;而对于引用类型数组,则是存储指向对象的引用。 ```java // 基本数据类型数组 int[] basicArray = new int[5]; // 引用类型数组 String[] referenceArray = new String[5]; ``` 当创建基本数据类型数组时,实际上是在内存中分配了块连续的空间用于存放具体的值[^1]。而引用类型数组则会为每个位置预留空间用来放置对象实例的地址或引用[^2]。 #### 参数传递差异 考虑函数调用过程中参数传递的情况: - **基本数据类型** 当把基本数据类型作为方法参数传递给另个方法时,实际上传递的是该变量的个副本而不是原始变量本身。因此,在被调用的方法内部对该参数所做的任何修改都不会影响到原变量。 - **引用数据类型** 对于引用类型来说,情况有所不同。如果将引用类型的数组作为参数传递给某个方法,那么这个方法接收到的就是原来那个数组对象的引用。这意味着在这个方法内对数组内容做出的变化会影响到原来的数组对象。 ```java public class ArrayPassingExample { public static void changeBasicTypeValue(int value){ value += 10; System.out.println("Inside method, changed value is:" + value); } public static void changeReferenceTypeValue(Integer[] array){ array[0] = 999; System.out.println("Inside method, first element of the array has been set to: " + array[0]); } } ``` 上述例子展示了两种不同类型的数据如何通过方法调用受到影响的不同方式。`changeBasicTypeValue()` 方法不会改变外部 `value` 的值,但是 `changeReferenceTypeValue()` 可以更改传入整数数组的第个元素并反映在外层作用域中。 #### 使用场景分析 选择使用哪种类型的数组取决于具体的应用需求和技术考量: - 如果只需要简单地存储系列相同类型的数值,并且不需要复杂的功能(比如动态调整大小),那么基本数据类型数组可能是更好的选择因为它更加轻量级。 - 若涉及到更为复杂的逻辑运算或是需要利用面向对象特性的地方——例如要管理多个字符串或其他自定义的对象集合——此时应该优先选用引用类型数组[^3]。 此外,考虑到性能因素以及垃圾回收机制的影响,合理规划这两种类型之间的转换也是非常必要的。特别是要注意自动拆箱/装箱可能带来的潜在风险,即从包装向基础类型转变的过程中可能出现空指针异常等问题[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值