Js-基础-对象

189 阅读5分钟

本文已参与「新人创作礼」活动, 一起开启掘金创作之路。

对象

对象是 JavaScript 数据类型的一种,对象数据类型可以被理解成是一种数据集合。它由属性和方法两部分构成。

语法

声明对象

let user = {}//使用let声明,使用一对花括号表示数据类型是对象

属性与访问

数据描述性的信息称为属性,如人的姓名、身高、年龄、性别等,一般是名词性的。

  1. 属性都是成 对出现的(键值对),包括属性名和值,它们之间使用英文 : 分隔
  2. 多个属性之间使用英文 , 分隔
  3. 属性就是依附在对象上的变量
  4. 属性名可以使用 ""'',一般情况下省略,除非名称遇到特殊符号如空格、中横线等

属性与访问

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对象
//声明对象,并添加了若干属性后,可以使用 `.` 或 `[]` 获得对象中属性对应的值,我称之为属性访问

方法与调用

数据行为性的信息称为方法,如跑步、唱歌等,一般是动词性的,其本质是函数。

  1. 方法是由方法名和函数两部分构成,它们之间使用 : 分隔
  2. 多个属性之间使用英文 , 分隔
  3. 方法是依附在对象中的函数
  4. 方法名可以使用 ""'',一般情况下省略,除非名称遇到特殊符号如空格、中横线等
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.logconsole其实就是 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等

堆栈空间分配

  1. 栈(操作系统):存储基本数据类型由操作系统自动分配释放存放函数的参数值、局部变量的值等。其操作方式类似于数据结构中的栈; 简单数据类型存放到栈里面
  2. 堆(操作系统):存储复杂类型(对象),一般由程序员分配释放,若程序员不释放,由垃圾回收机制回收。 引用数据类型存放到堆里面
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