什么是javascript中的包装类型?

在JavaScript中,包装类型是一种特殊的对象类型,用于将原始数据类型(像字符串String、数字Number和布尔值Boolean)转换为对象。

为什么要用它,因为基本类型是没有属性和方法的,为了便于操作基本类型的值,在调用基本类型的属性或方法时JavaScript会在后台隐式地将基本类型值转换为对象,这种转换是临时的。以下是关于JavaScript中包装类型的详细解释:

1. 包装类型的定义

  • 包装类型允许在基本数据类型上执行对象操作,因为它们提供了一组方法和属性,以便更轻松地操作基本数据类型的值。
  • 在调用基本类型的属性或方法时,JavaScript会在后台隐式地将基本类型的值转换为对象。

2. JavaScript中的三种主要包装类型

  • String包装类型:用于字符串的包装类型是String。可以在字符串上调用各种方法,如lengthcharAt()substring()等。
    let str = "abc";  
      
    // 自动包装成String对象  
    console.log(str.length); // 输出:3  
    console.log(str.charAt(0)); // 输出:A
    console.log(str.toUpperCase()); // 输出:"ABC"
  • Number包装类型:用于数字的包装类型是Number。可以在数字上调用各种方法,如toFixed()toPrecision()等。
    let num = 123.456;  
      
    // 自动包装成Number对象  
    console.log(num.toFixed(2)); // 输出:"123.46"  
      
    // 显式创建Number对象(通常不推荐这样做)  
    let numObj = new Number(123.456);  
    console.log(numObj.toFixed(2)); // 输出:"123.46"
  • Boolean包装类型:用于布尔值的包装类型是Boolean。可以在布尔值上调用方法,如toString()等。
    let bool = true;  
      
    console.log(bool.toString()); // 输出:"true"  
    
    // 显式创建Boolean对象(几乎不用这样做)  
    let boolObj = new Boolean(bool);  
    console.log(boolObj.toString()); // 输出:"true"

3. 包装类型的自动创建和销毁

  • 通常情况下,JavaScript会在需要时自动创建和销毁这些包装对象,以便可以直接操作基本数据类型,而不需要显式创建包装对象。
  • 例如,当尝试访问字符串'abc'.length时,JavaScript会将'abc'在后台转换成String('abc')对象,然后再访问其length属性。

4. 显式创建包装类型对象

  • 尽管JavaScript在大多数情况下会自动创建包装对象,但也可以显式地创建它们。例如,可以使用new String(str)new Number(num)new Boolean(bool)来创建包装对象。
  • 通常不建议显式创建包装对象,因为它们可能会导致一些不期望的行为,如比较运算符的意外结果等。如下:
    let bool = true;  
      
    console.log(bool.toString()); // 输出:"true"  
    
    // 显式创建Boolean对象(几乎不用这样做)  
    let boolObj = new Boolean(bool);  
    console.log(boolObj.toString()); // 输出:"true"  
      
    // 注意:直接比较基本类型和包装对象可能会产生不期望的结果  
    console.log(bool === boolObj); // 输出:false,因为一个是基本类型,一个是对象

5.valueOf()将包装类型转化为基本类型

//例子
var a = new Boolean( false );
if( !a ){
  console.log( "123" )
}
// 结果不会打印出东西

原因:

因为 a 是一个存在的对象(即使它包装了一个布尔值 false),逻辑非运算符 ! 会将其估为 false因为对象总是“真值”的,除非它们是 null 或 undefined)。因此,if(!a) 的条件不会为真,所以 console.log("123") 这行代码不会被执行。

可以使用valueOf()将包装类型转化为基本类型

var a = new Boolean(false);  
if (!a.valueOf()) {
    console.log("123");  
}  
// 由于 a.valueOf() 是 false,上面的条件为真,所以 "123" 会被打印出来

注意:避免使用BooleanNumberString的构造函数来创建包装对象,直接使用原始值(如truefalse、数字字面量、字符串字面量等)是更好的选择。

总结

JavaScript中的包装类型是一种将原始数据类型转换为对象的机制,它允许你在原始数据类型上执行类似对象的操作,而无需显式地创建对象。

  • 16
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值