垃圾收集原理:

找出不再使用的变量,然后释放其内存。

js中最常用的垃圾收集方法是标记清除,当变量进入环境时,就将变量标记为“进入环境”,当变量离开环境时,将其标记为“离开环境”,最后由垃圾收集器完成内存清除工作。

另一种不太常见的垃圾收集原理是引用计数,它跟踪每个值被引用的次数,当引用次数为0时,垃圾收集器会释放其内存,但是有可能造成循环引用的问题,这种情况下可以手动把引用设置为null

通常Web浏览器的可用内存比分配给桌面应用程序的少,因此要确保占用最少的内存可以让页面获得更好地性能,所以代码中只保存必要的数据,一旦数据不再有用,最好手动将其值设置为null,来释放其引用——这个做法叫做解除引用

引用类型:

定义:引用类型的值(对象)是引用类型的一个实例。

创建Object实例的方式:

1.new操作符后跟object构造函数。

2.使用对象字面量表示法。

 var person = {
name : "Annika",
age : 29
}

注意:用逗号来分隔不同的属性,最后一个属性不添加逗号。属性名也可以用字符串。在多个可选参数的情况下,对必须值使用命名参数,而使用对象字面量来封装多个可选参数。

使用方式:一般来说都是点表示法,也可以方括号表示法,把访问的属性以字符串写在方括号中。

方括号的主要优点是可以通过变量来访问属性:

 var propertyName = "name";
alert(person[propertyName]); //"Annika"

如果属性名中包含会导致语法错误的字符,或者属性名用的是关键字或保留字,也可以使用方括号表示法:

person["first name"]="Annika";    //属性名中可以包含非字母非数字

Array类型:

ECMAScript与其他语言的不同之处在于它可以保存任何类型的数据。

创建数组的方法:

1.Array构造函数

 var colors = new Array(3);    //创建一个包含3项的数组
var names = new Array("Annika"); //创建一个一项的,即字符串“Annika”的数组

2.数组字面量表示法

 var colors = ["red","blue"];

数组的length属性的特别之处——可以通过设置这个属性,从数组末尾移除项或者添加新项。

检测某个对象是不是数组的方法:Array.isArray();

转换方法:(默认情况下以逗号分隔,用join()方法,可以接受一个分隔符作为参数)

  • toLocaleString(),
  • toString(),返回数组中每个值得字符串形式
  • valueOf(),返回数组本身

栈方法:

栈是一种LIFO(Last-in-first-out)后进先出的数据结构,栈中项的插入和移除都发生在栈顶部。ECMAScript中为数组提供了两种方法:

push():传入任意参数,逐个添加到数组末尾,并返回修改后的数组长度。

pop():从数组末尾移除最后一项,减少length数,并返回移除的项。

队列方法:

队列是一种FIFI(First-in-first-out)先进先出的数据结构,队列在末尾添加项,在列表的前端移除项,有两种新方法:

shift():移除数组的第一项,并返回该项。

unshift():从数组前端推进任意项,并返回数组长度。

重排序方法:

reverse():反转数组顺序。

sort():默认按升序排列数组项,会调用每个数组的toString()方法,比较得到字符串,所以可以得到意料之外的答案。

 var values = [0, 1, 5, 10, 15];
values.sort();
alert(values); //0,1,10,15,5

所以最好给sort添加一个参数:

 function compare(value1,value2){
if (value1<value2){
return -1;
} else if (value1 < value2){
return 1;
} else {
return 0;
}
}
 values.sort(compare);
alert(values); //0,1,5,10,15

操作方法:

cancat():创建当前数组一个副本,将接收到的参数添加到副本末尾,返回新构建的数组

slice():不改变原来的数组,可以接受一到两个参数,只有一个参数就返回从该参数到末尾的所有项,如果是两个,就返回起始和结束位置之间的项,如果参数为负数,就加上数组长度再调用,如果结束位置小于起始位置,则返回空数组。

splice():会改变原来的数组,始终返回被删除的项。

  • 删除:只需指定两个参数,要删除的第一项和要删除的项数。
  • 插入:只需提供3个参数,起始位置,0(要删除的项数)和要插入的项,可以插入多项。
  • 替换:指定的参数与插入相同,只不过0可以改成要删除的项数。

位置方法:

共有两个位置方法:

indexOf():从数组开头

lastIndexOf():从数组末尾

都接受两个参数,要查找的项和要查找的起点位置索引(可选),没找到就返回-1,在比较过程中使用全等操作符。

迭代方法:

共有5个迭代方法,每个方法接受两个参数:要在每一项上运行的函数和运行该函数的作用域对象——影响this的值,其中传入函数的参数有三个,数组项的值、该项在数组中的位置和数组对象本身。

every():对数组中的每一项运行给定函数,如果该函数对每一项都返回true,则返回true。

 var numbers = [1,2,3,4,5,4,3,2,1]

 var everyResult = numbers.every(function(item,index,array){
return (item>2);
}); alert(everyResult); //false

filter():对数组中的每一项运行给定函数,返回该函数会返回true。

 var everyResult = numbers.filter(function(item,index,array){
return (item>2);
}); alert(everyResult); //[3,4,5,4,3]

forEach():对数组每一项运行指定函数,该方法没有返回值。

 numbers.forEach(function(item,index,array){
alert(item*2);
}); //2,4,6,8,10,8,6,4,2

map():对数组中的每一项运行给定的函数,返回每次函数调用的结果组成的数组。

 var mapResult = numbers.map(function(item,index,array){
return item*2;
});
alert(mapResult); //[ 2, 4, 6, 8, 10, 8, 6, 4, 2 ]

some():对数组中的每一项运行指定的函数,如果该函数对任一项返回true,则返回true。

 var someResult = numbers.some(function(item,index,array){
return (item>2);
});
console.log(someResult); //true

归并方法

ECMAScript新增了两个归并数组的方法,这两个方法会迭代数组的所有项,然后构建一个最终的返回值。

reduce():从数组的第一项开始,逐个遍历到最后,接受两个参数,一个在每一项上调用的函数和作为归并基础的初始值,其中函数接受4个参数,前一个值,当前值,项的索引和数组对象。这个函数的任何返回值都会作为第一个参数自动传给下一项。

 var numbers = [1,2,3,4,5,4,3,2,1]

 var Result = numbers.reduce(function(prev,cur,index,array){
return prev+cur;
});
console.log(Result); //

reduceRight():与reduce相同,只是遍历开始的方向不同。

JavaScript高级程序设计学习笔记2的更多相关文章

  1. JavaScript高级程序设计---学习笔记(一)

    今天,2017.3.17开始利用课余时间仔细学习<JavaScript高级程序设计>,将需要掌握的知识点记录下来,争取把书里的所有代码敲一遍并掌握. 1.标识符命名最好是第一个字母小写,剩 ...

  2. javascript高级程序设计学习笔记

    javascript高级程序设计,当枕头书已经好久了~zz  现在觉得自己在js的开发上遇到了一些瓶颈,归根究底还是基础太薄弱,所以重新刷一遍js高程希望有更新的认识. 一.javascript简介 ...

  3. javascript 高级程序设计 学习笔记

    <!--<script> // 异步请求封装 IE6即以上浏览器 // ajax(url,fnSucc,selectID,fnFaild) //url 请求地址 //fnSucc 异 ...

  4. JavaScript高级程序设计---学习笔记(二)

    面向对象程序设计1.属性类型.定义多属性.读取属性特性对象的属性在创建时都带有一些特征值,JavaScript通过这些特征值来定义它们的行为.这些特性是为了实现JavaScript引擎用的,因此不能直 ...

  5. JavaScript高级程序设计学习笔记--面向对象的程序设计(二)-- 继承

    相关文章: 面向对象的程序设计(一) — 创建对象 http://www.cnblogs.com/blackwood/archive/2013/04/24/3039523.html 继承 继承是OO语 ...

  6. JavaScript高级程序设计学习笔记第一章

    作为学习javascript的小白,为了督促自己读书,写下自己在读书时的提炼的关键点. 第一章: 1.JavaScript简史:Netscape Navigator中的JavaScript与Inter ...

  7. JavaScript高级程序设计学习笔记之事件

    1.事件流 事件流描述的是从页面中接收事件的顺序. 事件冒泡 IE的事件流叫做事件冒泡(event bubbling),即事件开始时由最具体的元素(文档中嵌套层次最深的那个节点)接收,然后逐级向上传播 ...

  8. 事件流之事件冒泡与事件捕获<JavaScript高级程序设计>学习笔记

    1.事件流 浏览器开发团队遇到一个很有意思问题:页面的那一部分会拥有特定的事件? 对于理解这个问题您可以想象画在一张纸上的一组同心圆,如果你把手指放在圆心上,那么你的手指指向的其实不是一个圆,而是纸上 ...

  9. JavaScript高级程序设计学习笔记--高级技巧

    惰性载入函数 因为浏览器之间行为的差异,多数JavaScript代码包含了大量的if语句,将执行引导到正确的代码中,看看下面来自上一章的createXHR()函数. function createXH ...

  10. JavaScript高级程序设计学习笔记--错误处理与调试

    try-catch语句 只要代码中包含finally子句,则无论try或catch语句块中包含什么代码--甚至return语句,都不会阻止finally子句的执行,来看下面这个函数: function ...

随机推荐

  1. October 16th 2017 Week 42nd Monday

    The more decisions that you are forced to make alone, the more you are aware of your freedom to choo ...

  2. MyBatis 中的级联

    MyBatis 的级联分为 3 种. 1.鉴别器(discriminator):它是根据某些条件决定采用具体实现类级联的方案,比如体检表要根据性别去区分. 2.一对一(association):比如学 ...

  3. CGJ02、BD09、西安80、北京54、CGCS2000常用坐标系详解

    一.万能地图下载器中的常用坐标系 水经注万能地图下载器中的常用的坐标系主要包括WGS84经纬度投影.WGS84 Web 墨卡托投影.WGS84 UTM 投影.北京54高斯投影.西安80高斯投影.CGC ...

  4. 开发指南专题十四:JEECG微云高速开发平台MiniDao 介绍

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/zhangdaiscott/article/details/27068645   开发指南专题十四:J ...

  5. docker devicemapper 问题

    DOCKER_OPTS= "--storage-driver=devicemapper  --storage-opt  dm.basesize=50G --storage-opt dm.da ...

  6. pam_frpintd.so 错误修复

    PAM unable to dlopen(/lib64/security/pam_fprintd.so): /lib64/security/pam_fprintd.so: cannot open sh ...

  7. RFS实例登录126邮箱/利用cookie登陆百度

    可以直接添加用户关键字,也可以新建资源,将用户关键字添加入资源,然后导入整个资源文件 用户关键字内部实现如下: 打开126邮箱首页: Open Browser  Http://mail.126.com ...

  8. zabbix 客户端添加自定义参数

    0.zabbix客户端配置文件 server和serveractive都需要配置 1.配置自定义参数脚本文件 zabbix_agent.conf中UserParameter字段,可以配置多行 User ...

  9. pyspider爬取数据存入redis--1.安装驱动

    首先安装pyredis的驱动 wget https://pypi.python.org/packages/source/r/redis/redis-2.9.1.tar.gz 解压并cd python  ...

  10. 通过SSH秘钥登录线上MySQL数据库(基于Navicat)

    前言 生产环境的数据库往往需要经过严格的安全限制,所以禁用密码登录,使用秘钥的方式是一种相对安全的登录方式. 原理: 角色: 主机A:其他主机,有访问线上数据库的权限 主机B:线上数据库的主机 主机C ...