一切皆对象!
对象:object
定义:某种类型的一个【具体】的实例
面向对象编程的前提是先创建对象。在js中如何去定义一个具体的对象?
//语法:
var 对象变量={
key1:value1;
// 键 : 值
key2:value2;
key3:value3;
....
};
一、在js中 任何的对象都是任意一个无序的键值对的集合。
键:字符串
值:js支持的任意类型
var tv={
name:'电视频道',
kinds:['央视频道','地方频道','电影频道'],
isLiving:true;
active:function(){
console.log(`${this.name}总会播放一些综艺节目、电视剧、还会投放一些广告`);
}
}
二、js中对象的键的说明:(加粗为重点)
1、js中对象的键都是字符串。
2、如果键满足标识符的命名规则,那么双引号或者单引号可以省略。
3、如果是纯数值型的键,那么引号也可以省略。
4、如果键不满足标识符的命名规则,也不是纯数值型的键,那么必须使用引号包围。
5、js中对象的键是无序的【唯一的】。
无序:定义的键的顺序和遍历的顺序是不一致的(显示的顺序)。
唯一:一个对象中的所有的键必须不能重复,具有唯一性。如果多个键相同,那么后定义的会覆盖前面的。
键的无序性和唯一性都是因为,键值对的存放的位置要通过键的哈希值来确定。
如果键相同,那么哈希值也是相同的,就会存入相同的位置,产生覆盖。
6、值是跟者键走的,值的特点:
无序,不唯一,可以是js的任意类型。
三、 如何通过对象的键访问对应的值,这种访问是单向,只能通过键去访问键对应的值,不能通过某一个值找到它对应的键。
1、如果键满足标识符的命名规则
obj.键名
obj[“键名”]
obj[变量名] 变量 保存的是键名
2、如果键是纯数字形式
obj[键名]
obj[“键名”]
obj[变量名] 变量 保存的是键名
3、其他情况
obj[“键名”]
obj[变量名] 变量 保存的是键名
四、js关键字:
this:js中关键字,代表一个对象的引用,指向一个对象的引用。
五、对象属性的操作:增、删、改、查。
① 动态添加:
语法:obj.键=值;
obj.gender=male,
obj[‘study’]=function(){},
② 删除:
语法:delete obj.键名;
delete obj.score
③ 修改:
语法:obj.键=值;
注意:可以直接修改值,不能修改键,想改键名,先删除再添加。
④ 获取:
通过键获取对应值。单向映射。
六、遍历对象的方式:
1:for-in 专门用来遍历对象的一种方式。
2:Object.keys(obj) 获得实参对象所有的键,以数组形式返回。
3:Object.values(obj) 获得实参对象所有的键值,以数组形式返回。不能获得对应的键。
4:Object.entries(obj) 获得实参对象的所有键值对,以二维数组形式返回。
const:
①修饰基本数据类型时,声明时必须赋值、只能赋值一次。
②修饰引用数据类型时,声明时必须赋值、只能赋值一次,对象内容可以改变,指向不能改变。
七、对象数组
概念:数组的元素是对象。
八、方法:
call:将当前函数对象借用给其他的对象使用。
语法:函数.call(借用者,参数…)
apply:和call的作用一致
语法:函数apply(借用者,[参数1,参数2,…])
bind:帮助实参对象生成一个和当前函数对象一样的函数对象。
js内置对象
js为何要提供内之对象。
为了给开发者提供一些基础的通用的功能,供开发者快速开发。
Object 对象。
1、作为构造函数使用,创建对象
var obj=new Object();
2、作为工具函数,将任意数据转换为对象。
var obj=new Object();
var num=123;
var obj=Object(num);
console.log(Object(null))//空对象
console.log(Object(undefined))//空对象
3、Object提供静态函数工具:
Object.create(?):创建对象
Object.keys(obj):获得obj所有的key
Object.values(obj):获得obj所有的值
Object.entries(obj):获得obj所有的键值对
4、Object提供一些实例函数供js对象使用
toString():对象强制转换成字符串
hasOwnProperty(key):判断key是否是当前对象的私有属性。
toLocalString():得到当前对象的本地的字符串形式。
valueOf():得到当前对象的原始值
5、instanceof 左边对象是否是右边类型的实例。