一、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()