aboutsummaryrefslogtreecommitdiff
path: root/files/ru/web/javascript/reference/global_objects/object/valueof/index.html
blob: bd1f5b1994ac68f199d66d52257189ba8ee055bc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
---
title: Object.prototype.valueOf()
slug: Web/JavaScript/Reference/Global_Objects/Object/valueOf
tags:
  - JavaScript
  - Method
  - Object
  - Prototype
translation_of: Web/JavaScript/Reference/Global_Objects/Object/valueOf
---
<div>{{JSRef("Global_Objects", "Object")}}</div>

<h2 id="Summary" name="Summary">Сводка</h2>

<p>Метод <code><strong>valueOf()</strong></code> возвращает примитивное значение указанного объекта.</p>

<h2 id="Syntax" name="Syntax">Синтаксис</h2>

<pre class="syntaxbox"><code><var>object</var>.valueOf()</code></pre>

<h2 id="Description" name="Description">Описание</h2>

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

<p>По умолчанию, метод <code>valueOf</code> наследуется каждым объектом, произошедшим от {{jsxref("Global_Objects/Object", "Object")}}. Каждый встроенный объект ядра переопределяет этот метод, возвращая подходящее значение. Если объект не имеет примитивного значения, <code>valueOf</code> возвращает сам объект, который отображается как:</p>

<pre class="brush: js">[object Object]</pre>

<p>Вы можете использовать <code>valueOf</code> в своём коде для преобразования встроенных объектов в примитивное значение. Когда вы создаёте пользовательский объект, вы можете переопределить метод <code>Object.prototype.valueOf()</code>, чтобы вызывать собственный метод вместо метода по умолчанию из {{jsxref("Global_Objects/Object", "Object")}}.</p>

<h3 id="Overriding_valueOf_for_custom_objects" name="Overriding_valueOf_for_custom_objects">Переопределение <code>valueOf</code> в пользовательских объектах</h3>

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

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

<pre class="brush: js">myNumberType.prototype.valueOf = function() { return customPrimitiveValue; };</pre>

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

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

<pre class="brush: js">myNumber.valueOf()</pre>

<div class="note">
<p><strong>Примечание:</strong> объекты в строковом контексте преобразуются с помощью метода {{jsxref("Object.toString", "toString()")}}, что отличается от объектов {{jsxref("Global_Objects/String", "String")}}, преобразующихся в строковые примитивы методом <code>valueOf</code>. Все объекты имеют преобразование в строку вида "<code>[object <em>type</em>]</code>". Но многие объекты не преобразуются в число, логическое значение или функцию.</p>
</div>

<h2 id="Examples" name="Examples">Примеры</h2>

<h3 id="Example:_Using_valueOf" name="Example:_Using_valueOf">Пример: использование <code>valueOf</code></h3>

<pre class="brush: js">var o = new Object();
myVar = o.valueOf();      // [object Object]
</pre>

<h2 id="Specifications" name="Specifications">Спецификации</h2>

<table class="standard-table">
 <tbody>
  <tr>
   <th scope="col">Спецификация</th>
   <th scope="col">Статус</th>
   <th scope="col">Комментарии</th>
  </tr>
  <tr>
   <td>ECMAScript 1-е издание.</td>
   <td>Стандарт</td>
   <td>Изначальное определение. Реализована в JavaScript 1.1.</td>
  </tr>
  <tr>
   <td>{{SpecName('ES5.1', '#sec-15.2.4.4', 'Object.prototype.valueOf')}}</td>
   <td>{{Spec2('ES5.1')}}</td>
   <td> </td>
  </tr>
  <tr>
   <td>{{SpecName('ES6', '#sec-object.prototype.valueof', 'Object.prototype.valueOf')}}</td>
   <td>{{Spec2('ES6')}}</td>
   <td> </td>
  </tr>
 </tbody>
</table>

<h2 id="Browser_compatibility" name="Browser_compatibility">Совместимость с браузерами</h2>

<div>{{CompatibilityTable}}</div>

<div id="compat-desktop">
<table class="compat-table">
 <tbody>
  <tr>
   <th>Возможность</th>
   <th>Chrome</th>
   <th>Firefox (Gecko)</th>
   <th>Internet Explorer</th>
   <th>Opera</th>
   <th>Safari</th>
  </tr>
  <tr>
   <td>Базовая поддержка</td>
   <td>{{CompatVersionUnknown}}</td>
   <td>{{CompatVersionUnknown}}</td>
   <td>{{CompatVersionUnknown}}</td>
   <td>{{CompatVersionUnknown}}</td>
   <td>{{CompatVersionUnknown}}</td>
  </tr>
 </tbody>
</table>
</div>

<div id="compat-mobile">
<table class="compat-table">
 <tbody>
  <tr>
   <th>Возможность</th>
   <th>Android</th>
   <th>Chrome для Android</th>
   <th>Firefox Mobile (Gecko)</th>
   <th>IE Mobile</th>
   <th>Opera Mobile</th>
   <th>Safari Mobile</th>
  </tr>
  <tr>
   <td>Базовая поддержка</td>
   <td>{{CompatVersionUnknown}}</td>
   <td>{{CompatVersionUnknown}}</td>
   <td>{{CompatVersionUnknown}}</td>
   <td>{{CompatVersionUnknown}}</td>
   <td>{{CompatVersionUnknown}}</td>
   <td>{{CompatVersionUnknown}}</td>
  </tr>
 </tbody>
</table>
</div>

<h2 id="See_also" name="See_also">Смотрите также</h2>

<ul>
 <li>{{jsxref("Object.prototype.toString()")}}</li>
 <li>{{jsxref("Global_Objects/parseInt", "parseInt()")}}</li>
</ul>