美文网首页
js基础阵营:变量篇之特殊变量-对象

js基础阵营:变量篇之特殊变量-对象

作者: 来瓶二锅头00 | 来源:发表于2022-04-04 22:18 被阅读0次

这一章,我们将好好去看看一个特殊的变量,对象。
我们先看看官方的定义:无序属性的集合,其属性可以包含基本值,对象,或者函数。从字面意思上,我们可以理解为对象是一个没有特定顺序的的集合,对象的每一个属性和方法都有一个自己的名称,每一个名称都会有一个值,当然这个值,可以使对象,函数。以及其他基本类型数据。
不过还是太抽象了,我个人其实更倾向于将对象理解成一个“图纸”,一个建房子的图纸,在这个图纸上,我们标明了房子的具体形状,哪里开窗户等等一系列的参数,那么说到对象,就必然会说到实例,同样的道理,在我的理解里,实例,就是按照“图纸”来创建的一个个房子。那么对象这个图纸,有哪些属性和方法呢?

属性类型

对象有两种属性:数据属性以及访问器属性

数据属性

  1. configurable:表示对象是否可以通过delete来删除属性
  2. Enumerable:表示是否可以通过for in 循环返回属性
  3. Writable:表示是否可以修改属性
  4. Value: 表示数据的值。

那么我们如何去修改以及设置这些值呢?好在js提供了一个方法,Object.defineProperty(obj(属性所在的对象),name(属性的名称),dataTypeObj(所要处理的数据类型))方法,如果不指定参数的话,以上1,2,3个数据属性都将是默认值true,如果指定了参数,将会将对象的具体属性的数据属性类型进行特殊处理。下面我们已房子图纸为例,来看下如何处理

var house = {};
Object.defineProperty(house,'name',{
    configurable:false,
    value:'二锅头的房子图纸'
});
console.log(house.name);
delete house.name;
console.log(house.name);

复制到控制台,我们看下会显示什么

configurable.png
可以很明显的看出,没有被删除掉。
现在我们在看看writable,请看代码
var house = {};
Object.defineProperty(house,'name',{
    writable:false,
    value:'二锅头的房子图纸'
});
console.log(house.name);
house.name = '我要修改';
console.log(house.name);

在控制台看下结果

image.png
最后我们来看下enumerable
var house = {};
Object.defineProperty(house,'name',{
    enumerable:false,
    value:'二锅头的房子图纸'
});
for(var key in house){
   console.log(key + ':' + house[key])
}

在控制台中没有任何的输出,说明无法通过for in 来循环出书数据
上面我们说明了对象的4个数据类型,下面我们来看看对象的访问器属性

访问器属性

访问器属性是成对出现的,存与取

  1. getter 对象访问任何一个属性的时候,都需要先通过调用getter函数,由其返回属性的值。
  2. setter 对象的具体的属性写入值的时候,都会调用setter函数,将值写入。

同时对于访问器属性,js同样提供了configurable以及enumerable属性。如果不设置值的话,将默认为false.
同数据属性一样,访问器属性不能跟直接的定义,只能通过Object.defineProperty()方法来设置。同样以上面的例子来说明

var house = {
   name:'二锅头的房子',
   totalMoney:0
};
Object.defineProperty(house,'money',{
  configurable:false,
  get:function(){
    return this.totalMoney + '元';
  },
  set:function(val) {
    this.totalMoney = val;
  }
});
house.money = 200000;
console.log(house);
console.log(house.money);
delete house.money;
console.log(house.money);
将代码拷贝到控制台,我们来看下结果 image.png

我们明明在赋值的时候给的是20000,为啥后面会多一个元呢?这就是get的功能。这样当我们赋值以及读取的时候我们都能够实时的监控了,这也就使得vue的诞生了,后面详细说下vue的原理。(又挖一个坑)
那么我们如何去读取一个对象的属性值呢?

属性特性的读取

在js中,我们难免会需要知道一个对象的数据属性以及访问器属性具体设置的值,所以js提供了Object.getOwnPropertyDescriptor()方法,来获取,同样以上面的例子来举例。

var house = {
   name:'二锅头的房子',
   totalMoney:0
};
Object.defineProperty(house,'money',{
  configurable:false,
  get:function(){
    return this.totalMoney + '元';
  },
  set:function(val) {
    this.totalMoney = val;
  }
});
console.log(Object.getOwnPropertyDescriptor(house,'money'));
复制代码到控制台,我们来看下结果 image.png

至此,我们关于对象的基本知识说完了,下一章,我们将一起来看看对象的创建

相关文章

  • js基础阵营:变量篇之特殊变量-对象

    这一章,我们将好好去看看一个特殊的变量,对象。我们先看看官方的定义:无序属性的集合,其属性可以包含基本值,对象,或...

  • js基础阵营:变量篇之特殊变量-对象的创建

    上一章,我们说到了对象的一些基本的属性,这一章,我们来看下如何去创建一个对象。在js中创建对象有两种方式,一种是单...

  • js基础阵营:变量篇之特殊变量-数组

    前面我们以及说过了,变量的一些基础知识,这章我们将来看看特殊一个变量数组。在其他语言中我们可以知道,数组一般存储的...

  • js基础阵营:变量篇之变量类型

    前面我们已经说过了变量的提升,那么变量具体有哪些类型呢?当前JavaScript具有5个基本数据类型,分别是:nu...

  • js基础阵营:变量篇之变量作用域

    上面已经介绍完了变量的定义,说完定义肯定要说下变量的常见的问题。其实变量的常见问题说来说去也就那么几个,变量作用域...

  • js基础阵营:变量篇之变量,函数提升

    上面已经介绍完了变量的定义,以及变量的作用域问题,这章我们来看看变量提升的问题。在进行这章开始前,我们先来探讨一个...

  • js基础阵营:变量2

    上面已经介绍完了变量的定义,说完定义肯定要说下变量的常见的问题。其实变量的常见问题说来说去也就那么几个,变量作用域...

  • js基础阵营:变量1

    这一次我们首先将视角投向js基础知识之变量,下面看下变量的基础信息姓名:变量类型:松散型定义方式:var,cons...

  • 2018-10-11:JS与jQuery基础

    JS基础 Java: 面向对象 编译型 强变量 服务器JS: 基于对象 解释型 弱变量 客户端 编译和解释:编...

  • JS—匿名函数与命名函数

    链接,我之前做的两篇笔记js变量作用域,里面提到定义函数的不同方式,导致的变量声明提升问题。还有这篇js特殊的对象...

网友评论

      本文标题:js基础阵营:变量篇之特殊变量-对象

      本文链接:https://www.haomeiwen.com/subject/gnhhsrtx.html