renovations
This commit is contained in:
parent
e706693c7e
commit
24171550ae
23 changed files with 196 additions and 76 deletions
|
@ -30,4 +30,4 @@ alert( [1,[0],2][1] );
|
|||
Квадратные скобки после массива/объекта обозначают не другой массив, а взятие элемента.
|
||||
</li>
|
||||
<li>Каждый объект преобразуется к примитиву. У встроенных объектов `Object` нет подходящего `valueOf`, поэтому используется `toString`, так что складываются в итоге строковые представления объектов.</li>
|
||||
</ol>
|
||||
</ol>
|
||||
|
|
|
@ -234,5 +234,29 @@ if ( value ) {
|
|||
Полный алгоритм преобразований есть в спецификации EcmaScript, смотрите пункты [11.8.5](http://es5.github.com/x11.html#x11.8.5), [11.9.3](http://es5.github.com/x11.html#x11.9.3), а также [9.1](http://es5.github.com/x9.html#x9.1) и [9.3](http://es5.github.com/x9.html#x9.3).
|
||||
|
||||
|
||||
Заметим, для полноты картины, что некоторые тесты знаний в интернет предлагают вопросы типа:
|
||||
```js
|
||||
{}[0] // чему равно?
|
||||
{} + {} // а так?
|
||||
```
|
||||
|
||||
Если вы запустите эти выражения в консоли, то результат может показаться странным. Подвох здесь в том, что если фигурные скобки `{...}` идут не в выражении, а в основном потоке кода, то JavaScript считает, что это не объект, а "блок кода" (как `if`, `for`, но без оператора, просто группировка команд вместе, используется редко).
|
||||
|
||||
Вот блок кода с командой:
|
||||
```js
|
||||
//+run
|
||||
{
|
||||
alert("Блок")
|
||||
}
|
||||
```
|
||||
|
||||
А если команду изъять, то будет пустой блок `{}`, который ничего не делает. Два примера выше как раз содержат пустой блок в начале, который ничего не делает. Иначе говоря:
|
||||
```js
|
||||
{}[0] // то же что и: [0]
|
||||
{} + {} // то же что и: + {}
|
||||
```
|
||||
|
||||
То есть, такие вопросы -- не на преобразование типов, а на понимание, что если `{ ... }` находится вне выражений, то это не объект, а блок.
|
||||
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue