做网站 前端,导航网站 win8风格,wordpress页面还原,05网寒假作业答案JavaScript 原始数据类型和对应的对象类型#xff08;内置对象#xff09;之间的关系
JavaScript 的原始#xff08;primitive#xff09;数据类型包括包括数字#xff08;Number#xff09;、字符串#xff08;String#xff09;、布尔值#xff08;Boolean#xf…JavaScript 原始数据类型和对应的对象类型内置对象之间的关系
JavaScript 的原始primitive数据类型包括包括数字Number、字符串String、布尔值Boolean、null、undefined、符号SymbolES6 引入和 BigIntES2020 引入。这些原始数据类型是不可变的没有属性或方法。
在 JavaScript 中原始数据类型和内置对象也称为对象类型或包装器对象之间存在一种特殊的关系。
原始数据类型和对应的对象类型之间的关系
原始类型是简单的数据类型没有属性或方法。对应的对象类型是通过构造函数创建的复杂对象具有属性和方法。JavaScript 会在需要时自动将原始类型的值包装成对应的对象类型以便可以调用方法。这个自动包装过程通常是透明的开发者不需要手动进行装箱或拆箱操作。通常情况下我们在编程时使用原始数据类型因为它们更简单、更快。只有在需要利用对象的属性和方法时JavaScript 引擎才会临时将它们转换为对象。 理解原始数据类型和对象类型之间的关系需要注意的几个方面
自动装箱Autoboxing当你对一个原始数据类型的值使用属性或方法时JavaScript 会自动将其转换装箱为对应的对象类型这样就可以使用对象提供的方法和属性。例如当你对一个字符串原始值调用 .length 属性时JavaScript 会临时将其转换为 String 对象然后访问其 length 属性。原始值的不可变性原始数据类型的值是不可变的这意味着一旦创建它们的值就不能改变。相反对象是可变的你可以改变其属性和方法。性能考虑使用原始数据类型通常比使用对象类型更高效因为原始类型占用的内存更少且没有对象的额外开销。类型转换你可以通过调用对象类型的方法来显式地将原始类型转换为对象类型反之亦然。例如String(123) 会将数字转换为字符串而 Number(123) 会将字符串转换为数字。 JavaScript 提供了一些内置的构造函数如 Number 和 String这些构造函数可以用来创建对应原始类型的包装对象。这些包装对象是可以包含属性和方法的复杂数据类型。当你对一个原始类型的值调用方法时JavaScript 会临时将其包装成一个对象以便你可以调用这些方法。
原始类型的数字是不可变的值。当你对一个原始类型的数字进行操作时实际上是在创建一个新的数字值。例如
let num 10;
num.toFixed(2); // 10.00
在上面的例子中toFixed 是一个方法看起来像是直接被数字字面量 10 调用的。但实际上JavaScript 在幕后将 10 临时转换成了一个 Number 对象然后在这个对象上调用了 toFixed 方法。这个过程称为 “装箱”boxing。
Number 对象是通过 Number 构造函数创建的它包含了数字的属性和方法。例如
let numObject new Number(10);
numObject.toFixed(2); // 10.00
在这个例子中numObject 是一个 Number 对象它是一个包含原始数字值的复杂对象。 原始类型的字符串也是不可变的值。字符串有很多方法比如 toUpperCase 和 charAt这些方法可以被字符串字面量直接调用
let str hello;
str.toUpperCase(); // HELLO
当调用 str.toUpperCase() 时原始字符串 hello 被临时包装成一个 String 对象然后在这个对象上调用 toUpperCase 方法。完成方法调用后这个临时对象就被丢弃了。
String 对象是通过 String 构造函数创建的它同样包含了字符串的属性和方法
let strObject new String(hello);
strObject.toUpperCase(); // HELLO
在这个例子中strObject 是一个 String 对象。 需要注意的是在实际编程中我们通常直接使用原始数据类型而不是显式创建对象类型因为 JavaScript 引擎会根据需要自动进行装箱和拆箱操作。
换句话说在实际编程中我们通常直接使用原始数据类型因为它们更简单、更高效。JavaScript 引擎会在需要时自动进行原始数据类型到对象类型的临时转换装箱以便我们可以利用对象上的方法和属性这个过程对开发者来说是透明的通常不需要手动创建这些对象。 并不是每个原始数据类型都有一个直接对应的对象类型具体情况如下
Number: 有一个对应的对象类型即 Number 对象。
String: 有一个对应的对象类型即 String 对象。
Boolean: 有一个对应的对象类型即 Boolean 对象。
Symbol: 有一个对应的对象类型即 Symbol 对象。
BigInt: 有一个对应的对象类型即 BigInt 对象。
然而对于 null 和 undefined情况就不同了
null: 没有对应的对象类型。null 表示“没有值”或“空值”它通常用于指示变量未指向任何对象。
undefined: 同样没有对应的对象类型。undefined 表示变量已声明但未被初始化。 内置构造函数和它们创建的对象包装器
Number: 这个构造函数用于创建数字的对象包装器。例如new Number(123) 会创建一个包装了数字 123 的 Number 对象。
String: 这个构造函数用于创建字符串的对象包装器。例如new String(text) 会创建一个包装了字符串 “text” 的 String 对象。
Boolean: 这个构造函数用于创建布尔值的对象包装器。例如new Boolean(true) 会创建一个包装了布尔值 true 的 Boolean 对象。
Symbol: 用于创建符号的构造函数它是 ES6 中引入的。例如Symbol(description) 会创建一个具有描述的新符号。
BigInt: 用于创建大整数的构造函数它是在 ES2020 中引入的。例如BigInt(12345678901234567890) 会创建一个 BigInt 对象。