什么是对象?
在Javascript中,对象是一组无序的相关属性和方法的集合,所有的事物都是对象,例如字符串、数值、数组、函数等。
为什么需要对象?
保存一个值时,可以使用变量,保存多个值(一组值)时,可以使用数组,如果要保存一个人的完整信息呢?
JS中的对象表达结构更清晰,更强大。
创建对象的三种方式
一、利用字面量创建对象
对象字面量:就是花括号{ }里面包含了表达这个具体事物(对象)的属性和方法
//var obj = {} //创建一个空的对象
var obj = {
uname:'张三丰',
age:18,
sex:'男',
sayHi:function(){
console.log('hi~')
}
}
(1)里面的属性或者方法我们采取键值对的形式 键 属性名 : 值 属性值
(2)多个属性或者方法中间用逗号隔开的
(3)方法冒号后面跟的时一个匿名函数
2.使用对象
(1)调用对象的属性 我们采取 对象名.属性名 . 我们理解为 的
console.log(obj.uname)
(2)调用属性还有一种方式 对象名[‘属性名’]
console.log(obj[‘age’])
(3)调用对象的方法 sayHi 对象名.方法名( ) 千万别忘记添加小括号
二、利用new Object创建对象
var obj = new Object() //创建了一个空的对象
obj.uname = '张三丰';
obj.age= 18;
obj.sex= '男';
obj.sayHi = function(){
console.log('hi~');
}
(1)我们是利用 等号 = 赋值的方法 添加对象的属性和方法
(2)每个属性和方法之间用 分号结束
console.log(obj.uname)
console.log(obj[‘sex’])
obj.sayHi()
三、利用构造函数创建对象
我们为什么需要使用构造函数?
//因为我们前面两种创建对象的方式一次只能创建一个对象
//我们一次创建一个对象 里面很多的属性和方法是大量相同的 我们只能复制
//因此我们可以利用函数的方法 重复这些相同的代码 我们就把这个函数称为构造函数
//又因为这个函数 里面封装的不是普通代码 而是对象
//构造函数 就是把我们对象里面一些相同的属性和方法抽象出来封装到函数里面
**构造函数:**是一种特殊的函数,主要用来初始化对象,即为对象成员变量赋初始值,它总与new运算符一起使用。我们可以把对象中一些公共的属性和方法抽取出来,然后封装到这个函数里面。
构造函数的语法格式:
function 构造函数名( ){
this.属性 = 值
this.方法 = function( ){}
}
new 构造函数名( )
//01.构造函数名字首字母要大写
//02.构造函数不需要return 就可以返回结果
//03.我们调用构造函数 必须使用 new
//04.我们只要new Star()调用函数就创建一个对象 ldh{}
//05.我们的属性和方法前面必须添加 this
//我们需要创建四大天王的对象 相同的属性:姓名 年龄 性别 相同的方法:唱歌
//1.构造函数 明星 泛指的某一大类 它类似于 Java 语言里面的 类(class)
//构造函数 抽象了对象的公共部分,封装到了函数里面,它泛指某一大类(class)
function Star(uname,age,sex){
this.name = uname;
this.age = age;
this.sex = sex;
this.sing = function(song){
console.log(song)
}
}
//2.对象 是一个具体的事物 刘德华 {name:"刘德华",age:18,sex:"男",sing:f}
//创建对象 特指某一个,通过new关键字创建对象的过程我们也称为对象实例化
var ldh = new Star('刘德华',18,'男') //调用函数返回的是一个对象
console.log(ldh.name)
console.log(ldh['sex'])
ldh.sing('冰雨')
var zxy= new Star('张学友',19,'男')
console.log(zxy.name)
console.log(zxy['age'])
zxy.sing('李香兰')
//我们利用构造函数创建对象的过程我们也称为对象的实例化
new在执行时会做四件事情:
1.在内存中创建一个新的空对象
2.让this指向这个新的对象
3.执行构造函数里面的代码,给这个新对象添加属性和方法
4.返回这个新对象(所以构造函数里面不需要return)
遍历对象属性
for…in语句用于对数组或者对象的属性进行循环操作。
语法结构:
for(变量 in 对象){
}
var obj = {
name:'pink老师',
age:18,
sex:'男',
}
//我们使用 for in 里面的变量 我们喜欢写 k 或者 key
for(var k in obj){
console.log(k); //key 变量 输出 得到的是 属性名
console.log(obj[k]); //obj[k] 得到的是 属性值
}
案例:
let obj = {
title:‘手机’,
pageIndex:3,
pageSize:20
}
将上面的对象转为字符串格式:“title=手机&pageIndex=3&pageSize=20”
//对象可以通过 for in 循环,遍历出它的所有的属性
for(let key in obj){
console.log(key)
}
//获取对象属性的值,有两种方式,第一种是:对象.属性名 第二种是:对象['属性名']
console.log(obj.title)
console.log(obj['title'])
//01-1.常规写法(循环+拼接)
let str1 = ''
for(let key in obj){
str1+=key+'='+obj[key]+'&'
}
//判断最后一位 去掉最后一位的&
str1 = str1.substring(0,str1.length-1)
console.log(str1)
//01-2.优雅版
let arr1 = []
//循环对象的所有属性,Key返回的值是:title pageIndex pageSize
for(let key in obj){
//obj[key]返回对象的属性对应的值
//[key,obj[key]] 返回的是:[属性名,属性值]
//[key,obj[key]].join('=') 返回的是:属性名=属性值
let kv = [key,obj[key]].join('=')
arr1.push(kv)
}
//此时arr1是:['title=手机','pageIndex=3','pageSize=20']
let str1 = arr1.join('&') //再将数组中的3个字符串,通过&进行拼接
console.log(str1)
//02.通过Object.keys()方法
Object的keys()方法 和 Object的values()方法
//Object的keys()方法,返回指定对象的所有属性名
console.log(Object.keys(obj))
//Object的values()方法,返回指定对象的所有属性值
console.log(Object.values(obj))
//forEach( )的方法
let arr2 = []
//Object.keys(obj)返回的是数组
Object.keys(obj).forEach(function(key){
let kv = [key,obj[key]].join('=')
arr2.push(kv)
}
let str2 = arr2.join('&')
console.log(str2)
//map( )的方法
let arr3 = Object.keys(obj).map(function(key){
//返回的是:['title=手机','pageIndex=3','pageSize=20']
return [key,obj[key]].join('=')
})
let str3 = arr3.join('&')
console.log(str3)
//map( )的进阶方法
let str4 = Object.keys(obj).map(function(key){
//返回的是:['title=手机','pageIndex=3','pageSize=20']
return [key,obj[key]].join('=')
}).join('&')
console.log(str4)
let str = ‘title=手机&pageIndex=3&pageSize=20’
将上面的字符串,转为对象如:{title:‘手机’,pageIndex:‘3’,pageSize:‘20’}
let obj = {
name:'张三',
gender:'男'
}
console.log(obj)
obj.name = '李四' //有name属性,就修改name属性
obj.age= 20 //没有age属性,就添加age属性
obj['height'] = 188 //没有height属性,就添加height属性
//对象,可以通过.的方式或[]的方式,添加属性,添加方法
console.log(obj)
let obj = {} //先定义一个空对象,不明确对象的内容
let str = 'title=手机&pageIndex=3&pageSize=20'
//01.将字符串根据指定的字符打散成新数组
let arr1 = str.split('&')
//02.循环数组
arr1.forEach(function(item){
//每一项元素,再根据=号字符 打散成数组
let kv = item.split('=')
//每次向对象里面添加 属性和属性值
obj[kv[0]] = kv[1]
})
console.log(obj)
案例:
let str = ‘i like apple i like orange i like banana i like you’
//用对象保存上面的字符串中每个字符串出现的次数,空格排除
//如:{a:4,b:5,c:1,…}
let obj = {} //先定义个空对象
//01.将原始字符串打散成数组
let arr = str.split('')
//02.循环数组,给数组添加属性
arr.forEach(function(r){
//忽略掉空格
if(r===' ') return
//判断对象中是否有指定的属性
if(obj[r]){
//如果有该属性,属性值加1
obj[r] = obj[r] + 1
}else{
//如果没有,添加该属性,属性值赋值为1
obj[r] = 1
}
})
console.log(obj)
//找出字符串中出现次数最多的字符以及出现的次数
//如:{name:‘d’,count:8}
//先定义一个对象,用于接收出现次数最多的字符
let maxCode = {
name:'',
count:0
}
Object.keys(obj).forEach(function(key){
if(maxCode.count<obj[key]){
maxCode.name = key
maxCode.count= obj[key]
}
})
console.log(maxCode)