文章目录
复习
JS中数据类型
- String 字符串
- Number 数值
- Boolean 布尔值
- Null 空值
- Undefined 未定义
以上这5种类型属于基本类型,以后看到的值,只要不是上边的5种,全部是对象
- Object 对象
基本类型的不足
基本数据类型都是单一的值,值和值之间没有任何联系。
在JS中来表示一个人的信息(name gender age):
name = '溏心蛋'
gender = '男'
age = '18'
如果使用基本数据类型的数据,我们所创建的变量都是独立,不能成为一个整体
对象
对象属于一种复合的数据类型,在对象中可以保存多个不同数据类型的属性
对象的分类
- 内建对象
由ES标准定义的对象,在任何的ES的实现中都可以使用。
比如:Math String Number…
- 宿主对象
由JS的运行环境提供的对象,目前来讲主要指由浏览器提供的对象
比如:BOM DOM
- 自定义对象
由开发人员自己创建的对象
对象的基本操作
创建对象
- 使用new关键字调用的函数,是构造函数constructor
- 构造函数是专门 来创建对象的函数
obj = new Object()
添加属性
在对象中保存的值称为属性
语法
对象.属性名 = 属性值
需求:向obj中添加一个name、gender、age属性
obj.name = '溏心蛋'
obj.gender = '男'
obj.age = 18
图片
读取对象中的属性
语法
对象.属性名
需求:读取name、gender、age属性值
console.log(obj.name)
console.log(obj.gender)
console.log(obj.age)
如果读取对象中没有的属性,不会报错而是会返回undefined
修改对象的属性值
语法
对象.属性名 = 新值
浅试一下
obj.name = '小羊'
condole.log(obj.name)
删除对象的属性
语法
delete obj.name
浅试一下
delete obj.name
condole.log(obj.name)
属性名和属性值
obj.name = '溏心蛋'
属性名:name
属性值:溏心蛋
属性名
- 对象的属性名不强制要求遵守标识符的规范,但是使用时还是尽量按照标识符的规范去做。
- 如果要使用特殊的属性名,不能采用.的方式来操作;需要使用另一种方式:
**语法:**对象[‘属性名’]
注意:提取时也需要用同样的方式
obj = new Object()
obj['123'] = '溏心蛋'
console.log(obj['123'])
使用[]这种形式取操作属性,更加的灵活,在[]中可以直接传递一个变量,这样变量值是多少就会读取那个属性
obj = new Object()
obj['123'] = '溏心蛋'
n = '123'
console.log(obj[n])
属性值
- JS对象的属性值,可以说任意的数据类型
- 甚至也可以是一个对象
obj1 = new Object()
obj2 = new Object()
obj1.name = '溏心蛋'
obj1.test = obj2
obj2.name = '小羊'
console.log(obj1.test.name) // ‘小羊’
in运算
通过该运算符可以检查一个对象中是否含有指定的属性;
如果有则返回true;没有则返回false
语法
‘属性名’ in 对象
浅试一下
需求:检查obj中是否含有test2属性
// 创建
obj1 = new Object()
obj2 = new Object()
obj1.name = '溏心蛋'
obj1.test = obj2
// 检测
console.log('test2' in obj1) // false
基本数据类型和引用数据类型
基本数据类型
- String
- Number
- Boolean
- Null
- Undefined
引用数据类型
- Object
浅试一下:
a = 123
b = a
a++
console.log('a = ' + a) // 124
console.log('b = ' + b) // 123
a和b是两个完全独立的值
obj = new Object()
obj.name = '溏心蛋'
obj2 = obj
obj.name = '小羊'
console.log(obj.name) // '小羊'
console.log(obj2.name) // '小羊'
改变初变量,会跟随着改变
- 涉及到数据结构中的知识
JS中的变量都是保存到栈内中的,基本数据类型的值直接在栈内中存储,值与值之间是独立存在,修改一个变量不会影响其他的变量,
对象是保存到堆内存中,每创建一个新的对象,就会在堆内存中创建一个新的空间,二变量保存的是对象的内存地址(对象的引用);
当一个变量都值改变时,另一个也会跟着改变。
obj = new Object()
obj.name = '溏心蛋'
obj2 = obj
obj.name = '小羊'
obj2.name = null
console.log(obj.name) // '小羊'
console.log(obj2.name) // null
- 当其中一个切断了联系,不会影响第二个的联系
a,b = 1,1
console.log(a == b) // true
obj1 = new Object()
obj2 = new Object()
obj1.name = '溏心蛋'
obj2.name = '溏心蛋'
console.log(obj1 == obj2) // false
- 当比较两个基本数据类型的值时,就是比较值;
- 而当两个引用数据类型时,它的比较多对象的内存地址;如果两个对象是一模一样,但是地址不同,它也会返回false
对象字面量
使用对象字面量来创建一个对象
obj = {}
console.log(typeof obj) // object
使用对象字面量,可以做创建对象时,直接指定对象中的属性
语法
{属性名:属性值,属性名:属性值…}
obj = {name = 'txd' ,
gender = '男',
age = 18}
注意:对象字面量的属性命苦呀加引号可以不加,建议不加;
如果要使用一些特殊名字,必须加引号
- 属性名和属性值是一组一组的名值对结构。名和值之间使用:链接多个名值对之间用, 隔开;如果一个属性之后没有其他的属性了,就不要写,