本文已参与「新人创作礼」活动, 一起开启掘金创作之路。
对象
对象是 JavaScript 数据类型的一种,对象数据类型可以被理解成是一种数据集合。它由属性和方法两部分构成。
语法
声明对象
let user = {}//使用let声明,使用一对花括号表示数据类型是对象
属性与访问
数据描述性的信息称为属性,如人的姓名、身高、年龄、性别等,一般是名词性的。
- 属性都是成 对出现的(键值对),包括属性名和值,它们之间使用英文
:分隔 - 多个属性之间使用英文
,分隔 - 属性就是依附在对象上的变量
- 属性名可以使用
""或'',一般情况下省略,除非名称遇到特殊符号如空格、中横线等
属性与访问
let user = {
sex:'男',
hobby:'listen music',
//如果属性名加了- (中横线) 我们需要使用单引号''来包裹属性名
'like-eat':'肉'
}
//此时我想添加属性,
//注意添加的属性需要是没有的属性,比如下述name,如果相同就是更改属性值
//1. 对象名.属性名 = 属性值;
user.name = '小明';
//2. 对象['属性名'] = 属性值;
user['age'] = 18;
//更改属性值
user.age = 18;
//查看属性
console.log(user.age);
//我们想要访问带''的属性名时,需要用 对象名['属性名'] 的方式,一般使用对象名.属性名的方式
console.log(user['like-eat']);
//删除属性 --使用delete关键字
delete user.hobby;
//声明user对象
//声明对象,并添加了若干属性后,可以使用 `.` 或 `[]` 获得对象中属性对应的值,我称之为属性访问
方法与调用
数据行为性的信息称为方法,如跑步、唱歌等,一般是动词性的,其本质是函数。
- 方法是由方法名和函数两部分构成,它们之间使用 : 分隔
- 多个属性之间使用英文
,分隔 - 方法是依附在对象中的函数
- 方法名可以使用
""或'',一般情况下省略,除非名称遇到特殊符号如空格、中横线等
let user = {
name : '芒果',
sex:'男',
hobby:'listen music',
//对象方法定义
/*
方法名:function(形式参数){
方法体
}
*/
song: function(){
document.write('我喜欢你 你应该知道');
}
}
//调用对象方法 对象名.方法名(形式参数); 上述形参为null
user.song();
//也可以动态为对象添加方法,动态添加与直接定义是一样的,只是语法上更灵活。
//添加方法
user.listen = function (music) {
console.log(`我在听${music}`);
}
//删除方法
delete user.song;
//更改方法
user.listen = function (music) {
console.log(`给我听${music}`);
}
注:无论是属性或是方法,同一个对象中出现名称一样的,后面的会覆盖前面的。
遍历对象
let user = {
name : '芒果',
sex:'男',
hobby:'listen music'
}
for(let k in user) {
//k获取的是属性名
console.log(k); //name,sex,hobby
//想要获取属性值 用 对象名[k]
console.log(user[k]); //'芒果','男','listen music';
}
注意:for in 不提倡遍历数组 因为 k 是 字符串
内置对象
回想一下我们曾经使用过的 console.log,console其实就是 JavaScript 中内置的对象,该对象中存在一个方法叫 log,然后调用 log 这个方法,即 console.log()。
除了 console 对象外,JavaScritp 还有其它的内置的对象
Math
Math 是 JavaScript 中内置的对象,称为数学对象,这个对象下即包含了属性,也包含了许多的方法。
属性
- Math.PI,获取圆周率
// 圆周率
console.log(Math.PI);
方法
- Math.random,生成 0 到 1 间的随机数
// 0 ~ 1 之间的随机数, 包含 0 不包含 1
Math.random()
- Math.ceil,数字向上取整
// 舍弃小数部分,整数部分加1
Math.ceil(3.4)
- Math.floor,数字向下取整
// 舍弃小数部分,整数部分不变
Math.floor(4.68)
- Math.round,四舍五入取整
// 取整,四舍五入原则
Math.round(5.46539)
Math.round(4.849)
- Math.max,在一组数中找出最大的
// 找出最大值
Math.max(10, 21, 7, 24, 13)
- Math.min,在一组数中找出最小的
// 找出最小值
Math.min(24, 18, 6, 19, 21)
- Math.pow,幂方法
// 求某个数的多少次方
Math.pow(4, 2) // 求 4 的 2 次方
Math.pow(2, 3) // 求 2 的 3 次方
- Math.sqrt,平方根
// 求某数的平方根
Math.sqrt(16)
内置对象非常多,记住常用的就行,遇见忘了的可以去查文档,MDN和菜鸟教程等都可以选择
基本数据类型和引用数据类型
简单类型又叫做基本数据类型或者值类型,复杂类型又叫做引用类型。
- 值类型:简单数据类型/基本数据类型,在存储时变量中存储的是值本身,因此叫做值类型 string ,number,boolean,undefined,null
- 引用类型:复杂数据类型,在存储时变量中存储的仅仅是地址(引用),因此叫做引用数据类型 通过 new 关键字创建的对象(系统对象、自定义对象),如 Object、Array、Date等
堆栈空间分配
- 栈(操作系统):
存储基本数据类型由操作系统自动分配释放存放函数的参数值、局部变量的值等。其操作方式类似于数据结构中的栈; 简单数据类型存放到栈里面 - 堆(操作系统):
存储复杂类型(对象),一般由程序员分配释放,若程序员不释放,由垃圾回收机制回收。 引用数据类型存放到堆里面
let num = 5;//基本数据类型 存储在栈空间
let str = '哈哈哈哈'//基本数据类型 存储在栈空间
let obj = {
name:'芒果';
}
//其中引用类型存放在栈空间,里面存放的是地址
// 数据存放在 堆空间中
// 所以将基本类型数据赋值给另一个元素,被赋值元素变量值改变不会影响赋值元素
let num1 = 5;
let num2 = 55;
num2 = num1;
console.log(num1);//5
console.log(num1);//5
//而引用类型数据的值给另一个引用类型元素给的是地址,另一个元素的值改变会影响引用类型数据的值
let user = {
name : '芒果',
sex:'男',
hobby:'listen music'
}
let user2 = user;
user2.hobby = 'eat mango';
console.log(user.hobby); //eat mango