zoukankan      html  css  js  c++  java
  • JavaScript高级程序设计学习笔记2

    垃圾收集原理:

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

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

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

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

    引用类型:

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

    创建Object实例的方式:

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

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

    1 var person = {
    2     name : "Annika",
    3     age : 29
    4 }

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

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

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

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

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

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

    Array类型:

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

    创建数组的方法:

    1.Array构造函数

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

    2.数组字面量表示法

    1 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()方法,比较得到字符串,所以可以得到意料之外的答案。

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

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

    1 function compare(value1,value2){
    2     if (value1<value2){
    3         return -1;
    4     } else if (value1 < value2){
    5         return 1;
    6     } else {
    7         return 0;
    8     }
    9 }
    1 values.sort(compare);
    2 alert(values);            //0,1,5,10,15

    操作方法:

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

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

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

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

    位置方法:

    共有两个位置方法:

    indexOf():从数组开头

    lastIndexOf():从数组末尾

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

    迭代方法:

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

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

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

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

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

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

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

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

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

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

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

    归并方法

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

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

    1 var numbers = [1,2,3,4,5,4,3,2,1]
    2 
    3 var Result = numbers.reduce(function(prev,cur,index,array){
    4     return prev+cur;
    5 });
    6 console.log(Result);    //25

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

  • 相关阅读:
    thinkinginjava学习笔记07_多态
    thinkinginjava学习笔记06_复用类
    thinkinginjava学习笔记05_访问权限
    thinkinginjava学习笔记04_初始化与清理
    thinkinginjava学习笔记03_基本语法
    thinkinginjava学习笔记02_对象
    关于药物刺激引起的突变
    通路共出现
    关于reference-free去卷积
    一些研究生期间的反思
  • 原文地址:https://www.cnblogs.com/annika/p/8684488.html
Copyright © 2011-2022 走看看