JS中的对象:
/*
1.对象是什么 : 是一种 以键值对方式存储 复杂数据类型
2.对象和数组异同点 :
相同点: 都可以存储多个数据
不同点: 存储方式不同
数组:有序存储。 下标从0开始递增
* 应用 : 存储相同类型的数据(有顺序)
对象:无序存储。 属性名和属性值一一对应。(键值对)
* 应用: 存储不同类型的数据(没有顺序)
*/
//需求: 存储多个数据. ( 姓名、年龄、性别 )
//方案一: 使用多个变量存储
let name = '小明'
let age = 20
let sex = '男'
//方案二: 使用数组存储多个数据
//数组一般存储相同数据类型的数据.
//如果使用数组来存储不同数据类型的数据,阅读性不高
let arr = ['张三',20,'男']
console.log( arr )
//方案三: 使用对象来存储多个数据
//对象 一般用于存储 数据类型不同的数据
let obj = {
name:'小明',
age:20,
sex:'男'
}
console.log( obj )
对象语法:
/*
1.对象声明 :
let 对象名 = {
属性名 : 属性值 ,
方法名 : 函数
}
2.对象取值 : 对象名.属性名
3.细节: 对象里面的属性是什么类型, 取出来的时候就可以使用它的语法
3.1 如果对象里面属性是'数组',就可以使用数组语法: 对象名.属性名[下标]
3.2 如果对象里面的属性是'函数',就可以使用函数语法: 对象名.方法名()
3.3 如果对象里面的属性是'对象',就可以使用对象语法: 对象名.属性名.属性名
如果对象中的属性值是函数对象,我们一般称呼为对象方法
*/
//1.对象声明
let obj = {
name : '小光',
age : 30,
sex : '男',
hobby : ['吃饭','睡觉','搬砖'] ,
eat : function(){
console.log(11111)
},
friend:{
name:'ikun',
age:20,
}
}
console.log( obj )
//2.对象取值 : 对象名.属性名
console.log( obj.age )//30
console.log( obj.hobby )//['吃饭', '睡觉', '搬砖']
//3.细节: 对象里面的属性是什么类型, 取出来的时候就可以使用它的语法
console.log( obj.hobby[0] )//'吃饭'
obj.eat()
对象操作:
1.查对象属性
/*
1.查对象属性特点
(1)属性名 存在 , 则是获取 属性值
(2)属性名 不存在 , 则是获取 undefined
2.对象取值有两种语法
2.1 点语法: 对象名.属性名
2.2 []语法 : 对象名[ '属性名' ] 对象名[ 变量名 ]
3.小节: 如果不需要解析变量,取值用 点语法. 如果需要解析变量,取值用 []语法
*/
let obj = {
name:'小明',
age:20,
sex:'男',
}
//1.点语法
console.log( obj.name )//'小明'
console.log( obj.girlFrined )//undefined
//2.[]语法: 对象名[ '属性名' ]
/* 注意点
如果[]内部有引号, 则解析为属性名
如果[]内部没有写引号,则解析为变量名
*/
console.log( obj['name'] )
let age = 'sex'
//这里 obj[age] 没有加引号,所以age解析为变量名. age变量中存储的是"sex"
//(1)先解析age得到字符串"sex"
//(2)后解析[] 得到 obj["sex"]
console.log( obj[age] )//'男'
//这里 obj['age']有引号,所以age解析为属性名。 相当于obj.age
console.log( obj['age'] )//20
2.新增与修改对象属性
/*
1.查询属性
点语法 对象名.属性名
[]语法 obj['属性名'] obj[ 变量名 ]
总结: 需要解析变量的时候使用"[]语法", 不需要就用 "点语法"
2.修改属性 :对象名.属性名 = 值
3.新增属性 : 对象名.属性名 = 值
(1)如果对象属性名存在,则是修改属性值
(2)如果对象属性名不存在,则是新增属性
4.删除属性(了解) : delete 对象名.属性名
5.遍历对象: 查询对象所有的属性
*/
let obj = {
name:'张三',
age:20,
sex:'男'
}
//1.修改属性
obj.name = '李四'
console.log( obj )
//2.新增属性
/*
2.1 如果对象属性名存在,则是修改属性值
2.2 如果对象属性名不存在,则是新增属性
*/
obj.score = 90
console.log( obj )
//3.删除属性: delete 对象名.属性名
delete obj.age
console.log( obj )
对象遍历:
/*
1.查询属性
点语法 对象名.属性名
[]语法 obj['属性名'] obj[ 变量名 ]
总结: 需要解析变量的时候使用"[]语法", 不需要就用 "点语法"
2.修改属性 :对象名.属性名 = 值
3.新增属性 : 对象名.属性名 = 值
(1)如果对象属性名存在,则是修改属性值
(2)如果对象属性名不存在,则是新增属性
4.删除属性(了解) : delete 对象名.属性名
5.遍历对象: 查询对象所有的属性
5.1 数组遍历:固定的for循环 for(let i = 0;i<arr.length;i++){ arr[i] }
5.2 对象遍历:固定的for-in循环 for(let key in 对象名 ){ 对象名[ key ] }
*/
let obj = {
name: "小明",
age: 20,
sex: "男",
score:88
}
for (let key in obj) {
console.log( key )//循环变量: 属性名
//思考: key 是变量, 对象取值需要解析变量,使用什么语法? obj[ key ]
console.log( obj[key] )
}
内置对象:
/*
1.内置对象: 由js本身提前写好的对象,里面存储了一些写好的属性和方法,方便开发者直接用
* 相当于手机提前安装好的软件,我们直接拿来使用即可.
2.Math对象 : 数学对象
*/
//(1)圆周率: Math.PI
console.log( Math.PI )//3.141592653589793
//(2)绝对值: Math.abs()
console.log( Math.abs(2) )//2
console.log( Math.abs(-2) )//2
//(3)幂运算: Math.pow(x,y) 求x的y次方
console.log( Math.pow(2,4) )//2x2x2x2 = 16
//(4)上取整: Math.ceil()
console.log( Math.ceil(0.1) )//1
//(5)下取整: Math.floor()
console.log( Math.floor(0.1) )//0
/* 以下三个使用的会多一些 */
//求一组数字最大数 Math.max()
console.log( Math.max(20,80,90,55,100,60) )//100
//求一组数字最小数 Math.min()
console.log( Math.min(20,80,90,55,100,60) )//20
//返回0-1随机小数
console.log( Math.random() )
//求1-100整数
console.log( Math.ceil( Math.random()*100 ) )
数据类型小结:
/* js数据类型有很多种,分为两大类
1.值类型(简单数据类型string boolean number undefined null) :
栈中存储数据,赋值拷贝的是数据,修改拷贝后的数据对原数据没有影响.
2.引用类型(复杂数据类型 array function object) :
栈中存储地址,堆中存储数据。赋值拷贝的是地址,修改拷贝后的数据对原数据有影响
*/
let num1 = 10
//拷贝num1的数据 赋值给 num2
let num2 = num1
num2 = 100
console.log( num1,num2)//10 100
let arr1 = [10,20,30]
//拷贝arr1的地址 赋值给 arr2
let arr2 = arr1
arr2[0] = 100
console.log( arr1,arr2)//[100,20,30] [100,20,30]