JavaScript基本包装类型

一 :引入目的

为了方便操作基本类型,JavaScript提供了三个特殊的引用类型:

  • Boolean
  • Number
  • String

每当读取基本类型的值的时候,后台就会创建一个对应的基本包装类型的对象,从而我们可以调用一些方法来操作这些数据
看一个栗子

var box = "mr.right";     // 声明基本类型值
alert(box.substring(2));    //.right,
alert('jewel'.substring(2));    //wel,说明此方法也是可行的

栗子中,对象.方法(参数),是引用类型的写法,有'.'说明是对象调用方法。而box是基本类型,按理来说基本类型的值不应该有方法(这里指substring()方法),但是为了让我们实现这种直观的操作,后台自动完成了一系列的处理:
在读取模式中访问字符串时,后台完成以下操作

  1. 创建一个string类型的实例
  2. 在实例上调用指定的方法
  3. 销毁这个实例

上边的栗子执行了下面的代码

var box = new String('mr.right');
var box1 = box.substring(2);
box =  null;
二 : 基本类型与引用类型的区别:对象的生存期

使用new操作符创建的引用类型的实例,在执行流离开当前作用域之前都一直在内存中。所以我们可以为引用类型添加属性和方法
自动创建的基本包装类型的对象,只存在于一行代码执行的瞬间,然后立即被销毁。就像上边的代码,执行后立马变为null了。所以我们不能在运行时为基本类型添加属性和方法。

var box = 'hello',
box.name = 'Bob';
console.log(box.name);  // undefined

原因 : 第二行创建的string对象在执行第三行时已经被销毁了,第三行创建的box对象没有name属性,所以为undefined

注意 :使用new调用基本包装类型的构造函数,与直接调用同名的转型函数是不一样的。

var value = '23';
var number = Number(value);
console.log(typeof number); // number

var obj = new Number(value);
console.log(typeof obj);    // object

不建议显示地创建基本能包装类型的对象,但是他们操作基本类型值的能力是很重要的,每个基本包装类型都提供了操作相应值的快捷方法

三 : Boolean类型

Boolean类型是与布尔值对应的引用类型
Boolean没有特定的属性和方法
永远不要使用Boolean对象

创建一个Boolean对象

var boo = new Boolean(true);

基本类型与引用类型的布尔值的区别
 typeof操作符对基本类型返回boolean,对引用类型返回object
 instanceof测试Boolean返回true

四 : Number类型

创建一个number对象

var num = new Number(10);

可以为toString()方法传递一个表示基数的对象,告诉他返回几进制数值的字符串形式

var num = 10;
console.log(num.toString());    // 10
console.log(num.toString(2));   // 1010
console.log(num.toString(8));   // 12
console.log(num.toString(10));  // 10
console.log(num.toString(16));  // a

将数值转化为字符串的方法
toFixed()按照指定的小数位返回数值的字符串表示
toExponential()返回指数表示法
toPrecision()可能会返回固定大小格式,也可能返回指数格式。所以它很智能

var box = 10;
alert(box.toFixed(2));        //小数点保留两位,并转换为字符串,四舍五入,返回10.00
var num = 10.0006;
console.log(num.toFixed(3));    // 10.001

alert(box.toExponential(1));    // 以指数形式,并转换成字符串,返回1.0e+1

alert(box.toPrecision(2));     // 参数较小时,以指数形式,参数较大时,以小数点形式
var num = 10;
console.log(num.toPrecision(1));    // 1e+1
console.log(num.toPrecision(2));    // 10
console.log(num.toPrecision(3));    // 10.0 

不建议直接实例化Number类型

由于String类型内容较多,我单独放到一篇文章中

你可能感兴趣的:(JavaScript基本包装类型)