JS学习笔记-基础理论+数组

来源:互联网 发布:金石计价软件公司地址 编辑:程序博客网 时间:2024/06/05 20:38

this:

this指向的是一个对象,这个对象为函数执行的上下文对象。

根据函数的调用方式的不同,this会指向不同的对象。

1.以函数的形式调用时,this永远都是window

2.以方法的形式调用时,this就是调用方法的那个对象

3.当以构造函数的形式调用时,this就是新创建的那个对象

--------------------------------------------------------------------------------------------------

使用工厂方法莫模式创建对象,对象的创建永远都是 Object

var obj = new Object();

使用构造函数创建一个对象。

注:构造函数和普通函数的区别就是调用方式的不同,普通函数是直接调用,构造函数需要使用new关键字来调用。

var test = new Test()

function Test(){

}

构造函数的执行流程:

1.立刻创建一个新的对象

2.将新建的对象设置为函数中this,在构造函数中可以使用this来引用新建的对象

3.逐行执行函数中的代码

4.将新建的对象作为返回值返回

使用instanceof可以检查一个对象是否是一个类的实例。

使用同一个构造函数创建的对象,称为一类对象,也将一个构造函数成为一个类。通过一个构造函数创建的对象,称为是类的实例。

一模一样的方法完全可以使所有的对象共享同一个方法。

-------------------------------------------------------------------------------------------------

原型 prototype

我们所创建的每一个函数,解析器都会向函数中添加一个属性 prototype,这个属性对应着一个对象,这个对象就是我们所谓的原型对象。

如果函数作为普通函数调用prototype没有任何作用。

当函数以构造函数调用时,它所创建的对象中都会有一个隐含的属性,指向该构造函数的原型对象,我们可以通过__proto__来访问该属性

原型对象就相当于一个公共的区域,所有同一个类的实例都可以访问到这个原型对象,我们可以将对象中共有的内容,统一设置到原型对象中。

当我们访问对象的一个属性或方法时,它会先在对象自身中寻找,如果有则直接使用,如果没有则会去原型i对象中寻找,如果找到则直接使用。

以后我们创建构造函数时,可以将这些对象共有的属性和方法,统一添加到构造函数的原型对象中,这样不用分别为每一个对象添加,也不会影响到全局作用域,就可以使每个对象都具有这些属性和方法。

使用关键字 in 可以检查对象中是否包含某个属性,如果对象中没有但是原型中有,也会返回true!!!

可以使用对象的 hasOwnProperty() 来检查对象自身中是否有该属性!!!

原型对象也是对象,所以它也有原型,当我们使用一个对象的属性或方法时,会先在自身中寻找,自身中如果有,则直接使用,如果没有则去原型对象中寻找,如果原型对象中有,则使用,如果没有则取原型的原型中去寻找,直到找到Object对象的原型。Object对象的原型没有原型,如果在Object中依然没有找到,则返回undefined!!!

-------------------------------------------------------------------------------------------------

toString()  可以修改prototype的toString方法,实现打印对象的基本信息。

-------------------------------------------------------------------------------------------------

GC(垃圾回收)

程序运行过程中也会产生垃圾,会导致程序运行的速度过慢,所以需要一个垃圾回收的机制,来处理程序运行过程中产生的垃圾!

将不再使用的对象设置为null,这样就可以保证垃圾回收机制自动回收。

-------------------------------------------------------------------------------------------------

使用typeof 来检查当前属性时什么。

内建对象

宿主对象

自定义对象

数组(Array)

使用内建对象创建数组:var arr = new Array();

给数组赋值:

数组[index] = 值

读取数组中的对象,数组[索引],如果读取不存在的索引,它不会报错,而是返回undefined

注:

对于连续的数组,使用length可以获取到数组的长度,(元素的个数)

对于非连续的数组,使用length会获取到数组的最大的索引+1 !!!尽量不要创建非连续的数组

修改length:

如果修改的length大于原长度,则多出部分会空出来,

如果修改的length小于原长度,则多出部分会被删除!!!

总是在数组最后一位添加元素 数组[数组.length] = 值

使用字面量来创建数组:

var arr = [];;

区分:

var arr = [10];//创建一个长度为1的数组,并且里面有一个值为10

var arr = new Array(10); //创建一个长度为10的数组,其中每个值为空"";

数组中的元素可以是任意的数据类型。也可以是对象,也可以是函数。也可以是数组。

arr = ["hello",1,true,undefined];

数组常用的操作方法:

push() 向数组的末尾添加一个或多个元素,并返回最新的长度

pop() 删除数组的最后一位元素,并返回被删除的元素

unshift() 向数组的开头添加一个或多个元素,并返回最新的长度

shift() 删除数组开头的一个元素,并返回被删除的元素

slice() 从已有的数组中返回选定的元素 ,含首不含尾,该方法不会改变原数组,而是将截取到的元素封装到一个新数组中返回。第一个参数是开始索引,第二个参数是结束索引。结束索引可以省略不写,此时从开始索引截取到末尾。如果传递一个负值,则从后往前计算。

splice() 删除元素,并向数组添加新元素。第一个参数为开始位置索引,第二个参数为删除的数量,原数组的值被改变。第三个参数及以后可以传递一些新的元素,这些元素将会自动插入到开始位置索引前边,第二个参数传0表示不删除!!!

concat() 将数组或者多个元素拼接为一个新的数组,不会对原数组产生影响。

join()  可以指定一个字符串作为参数,将数组的元素按照指定的字符串拼接返回一个字符串。默认使用逗号。

reverse(0 反转数组。对原数组产生影响/

sort() 对数组中的元素进行排序,对原数组!!默认会按照unicode编码进行排序。sort() 中添加一个回调函数,来指定排序规则。回调函数中需要定义两个形参,第一个参数在第二个参数之前。

var arr = [5,4];

arr.sort(function(a,b){

if(a > b){

return 1;

}else if(a < b){

return -1;

}else{

return 0;

}

//简写 return a - b;

});
数组的遍历:

for循环

forEach() 注:ie8以上不支持!!!

forEach() 方法需要一个函数作为参数。

由我们创建但是不由我们调用的,我们称为回调函数。

arr.forEach(function(){});// 将遍历到的元素以实参的形式传递进来,我们可以定义形参,来读取这些内容!!!

在回调函数中会传递三个参数。第一个参数是当前正在遍历的元素,第二个参数是当前遍历元素的下标(索引),第三个参数是当前遍历的数组。


-------------------------------------------------------------------------------------------------


-------------------------------------------------------------------------------------------------