什么是对象?
在JS中万物皆对象,包含你看到的字符串和数字。 那么他们在哪种场景能被作为对象呢?
### 请看下文
我们先来看一段代码
var MrXu ={
name :'XUyu' ,
age : 18,
sex:'boy',
run:function(){
console.log('i am running');
},
}
我们在这段代码中声明了一个叫作MrXu的对象,在对象当中我们放入键值对。如 name :'XUyu' ,
,name为键名,'XUyu'为键值。在这段代码中我们可以发现键值可以为字符串,数字或是函数体
如何对对象进行增删改查?
-
增加属性: 通过直接赋值或使用变量动态添加属性,例如:
// 直接赋值 MrXu.girlFriend = '章若楠'; // 或者使用变量动态添加属性 var abc = 'girlFriend'; MrXu[abc] = '章若楠';
-
修改属性: 直接修改对象的属性值,例如:
MrXu.age = 20;
-
查找属性: 使用对象的属性名来获取相应的属性值,例如:
console.log(MrXu.health); // 输出健康值
-
删除属性: 使用
delete
关键字来删除对象的属性,例如:delete MrXu.sex; // 删除性别属性
访问对象上不存在的属性,得到undefined,而不是报错。这些操作增强了代码的灵活性和可扩展性
创建对象
- 1.创建对象字面量:
var obj {}
- 2.调用系统自带的构造函数:
var obj = new Object()
- 3.调用自定义的构造函数
我们定义一个名为 Car
的函数,然后创建一个名为 car
的对象实例。
function Car(){
this.name = 'su7'
this.height = '1400'
this.lang = '5000'
this.weight = 10000
}
let car = new Car()
console.log(car);
-
function Car()
:这是一个构造函数的定义,构造函数用于创建对象。在这个构造函数中,它并没有显式返回值,而是初始化了一些属性。 -
在构造函数内部,定义了四个属性:
name
:赋值为字符串'su7'
,表示车辆的名称。height
:赋值为字符串'1400'
,表示车辆的高度。lang
:赋值为字符串'5000'
,可能是指车辆的长度(但应该是拼写错误,应该是length
)。weight
:赋值为数字10000
,表示车辆的重量。
-
let car = new Car()
:使用new
关键字创建了一个新的Car
对象实例,并将其赋值给变量car
。
构造函数的特殊场景(工厂模式)
当我们批量化生产对象时,我们在声明函数的内部传入一个形参,如color,然后我们在new car 中传入一个实参打印出来的car就会有颜色属性 `
function Car(color){
this.name = 'su7'
this.height = '1400'
this.lang = '5000'
this.weight = 10000
this.color = color
}
let car1 = new Car('red')
let car2 = new Car('blue')
console.log(car1,car2);
我们可以看见分别打印出了两辆不同颜色的car,car本身的参数依然一样
构造函数被new的过程
1.我们使用构造函数People
创建了一个新的对象实例p1
。
-
在构造函数中,将传入的参数值赋给了该实例对象的属性。
-
最后,输出了
p1
对象的内容,包括姓名、年龄和性别。
// 构造函数
function People(name,age,sex) {
this.name = name
this.age = age
this.sex = sex
}
let p1 = new People('longlong',18,'boy')
// 构造函数被new时的过程
console.log(p1);
1.new会在构造函数中创建一个 this 对象
2.执行函数的逻辑代码 (相当于往this对象上添加属性)
3.return this 对象
包装类
1.原始值是不能拥有属性和方法的,属性和方法是对象独有的
var num = '123'
num.abc = 'hello'
console.log(num.abc);
我们会发现打印出来undefined
var num = new Number(123)
num.abc = 'hello'
console.log(num.abc);
console.log(num * 2);
包装类 -- 这个隐式的过程,创建字面量的时候会发生包装类,V8会直接将数字类型转换成字符串来用,到第二行,V8发现你想要的是数字类型,所以矛盾了,执行delete操作删除字符串,导致最终打印undefined。
var num = new Number(123)
num.abc = 'hello'
console.log(num.abc);
console.log(num * 2);
对于这种自己构造的函数,直接就显示是字符串类型,不需要进行delete操作,第一个打印字符串hello,第二个转换回数字打印246。
总结
在这篇文章中我们介绍了对象以及在对象中的一些操作,通过学习对象与包装类可以让我们处理基本数据类型的更加便捷。希望大家阅读本文后能有所收获!