JavaScript中的包装类型详解

什么是包装类型?

在JavaScript中,基本数据类型(如数字、字符串、布尔值等)没有自己的属性和方法,它们是不可变的。为了在基本数据类型上执行操作,JavaScript提供了相应的包装类型。这些包装类型是NumberStringBoolean

怎么将基本数据类型转换成包装类型?

  • 对于数字,可以使用Number构造函数:
var num = 10; // 基本数据类型
var numObj = new Number(num); // 转换为Number对象

console.log(typeof numObj) // object

console.log(numObj instanceof Number) // true
console.log(numObj instanceof Object) // true

console.log(numObj.constructor === Number) // true

console.log(Object.prototype.toString.call(numObj)) // [object Number]
  • 对于字符串,可以使用String构造函数:
var str = "Hello"; // 基本数据类型
var strObj = new String(str); // 转换为String对象

console.log(typeof strObj) // object

console.log(strObj instanceof String) // true
console.log(strObj instanceof Object) // true

console.log(strObj.constructor === String) // true

console.log(Object.prototype.toString.call(strObj)) // [object String]
  • 对于布尔值,可以使用Boolean构造函数:
var bool = true; // 基本数据类型
var boolObj = new Boolean(bool); // 转换为Boolean对象

console.log(typeof boolObj ) // object

console.log(boolObj instanceof Boolean) // true
console.log(boolObj instanceof Object) // true

console.log(boolObj .constructor === Boolean) // true

console.log(Object.prototype.toString.call(boolObj ))// [object Boolean]

什么场景下会对基本数量进行自动转换?

在读取基本数据类型的属性和方法的时候,JavaScript会自动将基本数据类型转换为包装类型,以便在需要时调用相应的方法。这种自动转换称为“装箱”(boxing)。例如:

let str = "Hello"; // 基本数据类型
let strObj = str.toUpperCase(); // 自动装箱并调用String对象的toUpperCase方法
str.constructor 自动装箱读取String对象的constructor属性

在这个示例中,str 是一个基本数据类型的字符串,但在调用 toUpperCase() 方法时,JavaScript会自动将其装箱为 String 对象,并调用 toUpperCase() 方法。

包装类型是临时创建的对象,它们具有与基本数据类型相同的值,但是它们是对象,而不是原始值。在方法或者属性调用结束后,临时创建的对象就会销毁。

你可能感兴趣的:(JavaScript学习笔记,javascript,开发语言,ecmascript)