目录:
- 对象简介
- 创建对象
- 查询和设置属性
- 删除属性
- 测试属性
- 枚举属性
- 扩展对象
- 序列化对象
- 对象方法
- 对象字面量扩展
对象是什么?
概述
- 对象的定义
- 属性名的语法
- 属性值的语法
详细
对象是属性的无序集合。
- 每个属性都是一个名/值对。
- 属性名:标识符或字符串
- 属性值:任意数据类型
let student = {
firstName: '杰',
'seconbName': '张',
"name": '张杰',
'first-name': '李',
'main title': '新闻标题',
'e-mail': 'zjsonic@126.com',
"for": '1000'
}
console.log(student.firstName);
关于字符串属性名
- 单引号双引号都可以
- 特殊字符必须加引号
- for关键字必须加引号
对象是JS的复杂数据类型
- 对象把很多值聚合在一起:字符串、数值、布尔值、undefined、null、函数object
创建对象的方法
概述
- 创建对象有三种方法
详细
- 创建对象
创建对象有三种方法
- 对象字面量:使用花括号包含的一组逗号分隔的名值对。注意事项:
- 对象字面量是一个表达式,每次求值都会创建一个新的对象
- 构造函数法
- 原型法
增强的对象字面量的语法
概述
- 如何用新语法写对象
详细
语法:
- 写入变量: ES2015允许直接写入变量作为对象的属性或方法。
- 简写:如果变量名与函数属性名相同可简写成一个属性名
构造函数法
定义:
构造函数就是构造对象的模板函数。
语法:
//function Fn(para1,para2){
function Fn(形参1,形参2){
this.属性名 = 形参1,
this.属性名 = 形参2
}
- Fn:函数名。所有的构造函数名首字母要大写。
- this:在构造函数中的this只是一个占位符,没有指向性。只有当使用new调用构造函数时才会发生指向new出来的那个对象
Object.create()
定义:
Object.create()用于使用指定原型对象创建
关联数组
- 对象就是一种关联数组
- 关联数组:以字符串作为索引的数组。
属性访问错误
报错简述:
- 访问不存在的属性是undefined不会
报错 - 访问不存在的对象会报错
- 访问null和undefined的属性会报错
解决方案
- if语句嵌套
- && 与操作符
- 条件式属性访问操作符:?.
删除属性
语法
delete 对象名。属性名
delete 对象名['属性名']
注意:
- delete操作只能删除自身属性,不能删除继承属性
- delete表达式返回的是布尔值
检测属性的三种方法
in操作符:检测属性(自有+继承)是否存在
示例:
let obj = {x:1,y:undefined}
console.log('x' in obj);//true
console.log('y' in obj);//true
console.log('f' in obj);//false
console.log('toString' in obj)
console.log('valueOf' in obj)
console.log('constructor' in obj)
console.log(obj);
语法:
'属性名' in 对象
hasOwnProperty():检测属性是否是自有属性
- has:有
- own:自己的
- property:属性
示例:
let obj = {x:1}
console.log(obj.hasOwnproperty('x'))
console.log(obj.hasOwnproperty('y'))
console.log(obj.hasOwnproperty('constructor'))
语法:
对象.hasOwnProperty('属性名')
propertylsEnumerable():检测属性是否是可枚举的自有属性
Enumerable:可枚举的
语法:
对象.propertylsEnumerable(属性名)
ES2015允许直接写入变量和函数作为对象的属性或方法。