esnext.array.is-template-object.js 904 B

12345678910111213141516171819202122232425262728
  1. var $ = require('../internals/export');
  2. var isArray = require('../internals/is-array');
  3. var isFrozen = Object.isFrozen;
  4. var isFrozenStringArray = function (array, allowUndefined) {
  5. if (!isFrozen || !isArray(array) || !isFrozen(array)) return false;
  6. var index = 0;
  7. var length = array.length;
  8. var element;
  9. while (index < length) {
  10. element = array[index++];
  11. if (!(typeof element === 'string' || (allowUndefined && typeof element === 'undefined'))) {
  12. return false;
  13. }
  14. } return length !== 0;
  15. };
  16. // `Array.isTemplateObject` method
  17. // https://github.com/tc39/proposal-array-is-template-object
  18. $({ target: 'Array', stat: true }, {
  19. isTemplateObject: function isTemplateObject(value) {
  20. if (!isFrozenStringArray(value, true)) return false;
  21. var raw = value.raw;
  22. if (raw.length !== value.length || !isFrozenStringArray(raw, false)) return false;
  23. return true;
  24. }
  25. });