ES5 特性概览
一、Object
新增的方法有:
- Object.create(prototype,descriptors) 以指定的原型创建对象,并且可以(可选)的设置对象的属性
- Object.defineProperty(object, propertyname, descriptor) 对指定的对象的一个属性设置丰富的值控制
- Object.defineProperties(object, descriptors) 对指定的对象的一组属性提供丰富的值控制
- APIObject.getOwnPropertyDescriptor(object, propertyname) 返回属性的定义
- Object.getOwnPropertyNames(object) 返回所有属性的名称,哪怕说是不能枚举的属性
- Object.preventExtensions(object) 防止新的属性添加到对象
- Object.isExtensible(object) 是否可添加属性到对象
- Object.seal(object) 不能添加和删除属性
- Object.isSealed(object)
- Object.freeze(object) 防止现有属性和属性值的修改,并防止新特性的添加。
- Object.isFrozen(object) 最后如果想要得到对象原型,可以用
- Object.getPrototypeOf(object)
还需要重视的是,get/set属性读取访问器。定义属性时使用get/set,可以在属性被读写时做一些处理:
var person = { _age: 18, get age(){ return this._age; }, set age(val){ if(val<0 || val>100){ console.log('设置年龄无效!'); } else { this._age = val; } } } person.age; //18 person.age = 300; //设置年龄无效! person.age = 30; person.age; //30
结合Object.defineProperty,下面是VUE这种MVVM框架实现双向绑定的原理:
function Archiver() { var temperature = null; var archive = []; Object.defineProperty(this, 'temperature', { get: function() { console.log('get!'); return temperature; }, set: function(value) { temperature = value; archive.push({ val: temperature }); } }); this.getArchive = function() { return archive; }; } var arc = new Archiver(); arc.temperature; // 'get!' arc.temperature = 11; arc.temperature = 13; arc.getArchive(); // [{ val: 11 }, { val: 13 }]
代码直接摘自MDN。
二、Array
- Array.isArray(object)
- Array.prototype.IndexOf
- Array.prototype.lastIndexOf
- Array.prototype.every
- Array.prototype.some
- Array.prototype.forEach(function(item,index){})
- Array.prototype.map(function(item,index,Array){})
- Array.prototype.filter(function(item,index){})
- Array.prototype.reduce(function(previous,current,currentIndex,array))
- Array.prototype.reduceRight
三、String
- String.prototype.charAt(index) 返回index处的字符
- Strng.prototype.charCodeAt(index) 返回index处的字符的Unicode编码
- String.prototype.trim() 返回一个去掉开头和结尾的字符串拷贝
四、其他
- Date().toJSON()