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

JavaScript05

js基础阵营:变量篇之特殊变量-对象,第1张

这一章,我们将好好去看看一个特殊的变量,对象。

我们先看看官方的定义:无序属性的集合,其属性可以包含基本值,对象,或者函数。从字面意思上,我们可以理解为对象是一个没有特定顺序的的集合,对象的每一个属性和方法都有一个自己的名称,每一个名称都会有一个值,当然这个值,可以使对象,函数。以及其他基本类型数据。

不过还是太抽象了,我个人其实更倾向于将对象理解成一个“图纸”,一个建房子的图纸,在这个图纸上,我们标明了房子的具体形状,哪里开窗户等等一系列的参数,那么说到对象,就必然会说到实例,同样的道理,在我的理解里,实例,就是按照“图纸”来创建的一个个房子。那么对象这个图纸,有哪些属性和方法呢?

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

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

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

在控制台看下结果

在控制台中没有任何的输出,说明无法通过for in 来循环出书数据

上面我们说明了对象的4个数据类型,下面我们来看看对象的访问器属性

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

同时对于访问器属性,js同样提供了configurable以及enumerable属性。如果不设置值的话,将默认为false.

同数据属性一样,访问器属性不能跟直接的定义,只能通过Object.defineProperty()方法来设置。同样以上面的例子来说明

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

那么我们如何去读取一个对象的属性值呢?

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

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

JavaScript 对象

JavaScript 中的所有事物都是对象:字符串、数值、数组、函数...

此外,JavaScript 允许自定义对象。

所有事物都是对象

JavaScript 提供多个内建对象,比如 String、Date、Array 等等。 对象只是带有属性和方法的特殊数据类型。

布尔型可以是一个对象。

数字型可以是一个对象。

字符串也可以是一个对象

日期是一个对象

数学和正则表达式也是对象

数组是一个对象

甚至函数也可以是对象

JavaScript 对象

对象只是一种特殊的数据。对象拥有属性和方法。

Javascript没有传统面向对象编程语言中的类,全部是对象。

Javascript中的对象是键值对的集合,键的类型是字符串,值可以是任意对象。创建新对象的方式有:new 函数()、{}语法、Object.create(原型对象)。

函数也是对象,是一种包含可运行的代码的特殊对象,并且代码能够以函数调用的形式被执行。函数对象能通过function关键字定义或通过new关键字使用Function构造函数来创建。

在面对Javascript时,要牢记以下两点:

1.1 Javascript不是面向对象的编程语言

如果非要把Javascript归到面向什么的话,Javascript准确的说是面向原型的编程语言,它是从self语言发展而来,除了语法上借鉴了Java,其它方面和Java什么关系都没有,本质上更不同。简单说,Javascript里面没有类,全是对象。在使用Javascript的时候,应该时刻提醒自己:Javascript不是C++、C#或Java。

1.2 Javascript是解释执行的语言

虽然这很显而易见,但如果不时刻牢记这一点,而把Javascript和编译型语言的运行方式混淆的话,也非常不利于理解Javascript。比如,如果你用C++、C#或Java中的局部变量的思想去理解Javascript函数中通过var定义的变量的话,就会有麻烦。

所以,在深入理解Javascript的时候,要谨防长期使用C++、C#等编程语言造成的思维定势却给使用Javascript带来误导。