js中属性的特性(getter/setter)
除了包含名字和值意外属性还包括一些标识它们 可写/可枚举/可配置的特性:
1 可以通过这些API给圆形对象添加方法,并将它们设置成不可枚举的,这个让它们看起来像内置的方法.
2 可以通过这些API 给对象定义不能修改或删除的属性, 借此."锁定"这个对象.
我们可以将存取器属性的getter和setter防范看成属性的特性.
也可把数据属性的值看成属性的特性.
可以认为一个属性包含一个名字 和4 个特性 --->[ {值: value},{可写性: writable},{可枚举: enumerable},{可配置性: configurable},]
存取器没有值 和 可写性.
Object.getOwnPropertyDescriptor({x:1}, "x"):
返回:
var o = {};
Object.defineProperty(o, "x", {
value: 222,
writable: true,
enumerable: false, // bu可枚举
configurable: true
});
console.log(o.x); // 222
console.log(Object.keys(o)); // []
如果把 writable: false,
则 普通修改 o.x = 1; console 以后 结果还是 222
但是属性依然是可配置的
可以通过
Object.defineProperty(o, "x", {
value: 1,
writable: false,
enumerable: false, // bu可枚举
configurable: true
});
则结果 为 1
ES5中新增的一些数组的操作方法(ES3中简单的pop() push() 就暂时不做解释了)
1 forEach() 从头至尾遍历数组,尾每个元素调用指定的函数, 参数 function(① 数组元素, ② 元素的索引, ③ 数组本身){},
2 map() 将调用的数组每个元素传递给指定的函数 big返回一个数组,它 包含该函数的返回值 array.map(function(item, index, array) { return })
3 filter() 返回的数组元素是调用的数组的一个子集,传递的函数是用来逻辑判定的 改函数返回 true或者false 调用判断函数就行前面两个方法一样, 如果返回true或能转化为true的值,那 么传递给判定函数的元素就是这个子集的成员,它将被添加到一个作为返回值的数组中;
4 every() 和some() 是数组的逻辑判定,他们对数组元素应用指定的函数进行判定, 返回true或者 false
var ary = [5, 4, 3, 2, 1];
ary.every(function (x) { return x < 10}) // =>true 所有的值都 < 10 成立 有一个错 就返回false some 就是有一个成立 就返回true
5 reduce() 和reduceRight() 使用指定的函数将数组元素进行组合,生成单个值, 这在函数式编程中是常见的操作, 也可以称为 "注入" 和 " 折叠"
var ary = [5, 4, 3, 2, 1];
var sum = ary.reduce(function(x, y) { return x +y}, 0) // 数组求和
var product = ary.reduce(function(x, y) { return x *y}, 1) // 数组求积
var max = ary.reduce(function (x, y) {return (x> y)? x:y;}) // 求最大值
reduce() 需要两个参数,第一个是执行化简操作的函数, 化简函数的任务就是用某种方法把两个值组合或者化简为一个值, 并返回化简后的值.[未完待续...]