Какой обходной путь для Object.keys для работы в IE11? - PullRequest
1 голос
/ 16 мая 2019

Я пытаюсь использовать следующую функцию, найденную в Object.keys для IE8

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(o) {
    if (typeof o != "object" && typeof o != "function" || o === null)
      throw new TypeError("Object.keys called on a non-object");

    var result = [];
    for (var name in o) {
      if (hasOwnProperty.call(o, name))
        result.push(name);
    }

    if (hasDontEnumBug) {
      for (var i = 0; i < DontEnumsLength; i++) {
        if (hasOwnProperty.call(o, DontEnums[i]))
          result.push(DontEnums[i]);
      }
    }

    return result;
  };
})();

Вот как я пытаюсь это реализовать:

var attributeCodeTextLength = Object.keys(item.versionRoomTypeAttributeList[0].attributeCode).length;
var attributeLimit = 7;
if (Object.keys(item.versionRoomTypeAttributeList[0].attributeCode).length > 2) {
  attributeLimit = 5;
  if (Object.keys(item.versionRoomTypeAttributeList[0].attributeCode).length > 3) {
    attributeLimit = 4;
  }
}

Но я продолжаю получать следующую ошибку:

TypeError: Object.keys: argument is not an Object

1 Ответ

0 голосов
/ 16 мая 2019

Вот Polyfill, который я нашел, чтобы заставить его работать.

Object.keys = function(obj) {
  var keys = [];

  for (var i in obj) {
    if (obj.hasOwnProperty(i)) {
      keys.push(i);
    }
  }

  return keys;
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...