美文网首页
javascript高级程序设计读书笔记(三)

javascript高级程序设计读书笔记(三)

作者: youngiyang_打码少年 | 来源:发表于2016-09-08 13:47 被阅读23次

    引用类型

    NO.1 Object类型

    最常用的引用类型是Object类型
    创建Object实例的两种方法:
    方法一:new+构造函数
    var person = new Object();
    person.name = "yzq"
    person.age = 18;
    方法二:使用对象字面量表示法
    var person = {
    name: "yzq",
    age: 18
    }
    使用对象字面量表示法时,属性名称也可以使用字符串并且数字会自动转换为字符串:
    var person = {
    "name": "yzq",
    "age": 18,
    5:true
    }

    一般来说,对象的属性访问都是用点表示法,但是在JS中也可以用[]来表示
    person["name"] 等价于person.name
    用[]的好处是可以通过变量来访问属性或者在点用不了的情况下使用,例如:
    var person = {
    "first name": "dada"
    }
    var a = "first name"
    person[a]

    NO.2 Array类型

    其次常用的引用类型是Array类型,JS的数组也和其他语言有很大的区别,JS的数组的每一项都可以保存任何类型的数据,且JS的数组大小是可以动态调整的,可以随着数据添加自己增长

    创建数组的方法:

    1. var colors = new Array(); 使用Array构造函数;
    2. var colors = ["red","green"] 使用字面量方法;

    数组的长度保存在length属性中,这个属性始终会返回0或者更大的值。
    length属性有一个很大的特点,它不是只读的,所以通过这只这个属性,可以从数组的末尾移除项或者添加新项。例如:

    var colors = ["red","green","blue"]
    colors.length = 2
    console.log(colors[2])   //结果为undefined
    

    所以利用length属性可以方便的在数组尾末添加新项,例如:

    var colors = ["red","green","blue"]
    colors[colors.length]= "black"
    colors[colors.length]= "brown"
    console.log(colors.length)
    

    检测数组:
    对于全局的作用域来说,用instanceof就能检测,但是它的问题在与如果网页中有多个框架,instanceof会由于全局环境不一样出现问题,于是还有一个新的方法Array.isArray(),用法如下:

    if(Array.isArray(value)){
        //对数组进行操作
    }
    

    转化方法:
    1.显示的调用toString方法,会直接将数组返回字符串的表示
    2.alert(数组),因为alert只接收字符串参数,所以它会在后台调用toString方法,当数组方法只接受字符串的方法里,后台会自动去转换

    转化后都默认用逗号去间隔,如果想要用别的符号,需要用join()方法,join方法只接收一个参数,就是分隔符。
    colors.join("||") // red || green || blue

    栈方法(后进先出):
    js为数组提供了push()和pop()方法。以便实现类似栈的功能;
    push()方法接收任意数量的参数,把他们逐个加到数组末尾,并返回修改后的数组的长度
    pop方法从数组末尾移除最后一项,减少数组的length值,并且返回移除的项
    push():

    var colors = ["red","green","blue"]
    var count = colors.push("1","2")
    console.log(count) //5
    

    pop():

    var colors = ["red","green","blue"]
    var count = colors.pop("blue")
    console.log(count) // blue
    

    队列方法(先进先出):
    js为数组提供了shift()和unshift()方法。以便实现类似队列的功能;
    shift()移除数组中的第一个项并返回该项,同时将数组长度减一。结合shift()和push()可以像使用队列一样使用数组

    unshift()在数组前端添加任意个项并返回数组长度。结合unshift()和pop()可以像使用队列一样使用数组

    重排序方法:
    reverse()和sort()
    reverse()方法的功能是反转数组的顺序
    sort()方法是按升序排列数组项,但是sort方法会调用每个数组项的toString()的转型方法。于是比较的都是字符串的大小。例如:

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

    因为sort是转化为字符串比较,所以看起来不是升序排列。
    正确的做法是先定义一个比较函数:

    function compare(value1,value2){
      if(value1>value2) {
        return 1;
      } else if (value1<value2){
        return -1;
      } else{
        return 0;
      }
    }
    
    var values = [0,1,5,10,15]
    values.sort(compare);
    console.log(values)
    

    这个的做法就会让数组里面的值按值比较。

    操作方法:
    concat()
    concat()方法可以基于当前数组中的所有项创建一个新数组,这个方法会先创建当前数组的一个副本,然后将接收到的参数添加到副本的末尾。例如:

    var a = ["a","b","c"]
    var b = a.concat("d",[5,6])
    console.log(b)    // ["a", "b", "c", "d", 5, 6]
    

    slice()
    slice()方法可以基于当前数组中的某几个项创建一个新数组,可以接收一个或两个参数,接收一个参数的时候,表示返回该参数的位置到数组末尾的所有项,接收两个参数的时候,表示返回这两个参数之间的项:

    var a = ["a","b","c","d","e"]
    var b = a.slice(1)
    console.log(b)  // ["b", "c", "d", "e"]
    
    var a = ["a","b","c","d","e"]
    var b = a.slice(1,4)  //注意,起始位置从1开始,而不是从0开始
    console.log(b) //["b", "c", "d"]
    

    splice()最强大的数组方法!,并不是创建数组,而是直接操作数组
    1.传入两个参数:表示删除数组的项,第一个参数表示要删除的第一项的位置,第二个是要删除的数量
    splice(0,2)删除数组中的前两项

    2.传入三个参数:可以向指定位置插入任意数量的项,第一个参数表示起始位置,0(要删除的项目),第三个是要插入的项,如果要插入多个项,可以传入任意个的参数
    splice(2,0,"red","blue")表示从数组的位置2开始插入字符串"red"和"blue"

    3.传入三个参数(第二个参数不为0),替换数组中的指定项
    splice(2,1,"red","blue")表示在位置2,删除1项,然后插入2个字符串"red"和"blue"

    位置方法:
    indexOf()和lastindexOf() 这两个方法都返回查找的项在数组中的位置,一个是从前往后查找,一个是从后往前查找

    var numbers = [1,2,3,4,5,6]
    numbers.indexOf(4);  //3
    

    迭代方法:
    every() 对于数组的每一项运行给定函数,如果该函数对每一项都返回true,则返回true
    filrer() 对于数组的每一项运行给定函数,返回该函数返回true的项组成的数组
    forEach() 对于数组的每一项运行给定函数,没有返回值
    map() 对于数组的每一项运行给定函数,返回每次函数调用的结果组成的数组
    some() 对于数组的每一项运行给定函数,如果该函数有任何项返回true,则返回true
    以上五个函数都能接受两个参数:
    1.要在数组的每一项上运行的函数
    2.运行该函数的作用域(可选)

    归并方法:
    reduce()和reduceRight()
    reduce()方法从数组的第一项开始,逐个遍历到最后;
    reduceRight()从数组的最后一项开始,向前遍历到第一项;
    他们的函数都可以接收四个参数,前一个值,当前值,项的索引和数组对象。

    var values = [1,2,3,4,5]
    var sum = values.reduce(function(prev,cur,index,array){
     return prev+ cur; 
    });
    
    console.log(sum);   //15
    

    这个函数返回的任何值都会当做为第一个参数传给下一项,例如1+2之后,变成3传给下一项,3+3在传递给下一项,所以结果为15。

    相关文章

      网友评论

          本文标题:javascript高级程序设计读书笔记(三)

          本文链接:https://www.haomeiwen.com/subject/egmsettx.html