recursal/MDN huggingface dataset:
Object.prototype.propertyIsEnumerable()
=======================================

Сводка
------

Метод **`propertyIsEnumerable()`** возвращает логическое значение, указывающее, является ли указанное свойство перечисляемым.

Синтаксис
---------
```

obj.propertyIsEnumerable(prop)
```

### Параметры

`prop`

Имя проверяемого свойства.

Описание
--------

Каждый объект имеет метод `propertyIsEnumerable`. Этот метод может определять, является ли указанное свойство в объекте перечисляемым в цикле `for...in`, за исключением свойств, унаследованных из цепочки прототипов. Если объект не имеет указанного свойства, метод вернёт `false`.

Примеры
-------

### Пример: базовое использование `propertyIsEnumerable`

Следующий пример показывает использование метода `propertyIsEnumerable` на объектах и массивах:


```js
var o = {};
var a = [];
o.prop = "перечисляемое";
a[0] = "перечисляемое";

o.propertyIsEnumerable("prop"); // вернёт true
a.propertyIsEnumerable(0); // вернёт true
```

### Пример: определённые пользователем и встроенные объекты

Следующий пример демонстрирует перечисляемость свойств, определённых пользователем и встроенных свойств:


```js
var a = ["перечисляемое"];

a.propertyIsEnumerable(0); // вернёт true
a.propertyIsEnumerable("length"); // вернёт false

Math.propertyIsEnumerable("random"); // вернёт false
this.propertyIsEnumerable("Math"); // вернёт false
```

### Пример: собственные и унаследованные свойства


```js
var a = [];
a.propertyIsEnumerable("constructor"); // вернёт false

function firstConstructor() {
  this.property = "не перечисляемое";
}

firstConstructor.prototype.firstMethod = function () {};

function secondConstructor() {
  this.method = function method() {
    return "перечисляемый";
  };
}

secondConstructor.prototype = new firstConstructor();
secondConstructor.prototype.constructor = secondConstructor;

var o = new secondConstructor();
o.arbitraryProperty = "перечисляемое";

o.propertyIsEnumerable("arbitraryProperty"); // вернёт true
o.propertyIsEnumerable("method"); // вернёт true
o.propertyIsEnumerable("property"); // вернёт false

o.property = "перечисляемое";

o.propertyIsEnumerable("property"); // вернёт true

// Эти вызовы вернут false, поскольку все свойства находятся в прототипе,
// который метод propertyIsEnumerable не просматривает (даже несмотря на то,
// что последние два свойства перечисляются через цикл for...in)
o.propertyIsEnumerable("prototype"); // вернёт false (в JS 1.8.1/FF3.6)
o.propertyIsEnumerable("constructor"); // вернёт false
o.propertyIsEnumerable("firstMethod"); // вернёт false
```

Спецификации
------------

| Specification |
| --- |
| ECMAScript Language Specification # sec-object.prototype.propertyisenumerable |

Совместимость с браузерами
--------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Смотрите также
--------------

* Перечисляемость и собственность свойств (en-US)
* `for...in`
* `Object.keys()`
* `Object.defineProperty()`
Object.values()
===============

Метод **`Object.values()`** возвращает массив значений перечисляемых свойств объекта в том же порядке что и цикл `for...in`. Разница между циклом и методом в том, что цикл перечисляет свойства и из цепочки прототипов.

Интерактивный пример
--------------------

Синтаксис
---------
```

Object.values(obj)
```

### Параметры

`obj`

Объект, чьи значения перечисляемых свойств будут возвращены.

### Возвращаемое значение

Массив содержащий значения перечисляемых свойств объекта.

Описание
--------

`Object.values()` возвращает массив, чьи элементы это значения перечисляемых свойств найденных в объекте. Порядок такой же как если пройтись по объекту циклом вручную.

Примеры
-------


```js
var obj = { foo: "bar", baz: 42 };
console.log(Object.values(obj)); // ['bar', 42]

// Массив как объект
var obj = { 0: "a", 1: "b", 2: "c" };
console.log(Object.values(obj)); // ['a', 'b', 'c']

// Массив как объект со случайным порядком ключей
// Когда мы используем нумерованные ключ, значения возвращаются в порядке возрастания
var an_obj = { 100: "a", 2: "b", 7: "c" };
console.log(Object.values(an_obj)); // ['b', 'c', 'a']

// getFoo неперечисляемое свойство
var my_obj = Object.create(
  {},
  {
    getFoo: {
      value: function () {
        return this.foo;
      },
    },
  },
);
my_obj.foo = "bar";
console.log(Object.values(my_obj)); // ['bar']

// Аргумент, не являющийся объектом, будет приведён к объекту
console.log(Object.values("foo")); // ['f', 'o', 'o']
```

Полифил
-------

Для добавления совместимости `Object.values` со старым окружением, которое не поддерживает нативно его, вы можете найти полифил здесь tc39/proposal-object-values-entries или в es-shims/Object.values репозитории.

Спецификации
------------

| Specification |
| --- |
| ECMAScript Language Specification # sec-object.values |

Совместимость с браузерами
--------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Смотрите также
--------------

* Перечисляемость и принадлежность свойств
* `Object.keys()`
* `Object.entries()` 
Экспериментальная возможность
* `Object.prototype.propertyIsEnumerable()`
* `Object.create()`
* `Object.getOwnPropertyNames()`
Object.prototype.\_\_defineGetter\_\_()
=======================================

**Не стандартно:** Эта возможность не является стандартной и стандартизировать её пока никто не собирается. Не используйте её на сайтах, смотрящих во внешний мир: она будет работать не у всех пользователей. Также могут присутствовать большие несовместимости между реализациями и её поведение может в будущем измениться.

 **Устарело:** Эта возможность была удалена из веб-стандартов. Хотя некоторые браузеры по-прежнему могут поддерживать её, она находится в процессе удаления. Не используйте её ни в старых, ни в новых проектах. Страницы или веб-приложения, использующие её, могут в любой момент сломаться.

Сводка
------

Метод **`__defineGetter__()`** привязывает свойство объекта к функции, вызываемой каждый раз при поиске этого свойства.

Синтаксис
---------
```

obj.__defineGetter__(prop, func)
```

### Параметры

`prop`

Строка, содержащая имя свойства, привязываемого к заданной функции.

`func`

Функция, привязываемая к поиску указанного свойства.

Описание
--------

Метод `__defineGetter__()` позволяет определить геттер (en-US) на уже существующем объекте.

Примеры
-------


```js
// Нестандартный и устаревший способ

const o = {};
o.\_\_defineGetter\_\_("gimmeFive", function () {
  return 5;
});
console.log(o.gimmeFive); // 5

// Способы, совместимые со стандартом

// Использование оператора get
const o = {
  get gimmeFive() {
    return 5;
  },
};
console.log(o.gimmeFive); // 5

// Использование Object.defineProperty()
const o = {};
Object.defineProperty(o, "gimmeFive", {
  get: function () {
    return 5;
  },
});
console.log(o.gimmeFive); // 5
```

Спецификации
------------

Не является частью какой-либо спецификации.

Совместимость с браузерами
--------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Смотрите также
--------------

* `Object.prototype.__defineSetter__()`
* оператор `get` (en-US)
* `Object.defineProperty()`
* `Object.prototype.__lookupGetter__()`
* `Object.prototype.__lookupSetter__()`
* Руководство по JS: определение геттеров и сеттеров
* [Запись в блоге] Устаревание \_\_defineGetter\_\_ и \_\_defineSetter\_\_ (англ.)
* Firefox bug 647423
Object.prototype.toLocaleString()
=================================

Сводка
------

Метод **`toLocaleString()`** возвращает строку, представляющую объект. Этот метод предназначен для переопределения унаследованными объектами в целях поддержки зависимости от локали.

Синтаксис
---------
```

obj.toLocaleString();
```

Описание
--------

Метод `toLocaleString` объекта `Object` возвращает результат вызова метода `toString()`.

Эта функция обеспечивает объектам обобщённый метод `toLocaleString`, хотя и не все объекты могут её использовать. Смотрите ниже список таких объектов.

### Объекты, переопределяющие `toLocaleString`

* `Array`: `Array.prototype.toLocaleString()`
* `Number`: `Number.prototype.toLocaleString()`
* `Date`: `Date.prototype.toLocaleString()`
Спецификации
------------

| Specification |
| --- |
| ECMAScript Language Specification # sec-object.prototype.tolocalestring |

Совместимость с браузерами
--------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Смотрите также
--------------

* `Object.prototype.toString()`
Object.isExtensible()
=====================

Сводка
------

Метод **`Object.isExtensible()`** определяет, является ли объект расширяемым (то есть, можно ли к нему добавлять новые свойства).

Синтаксис
---------
```

Object.isExtensible(obj)
```

### Параметры

`obj`

Проверяемый объект.

Описание
--------

Объекты являются расширяемыми по умолчанию: к ним можно добавлять новые свойства и (в движках, поддерживающих свойство `Object.prototype.__proto__`) их можно изменять. Объект может быть помечен, как не изменяемый с помощью методов `Object.preventExtensions()`, `Object.seal()` или `Object.freeze()`.

Примеры
-------


```js
// Новые объекты являются расширяемыми.
var empty = {};
assert(Object.isExtensible(empty) === true);

// ...но это может быть изменено.
Object.preventExtensions(empty);
assert(Object.isExtensible(empty) === false);

// Запечатанные объекты по определению не расширяемы.
var sealed = Object.seal({});
assert(Object.isExtensible(sealed) === false);

// Замороженные объекты также по определению не расширяемы.
var frozen = Object.freeze({});
assert(Object.isExtensible(frozen) === false);
```

Примечания
----------

В ES5, если аргумент метода не является объектом (является примитивным значением), будет выброшено исключение `TypeError`. В ES6 такой аргумент будет рассматриваться, как простой не расширяемый объект и метод просто вернёт `false`.


```js
> Object.isExtensible(1)
TypeError: 1 is not an object // код ES5

> Object.isExtensible(1)
false                         // код ES6
```

Спецификации
------------

| Specification |
| --- |
| ECMAScript Language Specification # sec-object.isextensible |

Совместимость с браузерами
--------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Смотрите также
--------------

* `Object.preventExtensions()`
* `Object.seal()`
* `Object.isSealed()`
* `Object.freeze()`
* `Object.isFrozen()`
Object.prototype.valueOf()
==========================

Сводка
------

Метод **`valueOf()`** возвращает примитивное значение указанного объекта.

Синтаксис
---------
```

object.valueOf()
```

Описание
--------

JavaScript вызывает метод `valueOf` для преобразования объекта в примитивное значение. Вам редко потребуется вызывать метод `valueOf` самостоятельно; JavaScript автоматически вызывает его при обнаружении объекта, когда ожидается примитивное значение.

По умолчанию, метод `valueOf` наследуется каждым объектом, произошедшим от `Object`. Каждый встроенный объект ядра переопределяет этот метод, возвращая подходящее значение. Если объект не имеет примитивного значения, `valueOf` возвращает сам объект, который отображается как:


```js
[object Object]
```


Вы можете использовать `valueOf` в своём коде для преобразования встроенных объектов в примитивное значение. Когда вы создаёте пользовательский объект, вы можете переопределить метод `Object.prototype.valueOf()`, чтобы вызывать собственный метод вместо метода по умолчанию из `Object`.

### Переопределение `valueOf` в пользовательских объектах

Вы можете создать функцию, вызываемую вместо метода `valueOf` по умолчанию. Ваша функция не должна принимать аргументов.

Предположим, у вас есть объект типа `myNumberType` и вы хотите создать для него метод `valueOf`. Следующий код присваивает определённую пользователем функцию методу `valueOf` объекта:


```js
myNumberType.prototype.valueOf = function () {
  return customPrimitiveValue;
};
```


Начиная с этого места в вашем коде, в любое время, когда объект типа `myNumberType` будет использоваться в контексте, где он должен быть представлен примитивным значением, JavaScript будет автоматически вызывать функцию, определённую в этом коде.

Метод объекта `valueOf` обычно вызывается движком JavaScript, но вы можете вызвать его и самостоятельно, как показано ниже:


```js
myNumber.valueOf();
```


**Примечание:** объекты в строковом контексте преобразуются с помощью метода `toString()`, что отличается от объектов `String`, преобразующихся в строковые примитивы методом `valueOf`. Все объекты имеют преобразование в строку вида "`[object type]`". Но многие объекты не преобразуются в число, логическое значение или функцию.

Примеры
-------

### Пример: использование `valueOf`


```js
var o = new Object();
myVar = o.valueOf(); // [object Object]
```

Спецификации
------------

| Specification |
| --- |
| ECMAScript Language Specification # sec-object.prototype.valueof |

Совместимость с браузерами
--------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Смотрите также
--------------

* `Object.prototype.toString()`
* `parseInt()`
Object.getOwnPropertyDescriptors()
==================================

Метод **`Object.getOwnPropertyDescriptors()`** возвращает все собственные дескрипторы свойств данного объекта.

Интерактивный пример
--------------------

Синтаксис
---------
```

Object.getOwnPropertyDescriptors(obj)
```

### Параметры

`obj`

Объект, для которого нужно получить все собственные дескрипторы свойств.

### Возвращаемое значение

Объект, содержащий все собственные дескрипторы свойств объекта. Может быть пустой объект, если нет свойств.

Описание
--------

Этот метод позволяет изучить точное описание всех собственных свойств объекта. Свойство в JavaScript состоит из строкового имени или `Symbol` и свойства дескриптора. Дополнительную информацию о типах свойств дескрипторов и их атрибутах можно найти в `Object.defineProperty()`.

Свойство дескриптора это запись с некоторыми из следующих атрибутов:

`value`

Значение, связанное со свойством (только дескрипторы данных).

**`writable`**

`true` тогда и только тогда когда значение, связанное со свойством, может быть изменено (только дескрипторы данных).

`get`

Функция, которая служит в качестве получателя для свойства, или `undefined` если нет получателя (только дескрипторы доступа).

`set`

Функция, которая служит установщиком для свойства, или `undefined` если установщика нет (только дескрипторы доступа).

`configurable`

`true` тогда и только тогда, когда тип этого свойства дескриптора может быть изменён, и если свойство может быть удалено из соответствующего объекта.

`enumerable`

`true` тогда и только тогда, когда это свойство отображается при перечислении свойств соответствующего объекта.

Примеры
-------

### Создание поверхностного клона

В то время как метод `Object.assign()` будет только копировать перечисляемые и собственные свойства из исходного объекта в целевой объект, вы можете использовать этот метод и `Object.create()` для поверхностного копирования между двумя неизвестными объектами:


```js
Object.create(
  Object.getPrototypeOf(obj),
  Object.getOwnPropertyDescriptors(obj),
);
```

### Создание подкласса

Типичный способ создания подкласса это определить подкласс, определить свойства этого экземпляра. Это может быть неудобно особенно для получателей и установщиков. Вместо этого, вы можете использовать этот код для установки прототипа:


```js
function superclass() {}
superclass.prototype = {
  // Определите ваши методы и свойства здесь
};
function subclass() {}
subclass.prototype = Object.create(superclass.prototype, {
  // Определите ваши методы и свойства здесь
});
```

Спецификации
------------

| Specification |
| --- |
| ECMAScript Language Specification # sec-object.getownpropertydescriptors |

Совместимость с браузерами
--------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Смотрите также
--------------

* `Object.getOwnPropertyDescriptor()`
* `Object.defineProperty()`
* Polyfill
Object.prototype.constructor
============================

Сводка
------

Возвращает ссылку на функцию `Object`, создавшую прототип экземпляра. Обратите внимание, что значение этого свойства является ссылкой на саму функцию, а не строкой, содержащей имя функции. Для примитивных значений, вроде `1`, `true` или `"test"`, значение доступно только для чтения.

Описание
--------

Все объекты наследуют свойство `constructor` из своего прототипа:


```js
var o = {};
o.constructor === Object; // true

var a = [];
a.constructor === Array; // true

var n = new Number(3);
n.constructor === Number; // true
```

Примеры
-------

### Пример: отображение конструктора объекта

В следующем примере создаётся прототип `Tree` и объект этого типа `theTree`. Затем в примере отображается свойство `constructor` объекта `theTree`.


```js
function Tree(name) {
  this.name = name;
}

var theTree = new Tree("Красное дерево");
console.log("theTree.constructor равен " + theTree.constructor);
```


Вывод примера будет следующим:


```js
theTree.constructor равен function Tree(name) {
  this.name = name;
}
```

### Пример: изменение конструктора объекта

Следующий пример показывает, как изменить конструктор значений общих объектов. Не затрагиваются только значения `true`, `1` и `"тест"`, поскольку они имеют родные конструкторы только для чтения. Этот пример показывает, что полагаться на свойство `constructor` объекта не всегда безопасно.


```js
function Type() {}

var types = [
  new Array(),
  [],
  new Boolean(),
  true, // останется неизменным
  new Date(),
  new Error(),
  new Function(),
  function () {},
  Math,
  new Number(),
  1, // останется неизменным
  new Object(),
  {},
  new RegExp(),
  /(?:)/,
  new String(),
  "тест", // останется неизменным
];

for (var i = 0; i < types.length; i++) {
  types[i].constructor = Type;
  types[i] = [
    types[i].constructor,
    types[i] instanceof Type,
    types[i].toString(),
  ];
}

console.log(types.join("\n"));
```


Вывод примера будет следующим:


```js
function Type() {},false,
function Type() {},false,
function Type() {},false,false
function Boolean() {
    [native code]
},false,true
function Type() {},false,Mon Sep 01 2014 16:03:49 GMT+0600
function Type() {},false,Error
function Type() {},false,function anonymous() {

}
function Type() {},false,function () {}
function Type() {},false,[object Math]
function Type() {},false,0
function Number() {
    [native code]
},false,1
function Type() {},false,[object Object]
function Type() {},false,[object Object]
function Type() {},false,/(?:)/
function Type() {},false,/(?:)/
function Type() {},false,
function String() {
    [native code]
},false,тест
```

Спецификации
------------

| Specification |
| --- |
| ECMAScript Language Specification # sec-object.prototype.constructor |

Совместимость с браузерами
--------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.
Object.prototype.\_\_lookupGetter\_\_()
=======================================

**Не стандартно:** Эта возможность не является стандартной и стандартизировать её пока никто не собирается. Не используйте её на сайтах, смотрящих во внешний мир: она будет работать не у всех пользователей. Также могут присутствовать большие несовместимости между реализациями и её поведение может в будущем измениться.

 **Устарело:** Эта возможность была удалена из веб-стандартов. Хотя некоторые браузеры по-прежнему могут поддерживать её, она находится в процессе удаления. Не используйте её ни в старых, ни в новых проектах. Страницы или веб-приложения, использующие её, могут в любой момент сломаться.

Сводка
------

Метод **`__lookupGetter__()`** возвращает функцию, привязанную к геттеру указанного свойства.

Синтаксис
---------
```

obj.__lookupGetter__(sprop)
```

### Параметры

`sprop`

Строка, содержащая имя свойства, чей геттер должен быть возвращён.

Описание
--------

Если для свойства объекта был определён геттер, то на него невозможно сослаться через это свойство, поскольку оно ссылается на возвращаемое значение геттера. Метод `__lookupGetter__()` может использоваться для получения ссылки на геттер.

Сегодня это возможно сделать стандартным способом через `Object.getOwnPropertyDescriptor()` и `Object.getPrototypeOf()`.

Примеры
-------


```js
var obj = {
  get foo() {
    return Math.random() > 0.5 ? "foo" : "bar";
  },
};

// Нестандартный и устаревший способ
obj.\_\_lookupGetter\_\_("foo");
// (function() { return Math.random() > 0.5 ? 'foo' : 'bar'; })

// Способ, совместимый со стандартом
Object.getOwnPropertyDescriptor(obj, "foo").get;
// (function() { return Math.random() > 0.5 ? 'foo' : 'bar'; })
```

Спецификации
------------

Не является частью какой-либо спецификации.

Совместимость с браузерами
--------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Смотрите также
--------------

* `Object.prototype.__lookupSetter__()`
* оператор `get` (en-US)
* `Object.getOwnPropertyDescriptor()` и `Object.getPrototypeOf()`
* `Object.prototype.__defineGetter__()`
* `Object.prototype.__defineSetter__()`
* Руководство по JS: определение геттеров и сеттеров
Object.fromEntries()
====================

Метод **`Object.fromEntries()`** преобразует список пар ключ-значение в объект.

Интерактивный пример
--------------------

Синтаксис
---------
```

Object.fromEntries(iterable);
```

### Параметры

`iterable`

Итерируемый объект, такой как `Array` или `Map` (en-US) или другие объекты, реализующие iterable протокол.

### Возвращаемое значение

Новый объект, свойства которого задаются записями iterable.

Описание
--------

Метод `Object.fromEntries()` принимает список пар ключ-значение и возвращает новый объект, свойства которого задаются этими записями. Ожидается, что аргумент *iterable* будет объектом, который реализует метод `@@iterator`, который возвращает объект итератора, который создаёт двухэлементный массивоподобный объект, первый элемент которого является значением, которое будет использоваться в качестве ключа свойства, а второй элемент — значением связанного с этим ключом свойства.

`Object.fromEntries()` выполняет процедуру, обратную `Object.entries()`.

Примеры
-------

### Преобразование `Map` в `Object`

С `Object.fromEntries` вы можете преобразовать `Map` (en-US) в `Object`:


```js
const map = new Map([
  ["foo", "bar"],
  ["baz", 42],
]);
const obj = Object.fromEntries(map);
console.log(obj); // { foo: "bar", baz: 42 }
```

### Преобразование `Array` в `Object`

С `Object.fromEntries` вы можете преобразовать `Array` в `Object`:


```js
const arr = [
  ["0", "a"],
  ["1", "b"],
  ["2", "c"],
];
const obj = Object.fromEntries(arr);
console.log(obj); // { 0: "a", 1: "b", 2: "c" }
```

### Трансформации объектов

С `Object.fromEntries`, обратным ему методом `Object.entries()` и методами манипулирования массивами вы можете преобразовывать объекты следующим образом:


```js
const object1 = { a: 1, b: 2, c: 3 };

const object2 = Object.fromEntries(
  Object.entries(object1).map(([key, val]) => [key, val \* 2]),
);

console.log(object2);
// { a: 2, b: 4, c: 6 }
```

Спецификации
------------

| Specification |
| --- |
| ECMAScript Language Specification # sec-object.fromentries |

Совместимость с браузерами
--------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Смотрите также
--------------

* `Object.entries()`
* `Object.keys()`
* `Object.values()`
* `Map.prototype.entries()` (en-US)
* `Map.prototype.keys()` (en-US)
* `Map.prototype.values()` (en-US)