JavaScript之对象详解-05

1、Object对象

        1.1、Object类型,我们也称为一个对象。是JavaScript中的引用数据类型。它是一个复合值,它将很多值聚合到一起,可以通过名字访问这些值。对象也可以看做是属性的无序集合,每个属性都是一个 键值对。

        1.2、对象除了可以创建自有属性,还可以从一个名为原型的对象那里继承属性。

        1.3、JS中除了 String 、number 、true,false、null、undefined之外,都是对象。

2、创建对象。
        2.1、创建对象有两种方式:
var person = new Object();
person.name = "张三";
person.age = 18;
var person = {
    name : "张三",
    age : 18    
}
3、对象属性的访问
        3.1、访问属性的两种方式:
对象.属性名

对象['属性名']
4、基本数据类型

        JS中的变量包含两种不同的数据类型:基本数据类型 和 引用数据类型。

        JS中有5种基本数据类型:String、Number、Boolean、undefined、null

        基本数据类型的值是无法修改,不可以变的;

        基本数据类型的比较是值的比较,也就是主要两个变量的值相等,我们就认为这两个变量相等。

5、引用数据类型

        引用类型的值是保存在内存中的对象。

        当一个变量是一个对象时,实际上这个对象保存的并不是对象本身,而是对象的引用。

        当从一个变量向另一个变量复制应用类型的值时,并不是创建了新的变量,而是两个变量指向同一个对象。这时 只要改变其中一个另一个也会随之改变。

6、栈和堆

        6.1、JavaScript运行时数据保存在栈内存和堆内存中,简单来说 ,占内存保存的是变量和 基本数据类型,堆内存中保存的是 对象。

        6.2、我们在声明一个变量时候 就在栈内存中创建了一个空间,用来保存变量、

        6.3、如果是基本数据类型就直接保存,如果是应用数据类型,会现在堆内存中保存变量,变量中保存的实际上是堆内存的地址。

var a = 123;
var b = true;
var c = "hello";
var d = {name:'sunwukong',age:18};

        ​​​​​​     

7、数组

        7.1、数组也是对象的一种,数组是用于表达一种有序关系的值的集合的语言结构。 

        7.2、数组的创建

var array = [1,22.44]

        数组内的各个值被称为元素,每个元素都有一个为整数的下标,可以通过下标快速的读取。下标是从0开始的。

8、函数

        8.1、函数是由一连串的子程序(语句的集合)所组成的,可以 被外部程序调用。向函数传递参数之后,函数可以返回一 定的值。

        8.2、通常情况下,JavaScript 代码是自上而下执行的,不过函 数体内部的代码则不是这样。如果只是对函数进行了声明, 其中的代码并不会执行。只有在调用函数时才会执行函数 体内部的代码。

        8.3、这里要注意的是JavaScript中的函数也是一个对象。

        8.4、函数的声明(一)

                8.4.1、首先明确一点函数也是一个对象,所以函数也是在 堆内存中保存的。

                8.4.2、函数声明比较特殊,需要使用function关键字;

var sum = function(a,b){return a+b};

                 8.4.3、上边的例子就是创建了一个函数对象,并将函数对 象赋值给了sum这个变量。其中()中的内容表示执 行函数时需要的参数,{}中的内容表示函数的主体。

        8.5、函数的调用

                8.5.1、调用函数时,传递给函数的参数称为实参 (实际参数)。

                8.5.2、如果想调用我们上边定义的sum函数,可 以这样写:

var result = sum(123,456);

                8.5.3、这样表示调用sum这个函数,并将123和456作 为实参传递给函数,函数中会将两个参数求和 并赋值给result。

        8.6、函数的声明(二)

                8.6.1、可以通过函数声明语句来定义一个函数:函数声明语句以关键字 function开始,其后跟着 函数名、参数列表、函数体。其语法如下:

function 函数名(参数一,参数二){
    函数体;
}

--例如
function sum(a,b){
    return a+b;
}

                8.6.2、上边我们定义了一个函数名为sum,两个参数a和b。函数声明时设置的参数 称为形参(形式参数),这个函数对两个参数做了加法运算并将结果返回。

        8.7、传递参数

                8.7.1、JS中的所有的参数传递都是按值传递的。 也就是说把函数外部的值赋值给函数内部 的参数,就和把值从一个变量赋值给另一 个变量是一样的。

9、执行环境

        9.1、执行环境定义了变量或函数有权访问的其他数据,决定了他们各自的行为。

       9.2、每个执行环境都有一个与之关联的变量对象,环境中定义的所有变量 和函数都保存在这个对象中

        9.3、全局执行环境是最外围的一个执行环境。在 Web 浏览器中,全局执 行环境被认为是 window 对象,因此所有全局变量和函数都是作为 window 对象的属性和方法创建的。

        9.4、某个执行环境中的所有代码执行完毕后,该环境被销毁,保存在其中 的所有变量和函数定义也随之销毁。 在内部环境可以读取外部环境的变量,反之则不行。

10、函数内部属性
        10.1、在函数内部有两个特殊的对象:

                10.1.1、arguments  该对象实际上是一个数组,用于保存函数的参数;

                                同时该函数还有一个属性callee来表示当前函数

                10.1.2、this  this引用的是一个对象,对于最外层代码与函数内部的情况,其 引用目标是不同的。 此外,即使在函数内部,根据函数调用方式的不同,引用对象也 会有所不同。需要注意的是,this 引用会根据代码的上下文语境 自动改变其引用对象。

        10.2、this引用的规则

                10.2.1、在最外层代码中,this引用的是全局对象。

                10.2.2、在函数内,this根据函数调用方式的不同而有所不同。

                

11、构造函数

       11.1、 构造函数是用于生成对象的函数,像之前调用Object()就是一个构造函数。

        创建一个构造函数:

function Myclass(x,y){
    this.x = x;
    this.y = y;
}

         11.2、调用构造函数:

        构造函数本身和普通函数声明方式形式相同。

        构造函数通过new关键字来调用,new关键字会新创建一个对象并返回。

        通过new关键字调用构造函数内的this引用 引用了被新生成的对象。

        11.3、new 关键字

                11.3.1、使用new关键字执行一个构造函数时:

                        首先会先创建一个空的对象,然后会执行相应的构造函数。构造函数中的this将会引用这个新对象。最后 将对象作为结果返回。

                11.3.2、构造函数总是由new关键字调用。

                11.3.3、构造函数和普通函数的区别就在于,调用方式不同。

                11.3.4、任何函数都可以用new来调用,所以任何函数都可以是构造函数。

                11.3.5、在开发中通常会执行的函数和构造函数,构造函数的首字母要大写。

12、属性的访问

        12.1、在对象中保存的数据或者说是变量,我们称之为对象的属性。

        12.2、读取对象的属性有两种方式:                       

 对象.属性名

 对象['属性名']

       12.3、 修改属性值也很简单:

 对象.属性名  = 属性值;

        12.4、删除属性 

 delete 对象.属性名

        12.5、constructor

                每个对象都有一个constructor属性,它引用了当前对象的构造函数。

13、垃圾回收

        不再使用的对象的内存将会自动回收,这个功能叫做垃圾回收。

        所谓不在使用的对象,指的是没有被任何一个变量或属性引用的对象。

        垃圾回收的目的是,使开发者不必为对象的生命周期管理而花费更多精力。

14、原型继承

        14.1、JS是一门面向对象的语言,而且它还是一个基于原型的面向对 象的语言。

        14.2、所谓的原型实际上指的是,在构造函数中存在着一个名为原型 的(prototype)对象,这个对象中保存着一些属性,凡是通过该 构造函数创建的对象都可以访问存在于原型中的属性。

        14.3、最典型的原型中的属性就是toString()函数,实际上我们的对象 中并没有定义这个函数,但是却可以调用,那是因为这个函数 存在于Object对应的原型中。

15、设置原型

        15.1、原型就是一个对象,和其他对象没有任何区别,可以通过构造函数来获取原型对象。

                构造函数.prototype

        15.2、和其他对象一样我们可以添加修改删除原型中的属性,也可以 修改原型对象的引用。

        15.3、需要注意的是prototype属性只存在于函数对象中,其他对象 是没有prototype属性的。

        15.4、每一个对象都有原型,包括原型对象也有原型。特殊的是 Object的原型对象没有原型。

16、获取原型对象的方法

        16.1、除了可以通过构造函数获取原型对象以外,还可以通过具体的对象来获取原型对象。   

Object.getPrototypeOf(对象)

对象._proto_

对象.constructor.prototype

        16.2、需要注意的是,我们可以获取到Object的原型对象,也可以对它的属性进行操作,但是不能修改Object原型对象的引用。

17、原型链

        17.1、基于上述,只要是对象就有原型对象,原型对象还有原型对象,原型对象的原型对象还有原型对象,一直到Object的原型对象。这就构成了一个原型链。

        例如:var mc  = new MyClss(123,456);

        17.2、这个对象本身,原型MyClass.proprototype原型对象的原型对象是Object,Object对 象还有其原型。这组对象就构成了一个原型链。

        17.3、这个链的次序是:mc对象、mc对象原型、原型的原型(Object)、Object的原型

        17.4、当从一个对象中获取属性时,会首先从当前对象中查找,如果没有则顺着向 上查找原型对象,直到找到Object对象的原型位置,找到则返回,找不到则 返回undefined。

18、instanceof

        18.1、之前学习数据类型时候,学习了typeof用来检查一个变量的类型。

        18.2、但是typeof用来检查对象就不好用了,只要是对象 它就会返回 Object;而我们想要了解对象的具体类型,就要用到instanceof运算符了,它主要用于检查对象的具体类型。

语法:var result = 变量 instaceof 类型
19、引用类型

        19.1、JS除了五种基本类型以外都是对象,也就是引用数据类型。虽然都是对象,但是对象的种类却是非常繁多的。比如 array(数组),function(函数)这些都是不同的类型对象。

        19.2、实际上JavaScript提供了多种不同类型的对象。

20、Object:

        20.1、目前为止,我们看到的最多的类型就是Object,它也是我们在JS中使用的最多的对象。

        20.2、虽然Object对象中并没有为我们提供太多的功能,但是我们会经常会用途来存储和传 输数据。

        20.3、创建Object对象有两种方式:

                20.3.1、

var obj = new Object();  

var obj = {}

                              上边的两种方式都可以返回一个Object对象。

                               但是第一种我们使用了一个new关键字和一个Object()函数。

                               这个函数就是专门用来创建一个Object对象并返回的,像这种函数我们称为构造函数。

21、Array

        21.1、Array用于表示一个有序的数组。 JS的数组中可以保存任意类型的数据。

        21.2、创建一个数组的方式有两种:

                使用构造器创建:               

var arr = new Array(数组的长度);

var arr = new Array(1234,'hello',true);

                使用[] 创建:               

var arr = [];

var arr = [1234,'hello',true];

        21.3、读取数组中的值,使用  数组[索引]的方式,注意  索引从0开始;

22、Date

        22.1、Date类型用来表示一个时间。

        22.2、Date采取的是时间戳的形式表示时间,所谓的时间戳指的是从 1970年1月1日0时0秒0分开始经过的毫秒数来计算时间。

        22.3、直接使用new Date()就可以创建一个Date对象。

        22.4、创造对象时不传参数默认创建当前时间。可以传递一个毫秒数 用来创建具体的时间。

        22.5、也可以传递一个日期的字符串,来创建一个时间。

                格式为:月份/日/年 时:分:秒

                例如:06/13/2004 12:12:12

23、Function

        23.1、Function类型代表一个函数,每一个函数都是一个Function类 型的对象。而且都与其他引用类型一样具有属性和方法。

        23.2、由于函数是对象,因此函数名实际上也是一个指向函数对象的 指针,不会与某个函数绑定。

        23.3、函数的声明有两种方式:

function  sum(){

}

var sum = function(){

}

        23.4、由于存在函数声明提升的过程,第一种方式在函数声明之前就 可以调用函数,而第二种不行。

        23.5、函数也可以作为参数

                23.5.1、函数也是一个对象,所以函数和其他对象一样 也可以作为一个参数传递给另外一个函数。

                23.5.2、但是要注意的是使用函数作为参数时,变量后 边千万不要加(),不加()表示将函数本身作为 参数,加上以后表示将函数执行的结果作为参 数。

        23.6、函数对象的方法

                23.6.1、每个函数都有两个方法call()和apply()。

                23.6.2、call()和apply()都可以指定一个函数的运行环境对象,换句话说就是设置函数执行时的this值。

                23.6.3、使用方式:               

函数对象.call(this对象,参数数组)

函数对象.apply(this对象,参数1,参数2,参数N)
24、闭包(closure)

        24.1、闭包是JS一个非常重要的特性,这意味着当前作用域总是能够访问外部作用域中的变量。因为函数是JS中唯一拥有自身作用 域的结构,因此闭包的创建依赖于函数。

        24.2、也可以将闭包的特征理解为,其相关的局部变量在函数调用结束之后将会继续存在。

25、基本包装类型

        25.1、基本数据类型是不能去调用方法的,所以JS中还提供了3个特殊的引 用类型:

                Boolean

                String

                Number

                这三个类型分别包装了Boolean、Number、String并扩展了许多实 用的方法。

        25.2、他们的使用方式和普通的对象一样。 要注意的是使用typeof检查这些包装类型时返回的都是object。

        25.3、Boolean

                25.3.1、Boolean 类型是与布尔值对应的引用类型。

                25.3.2、可以采用这种方式创建:(不推荐使用Boolean包装类)

 var booleanObject = new Boolean(true);
        25.4、Number

                25.4.1、Number是数值对应的引用数据类型。创 建Number对象只需要在调用构造函数时 传递一个数值:

var num = new Numbaer(20);

                25.4.2、使用数值时我们建议使用基本数值,而不 建议使用包装类。

        25.5、String

                25.5.1、String 类型是字符串的对象包装类型,可 以像下面这样使用 String 构造函数来创建:

var str = new String("hello world");

                25.5.2、可以使用length属性来获取字符串的长度。

26、Math

        26.1、JS 还为保存数学公式和信息提供了一个公共位置,即 Math 对象。

        26.2、与我们在 JavaScript 直接编写的计算功能 相比, Math 对象提供的计算功能执行起 来要快得多。 Math 对象中还提供了辅助 完成这些计算的属性和方法。

                

        26.3、Math的方法

                26.3.1、最大最小值             

Math.max();
Math.min();

                26.3.2、舍入               

向上舍:Math.ceil()

向下舍:Math.floor()

四舍五入:Math.round()
                26.3.3、随机数
Math.random()

                        26.3.3.1、选取某个范围的随机数

值 = Math.floor(Math.random() * 可能值的总数 + 第一个可能得值)    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@大龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值