1、创建字符串
1.1 new Array()
var arr1 = new Array();
var arr2 = new Array(6); 数组的长度为6
var arr3 = new Array(1, 2, 3, 4); 括号中的元素为数组的项, length为元素个数
1.2 [] 简写
var arr4 = [1,2,3,4]
2、数组
2.1 数组的属性
constructor
对创建数组对象的Array构造函数的引用,
length
数组的长度
prototype
我们创建的每一个函数都有一个prototype(原型)属性,这个属性是一个指针,指向一个对象,而这个对象的用途是包含可以由特定类型的所有实例共享的属性和方法。prototype方法能让我们有能力向对象添加属性和方法。
2.2数组的方法
concat 连接两个或多个数组,返回结果。
join 将数组中所有的元素通过制定的分割符放入一个字符串中。
pop 删除并返回数组的最后一个元素。
push 向数组末尾追加一个或多个元素,并返回数组的增加元素后的长度。
reverse 颠倒数组中元素的顺序。
shift 删除并返回数组的第一个元素。
unshift 向数组的开头添加一个或多个元素,并返回新的长度。
slice 从数组中返回已选定的元素。
sort 对数组的元素进行排序,并返回排序后的数组。
splice 删除元素,并向数组中删除的位置添加新的元素,返回删除的元素。
toString 将数组转换成字符串,元素之间用 ‘,’ 隔开。
valueOf 返回数组对象的原始值。
map 通过制定方法处理数组中的每一个元素,并返回处理后的数组。
find 检索数组中的元素,并返回第一个符合要求的元素
filter 检索数组中的元素,并以数组的形式返回所有符合要求的元素
every 检测数组中的每一个元素是否符合条件,是则返回true,否则是false.
some 检测数组中是否符合条件的元素,有则返回true,否则是false.
foreach 循环遍历数组的元素,作用相当于for循环。
2.3创建数组
数组字面量literal
var arr = [1, 2, 3];
构造时传入数组元素
var arr = new Array(123, "asd", false); // length为传入元素的个数。
先构造,再用下标赋值。
var arr = new Array(3); // (3) [empty × 3],length为参数给出的3。
arr[0] = 123;
arr[1] = "asd";
arr[2] = false; // 元素填充完毕
用非数值定义映射关系(不推荐)。
var arr = new Array(); // 可以不指定数组长度
arr["aaa"] = 123; // 定义多个映射不影响数组的length值。
arr[false] = "asd";
arr[null] = false;
console.log(arr); // [aaa: 123, false: "asd", null: false]
2.4数组的五种遍历
arr = [“first”, 2, false];
普通for循环。
for (let index = 0; index < arr.length; index++) {
console.log(index, arr[index]);
}
for…in,可遍历数组和对象。
for (let index in arr) {
console.log(index, arr[index]);
}
for…of,只能遍历数组(数组是iterable,可迭代的),不能遍历对象。
for (let element of arr) {
console.log(element);
}
forEach()
arr.forEach(function(value, key) {
console.log(key, value);
});
map()
arr.map(function(value, key) {
// statements... // 可以做遍历。
return key + "-" + value; // 新数组的元素组成。
});
3、创建对象
第一种:Object构造函数创建
var Person = new Object();
Person.name = 'Nike';
Person.age = 29;
这行代码创建了Object引用类型的一个新实例,然后把实例保存在变量Person中。
第二种:使用对象字面量表示法
var Person = {};//相当于var Person = new Object();
var Person = {
name:'Nike';
age:29;
}
对象字面量是对象定义的一种简写形式,目的在于简化创建包含大量属性的对象的过程。也就是说,第一种和第二种方式创建对象的方法其实都是一样的,只是写法上的区别不同
在介绍第三种的创建方法之前,我们应该要明白为什么还要用别的方法来创建对象,也就是第一种,第二种方法的缺点所在:它们都是用了同一个接口创建很多对象,会产生大量的重复代码,就是如果你有100个对象,那你要输入100次很多相同的代码。那我们有什么方法来避免过多的重复代码呢,就是把创建对象的过程封装在函数体内,通过函数的调用直接生成对象。
第三种:使用工厂模式创建对象
function createPerson(name,age,job){
var o = new Object();
o.name = name;
o.age = age;
o.job = job;
o.sayName = function(){
alert(this.name);
};
return o;
}
var person1 = createPerson('Nike',29,'teacher');
var person2 = createPerson('Arvin',20,'student');
在使用工厂模式创建对象的时候,我们都可以注意到,在createPerson函数中,返回的是一个对象。那么我们就无法判断返回的对象究竟是一个什么样的类型。于是就出现了第四种创建对象的模式。
第四种:使用构造函数创建对象
function Person(name,age,job){
this.name = name;
this.age = age;
this.job = job;
this.sayName = function(){
alert(this.name);
};
}
var person1 = new Person('Nike',29,'teacher');
var person2 = new Person('Arvin',20,'student');
对比工厂模式,我们可以发现以下区别:
1.没有显示地创建对象
2.直接将属性和方法赋给了this对象
3.没有return语句
4.终于可以识别的对象的类型。对于检测对象类型,我们应该使用instanceof操作符,我们来进行自主检测:
alert(person1 instanceof Object);//ture
alert(person1 instanceof Person);//ture
alert(person2 instanceof Object);//ture
alert(person2 instanceof Object);//ture
同时我们也应该明白,按照惯例,构造函数始终要应该以一个大写字母开头,而非构造函数则应该以一个小写字母开头。
那么构造函数确实挺好用的,但是它也有它的缺点:
就是每个方法都要在每个实例上重新创建一遍,方法指的就是我们在对象里面定义的函数。如果方法的数量很多,就会占用很多不必要的内存。于是出现了第五种创建对象的方法
第五种:原型创建对象模式
function Person(){}
Person.prototype.name = 'Nike';
Person.prototype.age = 20;
Person.prototype.jbo = 'teacher';
Person.prototype.sayName = function(){
alert(this.name);
};
var person1 = new Person();
person1.sayName();
使用原型创建对象的方式,可以让所有对象实例共享它所包含的属性和方法。
如果是使用原型创建对象模式,请看下面代码:
function Person(){}
Person.prototype.name = 'Nike';
Person.prototype.age = 20;
Person.prototype.jbo = 'teacher';
Person.prototype.sayName = function(){
alert(this.name);
};
var person1 = new Person();
var person2 = new Person();
person1.name ='Greg';
alert(person1.name); //'Greg' --来自实例
alert(person2.name); //'Nike' --来自原型
当为对象实例添加一个属性时,这个属性就会屏蔽原型对象中保存的同名属性。
这时候我们就可以使用构造函数模式与原型模式结合的方式,构造函数模式用于定义实例属性,而原型模式用于定义方法和共享的属性。
第六种:组合使用构造函数模式和原型模式
function Person(name,age,job){
this.name =name;
this.age = age;
this.job = job;
}
Person.prototype = {
constructor:Person,
sayName: function(){
alert(this.name);
};
}
var person1 = new Person('Nike',20,'teacher');