Object.keys()方法用来获取一个对象的所有自身可枚举属性,然而,这个语法是在支持ECMAScript5的环境中才可以使用,对于一些老旧的浏览器,没有支持这个语法,我们又该如何正确获取一个对象的自身可遍历属性呢?
源代码
对于那些只是为了获取这个功能的朋友,我们不浪费时间,直接贴出来代码实现,我们之后会对这个代码实现思路进行一步步分析,有兴趣同学可以继续看下去:
Object.keys = Object.keys || (function () {
var hasOwnProperty = Object.prototype.hasOwnProperty,
hasDontEnumBug = !({
toString: null}).propertyIsEnumerable('toString'),
dontEnums = [
'toString',
'toLocaleString',
'valueOf',
'hasOwnProperty',
'isPrototypeOf',
'propertyIsEnumerable',
'constructor'
],
dontEnumsLength = dontEnums.length;
return function (obj) {
if (typeof obj !== 'object' && typeof obj !== 'function' || obj === null) throw new TypeError('Object.keys called on non-object');
var result = [];
for (var prop in obj) {
if (hasOwnProperty.call(obj, prop)) result.push(prop);
}
if (hasDontEnumBug) {
for (var i=