在JavaScript中,对象和包装类是两个密切相关的概念。JavaScript是一种基于原型的语言,它使用对象来表示各种数据结构和实体。而包装类(Wrapper Classes)是JavaScript中的一种特殊对象,它们允许基本数据类型被当作对象来使用
正文
对象
在JavaScript中对象是键值对的集合,其中键是字符串(或者符号,Symbols),值可以是任意类型。对象可以包含多种数据类型,包括基本数据类型和对象引用。
创建对象
-
对象字面量:
let person = { name: "张三", age: 30, greet: function() { console.log("你好,我叫" + this.name); } }; -
使用
new Object():let person = new Object(); person.name = "李四"; person.age = 25; person.greet = function() { console.log("你好,我叫" + this.name); }; -
构造函数:
(通常用于批量创建)
```
function Person(name, age) {
this.name = name;
this.age = age;
this.greet = function() {
console.log("你好,我叫" + this.name);
};
}
let person = new Person("王五", 28);
```
-
使用
Object.create():let personProto = { greet: function() { console.log("你好!"); } }; let person = Object.create(personProto); person.name = "赵六"; person.age = 22;
对象属性可以通过点符号(.)或方括号([])访问和修改:
// 点符号
console.log(person.name); // 输出: 张三
// 方括号
console.log(person["age"]); // 输出: 30
JavaScript 对象是动态的,可以在任何时候添加或删除属性:
person.height = 175; // 添加新属性
delete person.age; // 删除属性
包装类
概念
包装类是将基本类型自动转换为对象的过程,是一种隐式过程。这在JavaScript中是自动进行的,不需要开发者手动操作。
举例说明
下面我们来看一些JavaScript中基本类型和对象类型的例子:
var num = '123'
num.abc = 'hello'
console.log(num.abc);//undefined
按理来说上面这段代码应该会报错,因为原始值是不能拥有属性和方法的,属性和方法是对象独有的。但输出的是undefined而没有报错,
我们再来看下面这段:
var num = new Number(123)
num.abc = 'hello'
console.log(num.abc);//hello
console.log(num * 2);//246
输出hello我们可以理解,var num = new Number(123)这行代码我们可以得到一个实例对象,可以添加属性,我们也可以访问往它身上加的属性。但是当num参与四则运算之后,它就会被认定为是一个Number,会转变为数字。
- 注意: 用构造函数创建的才转的了,用字面量创建的不行
再来
var str = 'abcd'
console.log(str.length);//4
都说原始类型没有属性,但是为啥这里又输出4呢?
只有一种可能,str被当做对象来用了。
在结果上,var str = 'abcd' 等同于str = new String('abcd'),但是由于引擎并不知道什么是字面量,即使代码写成前面那样,它也只会采用后者执行。
也就是说引擎是把str直接执行成了对象。
分析
我们再回到第一段代码
var num = '123';//undefined
为什么不会报错,因为引擎把num = '123'当做new Number(123)在执行
好,既然num被当成了一个对象,那为什么在加了属性之后又为undefined呢?
其实中间还有一个delete步骤,在执行var num = '123'时,引擎才反应过来所需要的是个原始类型而不是对象,原始类型没有属性,所以需要自行删除掉。
以上隐式发生的过程即为包装类的过程
结语
以上就是本文全部内容,通过本文,我们了解了JavaScript对象的多样性和灵活性,以及包装类如何扩展基本数据类型的能力,希望能够对读者有所帮助,感谢阅读!