《JavaScript高级程序设计第三版》——细碎知识痛点整理(第五章)

5.1 Object类型

创建Object实例的方式有两种。第一种是使用new操作符后跟Object构造函数

var person = new Object();
person.name = "Nicholas"; 
person.age = 29;

另一种方式是使用对象字面量表示法。对象字面量是对象定义的一种简写形式,目的在于简化创建包含大量属性的对象的过程。

var person = {
name : "Nicholas",
age : 29
};

在最后一个属性后面添加逗号,会在IE7及更早版本和Opera中导致错误。在使用对象字面量语法时,属性名也可以使用字符串

var person = {}; //与new Object()相同
person.name = "Nicholas"; 
person.age = 29;

5.2 Array类型
与其他语言的主要区别:
ECMAScript数组与其他语言中的数组都是数据的有序列表,但与其他语言不同的 是,ECMAScript数组的每一项可以保存任何类型的数据。ECMAScript数组的大小是可以动态调整的,即可以随着数据的添加自动增长以容 纳新增数据。
创建数组的基本方式有两种。第一种是使用Array构造函数

var colors = new Array();
var colors = Array(3); // 可省略new,创建一个包含3项的数组

创建数组的第二种基本方式是使用数组字面量表示法。数组字面量由一对包含数组项的方括号表示,多个数组项之间以逗号隔开

var names = []; // 创建一个空数组

5.2.1 检测数组
ECMAScript 3做出规定

if (value instanceof Array){
//对数组执行某些操作
} 

ECMAScript 5新增了Array.isArray()方法

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

5.2.5 重排序方法
sort()方法会调用每个数组项的toString()转型方法,然后比较得到的字符串,以确定如何排序
如果第一个参数应该位于第二个之前则返回一个负数,如果两个参数相等则返回0,如果第一个参数应该位于第二个之后则返回一个正数。

var arr = [1,2,2,312,3,231,41];
function compare(a, b){
  return a-b;
}
console.log(arr.sort(compare))//[1, 2, 2, 3, 41, 231, 312]

这个函数对于大数组来说不并合适,因为它将会创建一个新的数组并消耗大量的内存。在这种情况下,你可以使用Array.push.apply(arr1,arr2),它不会创建一个新数组而是将第二个数组合并到第一个数组中,以减少内存使用

var a = [1,2,2,312,3,231,41];
var b = [1,2,2,312,3,231,41];
a.push.apply(a,b);

splice的使用

var colors = ["red", "green", "blue"]; 
console.log(colors);
console.log(colors.splice(1,2),colors);//["green", "blue"] ["red"]

colors = ["red", "green", "blue"]; console.log(colors.splice(3,0,"yellow","orange"),colors)//[] (5) ["red", "green", "blue", "yellow", "orange"]

colors = ["red", "green", "blue"]; console.log(colors.splice(1,1,"yellow","orange"),colors)//["green"] (4) ["red", "yellow", "orange", "blue"]

5.2.7 位置方法
ECMAScript 5为数组实例添加了两个位置方法:indexOf()和lastIndexOf()。
这两个方法都接收两个参数:要查找的项和(可选的)表示查找起点位置的索引。其中,indexOf()方法从数组的开头(位置0)开始向后查找,lastIndexOf()方法则从数组的末尾开始向前查找

var numbers = [1,2,42,1,231,23];
console.log(numbers.indexOf("a"));//查到返回索引,查不到返回-1

5.2.8 迭代方法
filter()函数
通过调用filter()方法创建并返回了包含3、4、5、4、3的数组,因为传入的函数对它们每一项都返回true。这个方法对查询符合某些条件的所有数组项非常有用

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

forEach(),它只是对数组中的每一项运行传入的函数。这个方法没有返回值,本质上与使用for循环迭代数组一样。
map()也返回一个数组,而这个数组的每一项都是在原始数组中的对应项上运行传入函数的结果

var numbers = [1,2,3,4,5,4,3,2,1];
var filterResult = numbers.filter(function(item,index,array){
  return (item > 3);
})
var mapResult = numbers.map(function(item,index,array){
  return item*2;
})
console.log(filterResult);//[4, 5, 4]

5.1 Object类型
创建Object实例的方式有两种。第一种是使用new操作符后跟Object构造函数

var person = new Object();
person.name = "Nicholas"; 
person.age = 29;

另一种方式是使用对象字面量表示法。对象字面量是对象定义的一种简写形式,目的在于简化创建包含大量属性的对象的过程。

var person = {
name : "Nicholas",
age : 29
};

在最后一个属性后面添加逗号,会在IE7及更早版本和Opera中导致错误。在使用对象字面量语法时,属性名也可以使用字符串

var person = {}; //与new Object()相同
person.name = "Nicholas"; 
person.age = 29;

5.2 Array类型
与其他语言的主要区别:
ECMAScript数组与其他语言中的数组都是数据的有序列表,但与其他语言不同的 是,ECMAScript数组的每一项可以保存任何类型的数据。ECMAScript数组的大小是可以动态调整的,即可以随着数据的添加自动增长以容 纳新增数据。
创建数组的基本方式有两种。第一种是使用Array构造函数

var colors = new Array();
var colors = Array(3); // 可省略new,创建一个包含3项的数组

创建数组的第二种基本方式是使用数组字面量表示法。数组字面量由一对包含数组项的方括号表示,多个数组项之间以逗号隔开

var names = []; // 创建一个空数组

5.2.1 检测数组
ECMAScript 3做出规定

if (value instanceof Array){
//对数组执行某些操作
} 

ECMAScript 5新增了Array.isArray()方法

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

5.2.5 重排序方法
sort()方法会调用每个数组项的toString()转型方法,然后比较得到的字符串,以确定如何排序
如果第一个参数应该位于第二个之前则返回一个负数,如果两个参数相等则返回0,如果第一个参数应该位于第二个之后则返回一个正数。

var arr = [1,2,2,312,3,231,41];
function compare(a, b){
  return a-b;
}
console.log(arr.sort(compare))//[1, 2, 2, 3, 41, 231, 312]

这个函数对于大数组来说不并合适,因为它将会创建一个新的数组并消耗大量的内存。在这种情况下,你可以使用Array.push.apply(arr1,arr2),它不会创建一个新数组而是将第二个数组合并到第一个数组中,以减少内存使用

var a = [1,2,2,312,3,231,41];
var b = [1,2,2,312,3,231,41];
a.push.apply(a,b);

splice的使用

var colors = ["red", "green", "blue"]; 
console.log(colors);
console.log(colors.splice(1,2),colors);//["green", "blue"] ["red"]

colors = ["red", "green", "blue"]; console.log(colors.splice(3,0,"yellow","orange"),colors)//[] (5) ["red", "green", "blue", "yellow", "orange"]

colors = ["red", "green", "blue"]; console.log(colors.splice(1,1,"yellow","orange"),colors)//["green"] (4) ["red", "yellow", "orange", "blue"]

5.2.7 位置方法
ECMAScript 5为数组实例添加了两个位置方法:indexOf()和lastIndexOf()。
这两个方法都接收两个参数:要查找的项和(可选的)表示查找起点位置的索引。其中,indexOf()方法从数组的开头(位置0)开始向后查找,lastIndexOf()方法则从数组的末尾开始向前查找

var numbers = [1,2,42,1,231,23];
console.log(numbers.indexOf("a"));//查到返回索引,查不到返回-1

5.2.8 迭代方法
filter()函数
通过调用filter()方法创建并返回了包含3、4、5、4、3的数组,因为传入的函数对它们每一项都返回true。这个方法对查询符合某些条件的所有数组项非常有用

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

forEach(),它只是对数组中的每一项运行传入的函数。这个方法没有返回值,本质上与使用for循环迭代数组一样。
map()也返回一个数组,而这个数组的每一项都是在原始数组中的对应项上运行传入函数的结果

var numbers = [1,2,3,4,5,4,3,2,1];
var filterResult = numbers.filter(function(item,index,array){
  return (item > 3);
})
var mapResult = numbers.map(function(item,index,array){
  return item*2;
})
console.log(filterResult);//[4, 5, 4]

猜你喜欢

转载自www.cnblogs.com/laomi233/p/9099245.html