recursal/MDN huggingface dataset:
RegExp.lastMatch ($&)
=====================

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

Нестандартное свойство **lastMatch** является доступным только для чтения статическим свойством регулярных выражений. Оно содержит последние совпавшие символы. Значение свойства также можно получить как `RegExp.$&`.

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

RegExp.lastMatch
RegExp['$&']
```

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

Поскольку свойство `lastMatch` статическое, к нему можно обратиться только как `RegExp.lastMatch` или `RegExp['$&'].`

Значение свойства `lastMatch` доступно только для чтение и изменяется при успешном совпадении с регулярным выражением.

Поскольку использование символа "&" приведёт к выбрасыванию ошибки `SyntaxError`, обратиться к данному свойству с помощью точечной нотации(`RegExp.$&`) нельзя. Вместо этого стоит использовать скобочную нотацию (`RegExp['$&']`).

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

### Использование `lastMatch` и `$&`


```js
var re = /hi/g;
re.test("hi there!");
RegExp.lastMatch; // "hi"
RegExp["$&"]; // "hi"
```

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

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

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

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

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

* Non-standard
 `RegExp.input ($_)`
* Non-standard
 `RegExp.lastParen ($+)` (en-US)
* Non-standard
 `RegExp.leftContext ($`)` (en-US)
* Non-standard
 `RegExp.rightContext ($')` (en-US)
* Non-standard
 `RegExp.$1-$9`
RegExp.prototype.test()
=======================

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

Метод **`test()`** выполняет поиск сопоставления регулярного выражения указанной строке. Возвращает `true` или `false`.

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

regexObj.test(str)
```

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

`str`

Строка, с которой сопоставляется регулярное выражение.

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

Логическое значение: `true` или `false`.

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

Используйте метод `test()`, если вы просто хотите узнать, находится ли шаблон в строке (он почти аналогичен методу `String.prototype.search()`, только вместо индекса шаблона возвращает `true` или `false`); для получения дополнительной информации о сопоставлении (но за счёт более медленного выполнения) используйте метод `exec()` (он аналогичен методу `String.prototype.match()`). Как и при вызове метода `exec()` (или при совместном с ним вызове), метод `test()`, вызванный несколько раз на одном и том же экземпляре глобального регулярного выражения, будет начинать проверку с конца предыдущего сопоставления.

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

### Пример: использование метода `test()`

Следующий пример печатает сообщение, в зависимости от того, была ли проверка успешной:


```js
function testinput(re, str) {
  var midstring;
  if (re.test(str)) {
    midstring = " содержит ";
  } else {
    midstring = " не содержит ";
  }
  console.log(str + midstring + re.source);
}
```

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

| Specification |
| --- |
| ECMAScript Language Specification # sec-regexp.prototype.test |

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

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

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

* Глава про регулярные выражения в руководстве по JavaScript
* `RegExp`
Object.isSealed()
=================

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

Метод **`Object.isSealed()`** определяет, является ли объект запечатанным.

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

Object.isSealed(obj)
```

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

`obj`

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

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

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

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


```js
// По умолчанию объекты не запечатаны.
var empty = {};
assert(Object.isSealed(empty) === false);

// Если вы сделаете пустой объект не расширяемым, он по определению станет запечатанным.
Object.preventExtensions(empty);
assert(Object.isSealed(empty) === true);

// То же самое не верно для не пустого объекта, пока все его свойства не станут не настраиваемыми.
var hasProp = { fee: "fie foe fum" };
Object.preventExtensions(hasProp);
assert(Object.isSealed(hasProp) === false);

// Но сделав все его свойства не настраиваемыми, объект становится запечатанным.
Object.defineProperty(hasProp, "fee", { configurable: false });
assert(Object.isSealed(hasProp) === true);

// Простейшим способом запечатать объект, конечно, является использование метода Object.seal.
var sealed = {};
Object.seal(sealed);
assert(Object.isSealed(sealed) === true);

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

// Запечатанный объект может быть замороженным, но это не всегда так.
assert(Object.isFrozen(sealed) === true); // все свойства также являются не записываемыми

var s2 = Object.seal({ p: 3 });
assert(Object.isFrozen(s2) === false); // свойство 'p' всё ещё записываемое

var s3 = Object.seal({
  get p() {
    return 0;
  },
});
assert(Object.isFrozen(s3) === true); // для свойств доступа значение имеет только их настраиваемость
```

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

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


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

> Object.isSealed(1)
true                          // код ES6
```

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

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

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

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

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

* `Object.seal()`
* `Object.preventExtensions()`
* `Object.isExtensible()`
* `Object.freeze()`
* `Object.isFrozen()`
Object.prototype.\_\_defineSetter\_\_()
=======================================

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

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

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

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

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

obj.__defineSetter__(prop, fun)
```

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

`prop`

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

`fun`

Функция, вызываемая при попытке установить значение указанному свойству. Эта функция имеет вид:
```

function(val) { . . . }
```


`val`

Псевдоним переменной, содержащей значение, которое пытаются присвоить свойству `prop`.


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

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

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


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

const o = {};
o.\_\_defineSetter\_\_("value", function (val) {
  this.anotherValue = val;
});
o.value = 5;
console.log(o.value); // undefined
console.log(o.anotherValue); // 5

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

// Использование оператора set
const o = {
  set value(val) {
    this.anotherValue = val;
  },
};
o.value = 5;
console.log(o.value); // undefined
console.log(o.anotherValue); // 5

// Использование метода Object.defineProperty()
const o = {};
Object.defineProperty(o, "value", {
  set: function (val) {
    this.anotherValue = val;
  },
});
o.value = 5;
console.log(o.value); // undefined
console.log(o.anotherValue); // 5
```

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

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

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

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

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

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

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

Метод **`Object.is()`** определяет, являются ли два значения одинаковыми значениями (en-US).

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

var isSame = Object.is(value1, value2);
```

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

`value1`

Первое сравниваемое значение.

`value2`

Второе сравниваемое значение.

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

Метод `Object.is()` определяет, являются ли два значения одинаковыми значениями (en-US). Два значения являются одинаковыми в следующих случаях:

* оба равны `undefined`
* оба равны `null`
* оба равны `true`, либо оба равны `false`
* оба являются строками с одинаковой длиной и одинаковыми символами
* оба являются одним и тем же объектом
* оба являются числами и
    + оба равны `+0`
    + оба равны `-0`
    + оба равны `NaN`
    + либо оба не равны нулю или `NaN` и оба имеют одинаковое значение

Поведение этого метода *не* аналогично оператору `==` (en-US). Оператор `==` (en-US) использует приведение типов обоих операндов (если они имеют различный тип) перед проверкой на равенство (в результате получается, что проверка `"" == false` даёт `true`), а метод `Object.is` приведение типов не выполняет.

Поведение этого метода *не* аналогично оператору `===` (en-US). Оператор `===` (en-US) (также как и оператор `==` (en-US)) считает числовые значения `-0` и `+0` равными, а значение `Number.NaN` не равным самому себе.

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


```js
Object.is("foo", "foo"); // true
Object.is(window, window); // true

Object.is("foo", "bar"); // false
Object.is([], []); // false

var test = { a: 1 };
Object.is(test, test); // true

Object.is(null, null); // true

// Специальные случаи
Object.is(0, -0); // false
Object.is(-0, -0); // true
Object.is(NaN, 0 / 0); // true
```

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

Метод `Object.is` предложен в дополнение к стандарту ECMA-262; поэтому он может быть недоступен в некоторых браузерах. Это можно обойти, вставив приведённый ниже фрагмент кода в начало ваших скриптов. Он позволит вам использовать метод `Object.is` в случаях, когда он не имеет родной поддержки браузером.
```

if (!Object.is) {
  Object.is = function(x, y) {
    // SameValue algorithm
    if (x === y) { // Steps 1-5, 7-10
      // Steps 6.b-6.e: +0 != -0
      return x !== 0 || 1 / x === 1 / y;
    } else {
      // Step 6.a: NaN == NaN
      return x !== x && y !== y;
    }
  };
}
```

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

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

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

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

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

* Руководство по JavaScript: одинаковость (en-US) — сравнение всех трёх встроенных способов проверки на одинаковость
Object.prototype.isPrototypeOf()
================================

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

Метод **`isPrototypeOf()`** проверяет, входит ли объект в цепочку прототипов другого объекта.

**Примечание:** метод `isPrototypeOf()` отличается от оператора `instanceof`. Выражение "`object instanceof AFunction`" проверяет, присутствует ли в цепочке прототипов объекта `object` объект `AFunction.prototype`, а не сам объект `AFunction`.

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

prototypeObj.isPrototypeOf(object)
```

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

`prototypeObj`

Объект, проверяемый на каждую ссылку в цепочке прототипов аргумента **object**.

`object`

Объект, в чьей цепочке прототипов производится поиск.

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

Метод `isPrototypeOf()` позволяет вам проверять, существует ли объект в цепочке прототипов другого объекта.

Например, рассмотрим следующую цепочку прототипов:


```js
function Fee() {
  // ...
}

function Fi() {
  // ...
}
Fi.prototype = new Fee();

function Fo() {
  // ...
}
Fo.prototype = new Fi();

function Fum() {
  // ...
}
Fum.prototype = new Fo();
```


Если позже вы создадите экземпляр объекта `Fum` и захотите проверить, что прототип `Fi` существует в цепочке прототипов `Fum`, вы можете сделать следующее:


```js
var fum = new Fum();
// ...

if (Fi.prototype.isPrototypeOf(fum)) {
  // здесь безопасно что-то делать
}
```


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

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

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

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

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

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

* `instanceof`
* `Object.getPrototypeOf()`
* `Object.setPrototypeOf()`
* `Object.prototype.__proto__`
Object.getOwnPropertyDescriptor()
=================================

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

Метод **`Object.getOwnPropertyDescriptor()`** возвращает дескриптор свойства для *собственного свойства* (то есть такого, которое находится непосредственно в объекте, а не получено через цепочку прототипов) переданного объекта.

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

Object.getOwnPropertyDescriptor(obj, prop)
```

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

`obj`

Объект, в котором ищется свойство.

`prop`

Имя свойства, чьё описание будет возвращено.

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

Дескриптор переданного свойства, если оно присутствует в объекте, либо `undefined`, если его там нет.

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

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

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

`value`

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

`writable`

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

`get`

Функция, возвращающая значение свойства, либо `undefined`, если такая функция отсутствует (только в дескрипторе доступа).

`set`

Функция, изменяющая значение свойства, либо `undefined`, если такая функция отсутствует (только в дескрипторе доступа).

`configurable`

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

`enumerable`

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

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


```js
var o, d;

o = {
  get foo() {
    return 17;
  },
};
d = Object.getOwnPropertyDescriptor(o, "foo");
// d равен { configurable: true, enumerable: true, get: /\*функция геттера\*/, set: undefined }

o = { bar: 42 };
d = Object.getOwnPropertyDescriptor(o, "bar");
// d равен { configurable: true, enumerable: true, value: 42, writable: true }

o = {};
Object.defineProperty(o, "baz", {
  value: 8675309,
  writable: false,
  enumerable: false,
});
d = Object.getOwnPropertyDescriptor(o, "baz");
// d равен { value: 8675309, writable: false, enumerable: false, configurable: false }
```

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

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


```js
> Object.getOwnPropertyDescriptor('foo', 0)
TypeError: "foo" is not an object  // код ES5

> Object.getOwnPropertyDescriptor('foo', 0)
{ configurable: false, enumerable: true, value: 'f', writable: false }  // код ES6
```

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

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

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

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

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

* `Object.defineProperty()`
Object.getOwnPropertySymbols()
==============================

Метод **`Object.getOwnPropertySymbols()`** возвращает массив всех символьных свойств, найденных непосредственно на переданном объекте.

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

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


```js
Object.getOwnPropertySymbols(obj);
```

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

`obj`

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

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

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

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

Подобно методу `Object.getOwnPropertyNames()`, вы можете получить все символьные свойства указанного объекта в качестве массива символов. Обратите внимание, что метод `Object.getOwnPropertyNames()` сам не возвращает символьные свойства объекта, он возвращает только строковые свойства.

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

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


```js
var obj = {};
var a = Symbol("a");
var b = Symbol.for("b");

obj[a] = "localSymbol";
obj[b] = "globalSymbol";

var objectSymbols = Object.getOwnPropertySymbols(obj);

console.log(objectSymbols.length); // 2
console.log(objectSymbols); // [Symbol(a), Symbol(b)]
console.log(objectSymbols[0]); // Symbol(a)
```

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

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

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

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

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

* `Object.getOwnPropertyNames()`
* `Symbol`
Object.prototype.\_\_lookupSetter\_\_()
=======================================

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

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

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

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

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

obj.__lookupSetter__(sprop)
```

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

`sprop`

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

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

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

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

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


```js
var obj = {
  set foo(value) {
    return (this.bar = value);
  },
};

// Нестандартный и устаревший способ
obj.\_\_lookupSetter\_\_("foo");
// (function(value) { this.bar = value; })

// Способ, совместимый со стандартом
Object.getOwnPropertyDescriptor(obj, "foo").set;
// (function(value) { this.bar = value; })
```

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

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

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

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

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

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

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

Метод **`Object.getPrototypeOf()`** возвращает прототип (то есть, внутреннее свойство `[[Prototype]]`) указанного объекта.

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

Object.getPrototypeOf(obj)
```

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

`obj`

Объект, чей прототип будет возвращён.

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


```js
var proto = {};
var obj = Object.create(proto);
Object.getPrototypeOf(obj) === proto; // true
```



```js
> Object.getPrototypeOf('foo')
TypeError: "foo" is not an object  // код ES5
> Object.getPrototypeOf('foo')
String.prototype                   // код ES6
```

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

В ES5, если параметр `obj` не является объектом, будет выброшено исключение `TypeError`. В ES6, параметр будет приведён к объекту `Object`.


```js
> Object.getPrototypeOf('foo')
TypeError: "foo" is not an object  // код ES5
> Object.getPrototypeOf('foo')
String.prototype                   // код ES6
```

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

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

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

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

### Примечания по Opera

Хотя старые версии Opera и не поддерживают метод `Object.getPrototypeOf()`, Opera поддерживает нестандартное свойство `Object.prototype.__proto__`, начиная с версии Opera 10.50.

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

* `Object.prototype.isPrototypeOf()`
* `Object.setPrototypeOf()` 
Экспериментальная возможность
* `Object.prototype.__proto__`
* Запись в блоге Джона Резига о getPrototypeOf()