在JS中一个对象的数据属性一般有4个特性,分别为

值(value)
可写性(writable)
可枚举性(enumerable)
可配置性(configurable)
后三者的值都是布尔型
Object.getOwnPropertyDescriptor() 能够获得某个对象特定属性的属性描写叙述符
想要批量改动或者创建这四个特性需调用
Object.defineProperties()第一个參数是要改动的对象。第二个參数是一个映射表。它包括须要新建或者改动的属性的名称,以及他们的属性符描写叙述
单个调用Object。defineProperty()
(仅仅能改动自身的不能改动继承的)

数组

数组中的索引能够是不连续的(对于不连续的数组,其length属性大于元素个数)
数组有两种创建方式(直接量,跟构造函数)

//直接量
var ary = [1,3,2];
//构造函数
var ary = new Array();
/*
    假设实例化一个数组对象时传递了一个參数
    ary = new Array(10);
    表示的是 ary这个数组的长度是10;
    假设传递了两个或者以上则跟直接量创建的‘一样’
*/

全部的数组都是对象。能够为其创建随意名字的属性。


ECMAScript 5 中新增的数组方法。基本都是遍历数组,原数组本身不变。
这些方法接受两个參数。一个function,一个context
第一个參数function中一般传递三个參数,分别为:当前遍历到的数组元素。当前遍历到的数组元素的索引,数组本身。

第二个參数 context 是可选參数,传递了。那么第一个參数function中的this,即为context。

默觉得window
1.forEach,从头自尾的遍历数组的每一项
举个栗子

var ary =[1,2,3,4];
ary.forEach(function(){
    console.log(arguments);
})
/*执行结果
VM146:3 [1, 0, Array[4]]
VM146:3 [2, 1, Array[4]]
VM146:3 [3, 2, Array[4]]
VM146:3 [4, 3, Array[4]]
*/

2.map:将数组的每一项传给指定的函数,并返回一个数组
举个栗子

var b = ary.map(function(item){
item *= item;

})
/*
执行结果
b
[undefined, undefined, undefined, undefined]
*/
var b = ary.map(function(item){
    return item *= item;
})
/*
执行结果
b
[1, 4, 9, 16]
*/

3.filter()返回的数组元素是调用的数组的一个子集。通过传递的逻辑来推断。

举个样例

var b = ary.filter(function(item){
    return item >2;
})
/*
b
[3, 4]
*/

4.every()和some()
它们对数组元素应用指定函数进行推断,返回true跟false
every是针对全部的。仅仅有当遍历全然部且均满足条件时才会返回true,在遍历的过程中,一旦有不符合条件的,则返回false。并停止遍历。
举个样例

var num = 0;
ary.every(function(item){
    num++;
    return item<2;
})
/*false
num
2*/

some是针对,数组当中某个元素,一旦有一个元素满足条件,则返回true,且终止遍历,否则。直到遍历玩全部的,均不符合条件,则返回false。

5.reduce 跟 reduceRight
reduce()和reduceRight是使用指定的函数将数组元素进行组合,生成单个值。

举个样例

ary.reduce(function(x,y){
return x+y;
})
//10

reduce 须要两个參数。

第一个是执行简单会操作的函数。第二个參数是给函数传递一个初始值。
举个样例

ary.reduce(function(x,y){
return x+y;
},10)
//20

第一个參数function的參数
第一个为,当前计算的累积值(默觉得0,假设reduce传递了第二个參数,则为第二个參数的值)
第2-4个參数。数组元素,数组元素索引,数组本身

注意在空数组上,不带第二个參数(初始值)会报类型错误

reduceRight的工作原理与reduce的原理相似,不同的是。reduce是从索引低到高处理数组,reduceRight刚好相反,从高到低处理。

6.indexOf()跟lastIndexOf()
搜索整个数组中具有给定值的元素。
indexof 其第一次出现的索引值
lastIndexOf 最后一次出现的索引值
找不到则返回-1
举个栗子

var ary = [1,3,1,3,1];
var b = ary.indexOf(1);//0
var b = ary.lastIndexOf(3);//3
var b = ary.indexOf(10);//-1

值得注意的是。这种方法不接受 函数作为參数。第二个參数也是可选的:它指定数组中的一个索引,即从哪里開始搜索。假设省略,则从头開始搜索。它也能够为负数。它代表对数组末尾的偏移量。