请解释下什么是js的装箱和拆箱?

214 阅读2分钟

"JS的装箱和拆箱是指将基本类型值转换为对应的包装对象,以及将包装对象转换为基本类型值的过程。

装箱是指将基本类型值转换为对应的包装对象。在JS中,基本类型包括Number、String、Boolean、Null、Undefined和Symbol。当我们在使用基本类型值时,JS会自动创建对应的包装对象,使我们能够像操作对象一样操作基本类型值。比如:

var str = \"Hello\";
console.log(str.length); // 5

var num = 123;
console.log(num.toFixed(2)); // \"123.00\"

在这个例子中,变量strnum分别是String和Number类型的基本类型值。当我们对它们进行属性访问和方法调用时,JS会临时将它们转换为对应的包装对象StringNumber,然后再进行操作。

拆箱是指将包装对象转换为基本类型值。当我们使用typeof操作符获取包装对象的类型时,会发现它们是object类型,而不是对应的基本类型。为了获取包装对象的基本类型值,可以使用一些转换方法,比如valueOf()toString()。比如:

var strObj = new String(\"Hello\");
console.log(typeof strObj); // \"object\"

var strValue = strObj.valueOf();
console.log(typeof strValue); // \"string\"

在这个例子中,strObj是一个String类型的包装对象。通过调用valueOf()方法,可以获取它的基本类型值\"Hello\"

需要注意的是,JS在进行装箱和拆箱时,会根据需要进行隐式转换。比如在使用+操作符连接字符串时,JS会将基本类型值转换为包装对象,然后进行连接操作。比如:

var str = \"Hello\" + \" World\";
console.log(typeof str); // \"string\"

在这个例子中,\"Hello\"\"World\"都是基本类型值,但在执行+操作时,它们会被隐式地转换为String类型的包装对象,然后进行连接操作,最终得到字符串\"Hello World\"

综上所述,JS的装箱和拆箱是将基本类型值转换为对应的包装对象,以及将包装对象转换为基本类型值的过程。通过装箱,我们可以使用对象的属性和方法来操作基本类型值;通过拆箱,我们可以获取包装对象的基本类型值。"