Array()
var a = new Array(3);
var b = [undefined, undefined, undefined];
a.length // 3
b.length // 3
a[0] // undefined
b[0] // undefined
0 in a // false
0 in b // true
以上代码告诉我们,直接使用数组定义赋值是更好的方法,而不是用Array()
,使用定义赋值的会在该空间内保留这个键位,但是这个值不会定义,仅仅是保留位置,而使用Array()
,则连键位都不给留,也没有值。
Array静态方法
Array.isArray()
方法返回一个布尔值,是判断该参数是否为一个数组。
map()
map
方法是把 数组中的每一个参数依次传入函数参数。并返回新的数组。但是原数组不变。
var arr=[1,2,3];
arr.map(fonction (n){
return n+1});//[2,3,4]
console.log(arr);//[1,2,3]
map方法接受一个函数作为参数。该函数调用时,map方法向它传入三个参数:当前成员、当前位置和数组本身。
[1, 2, 3].map(function(elem, index, arr) {
return elem * index;
});
// [0, 2, 6]
如果数组有空位,map方法的回调函数在这个位置不会执行,会跳过数组的空位。
var f = function (n) { return 'a' };
[1, undefined, 2].map(f) // ["a", "a", "a"]
[1, null, 2].map(f) // ["a", "a", "a"]
[1, , 2].map(f) // ["a", , "a"]
上面代码中,map方法不会跳过undefined和null,但是会跳过空位。
forEach()
forEach()
方法与map()
方法很相似,也是对数组的所有成员依次执行参数函数。但是,forEach()
方法不返回值,只用来操作数据。这就是说,如果数组遍历的目的是为了得到返回值,那么使用map方法,否则使用forEach()
方法。
forEach()
的用法与map()
方法一致,参数是一个函数,该函数同样接受三个参数:当前值、当前位置、整个数组。
Booleam对象
Boolean(1) // true
Boolean('false') // true
Boolean([]) // true
Boolean({}) // true
Boolean(function () {}) // true
Boolean(/foo/) // true
最后,对于一些特殊值,Boolean对象前面加不加new,会得到完全相反的结果,必须小心。
if (Boolean(false)) {
console.log('true');
} // 无输出
if (new Boolean(false)) {
console.log('true');
} // true
if (Boolean(null)) {
console.log('true');
} // 无输出
if (new Boolean(null)) {
console.log('true');
} // true
面向对象编程1
Javascript没有类的概念,它的全部的面向对象是由构造函数生成的,构造函数的用法如下:
var Vehicle=function(){
this.price=1000;
return 1000;
};
var v=new Vehicle();
console.log(v);
返回
Vehicle { price: 1000 }
构造函数为了与一般的函数区别开,一般第一个字母用大写来表示,构造函数的特点有两个,函数体内部使用了this关键字,代表了所要生成的对象实例。生成对象的时候,必须使用new命令。
使用new
命令可以使得对象取得该构造函数中this
所指向的值,比如以上代码中,我们用了new 指令来取得this的值(是一个名为Vehicle的对象跟着this中给该对象设定了属性名price以及它的值是1000)并赋值给v,而不是函数本身的返回值1000。