美文网首页
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