在JavaScript中,基本数据类型(如数字、字符串、布尔值等)没有自己的属性和方法,它们是不可变的。为了在基本数据类型上执行操作,JavaScript提供了相应的包装类型。这些包装类型是Number
、String
和Boolean
。
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()
方法。
包装类型是临时创建的对象,它们具有与基本数据类型相同的值,但是它们是对象,而不是原始值。在方法或者属性调用结束后,临时创建的对象就会销毁。