lynxerzhang / JSSkills

MIT License
0 stars 0 forks source link

输出对象键名问题记录 #17

Open lynxerzhang opened 5 years ago

lynxerzhang commented 5 years ago
var logPName = (function(){
    return function(obj, callback) {
        Object.keys(obj).forEach(function(value, key, obj){
            callback(value, key, obj);  //值,键,对象
        });
    }
})();

//example
logPName({"a":1, "b":2, "c":3}, function(key){
    console.log(key); //具体callback接受的参数少于调用的也不要紧,可以通过arguments来获取
});

//针对Object.keys的polyfill问题可参考 //@see http://tokenposts.blogspot.com/2012/04/javascript-objectkeys-browser.html

if (!Object.keys) Object.keys = function(o) {
  if (o !== Object(o))
    throw new TypeError('Object.keys called on a non-object'); //判断是否为对象,注意 !== 符号
  var k=[],p;
  for (p in o) if (Object.prototype.hasOwnProperty.call(o,p)) k.push(p); //利用Object.prototype.hasOwnProperty 来避免原生的hasOwnProperty被覆盖
  return k;
}