Что означает символ _ (подчеркивание) в Node.js REPL?

Я играл в Node.js с каким-то кодом, когда заметил эту вещь:

> 'hello world'.padEnd(20);
'hello world         '
> 'hello world'.padEnd(20, _);
'hello worldhello wor'

Что здесь делает символ подчеркивания?

> _
'hello worldhello wor'

person JulyMorning    schedule 25.09.2017    source источник
comment
nodejs.org/docs/latest/api/   -  person Bergi    schedule 26.09.2017
comment
См. также Почему это происходит в Node.js REPL?   -  person Bergi    schedule 26.09.2017


Ответы (2)


Символ _ возвращает результат последнего зарегистрированного выражения в консоли узла REPL:

> 2 * 2
4
> _
4

Как написано в документации, в 6.x и более поздних версиях узла это поведение можно отключить. установив значение _ явно:

> [ 'a', 'b', 'c' ]
[ 'a', 'b', 'c' ]
> _.length
3
> _ += 1
Expression assignment to _ now disabled.
4
> 1 + 1
2
> _
4

Но в старых версиях эта функция не работает:

> [ 'a', 'b', 'c' ]
[ 'a', 'b', 'c' ]
> _.length
3
> _ += 1
4
> 1 + 1
2
> _
2
person Karol Selak    schedule 26.09.2017

_ в консоли узла возвращает результат последнего выражения.

> 1 + 2
3
> _
3
person Community    schedule 25.09.2017
comment
Вау, какое дико неожиданное поведение. - person canon; 26.09.2017
comment
Это происходит только в REPL (интерактивной консоли), и это полностью задокументирован. В обычном коде подчеркивание — это просто еще один идентификатор переменной. - person josh3736; 26.09.2017
comment
@canon, однажды у меня был профессор, который, заполнив доску уравнениями, сказал и так очевидно - и начал заполнять вторую доску. Я поднял руку. Доктор Голдман, вы уверены, что это очевидно? Это остановило его. Добрую минуту он молча смотрел на свою работу. Да, заключил он. Это очевидно. Когда я увидел этот вопрос в сайдбаре, я подумал, что это, наверное, означает результат последнего выражения. - person Malvolio; 26.09.2017
comment
В этом нет ничего неожиданного — на самом деле, это даже не уникально для node.js или даже для JavaScript. Это в интерактивных средах Python и Ruby и, возможно, даже на других языках, которые я не использовал. - person Yet Another User; 26.09.2017
comment
@YetAnotherUser Я думаю, что это могло произойти с Perl. - person Bob; 26.09.2017
comment
Это не так уж неожиданно — все сигилы совершенно неожиданны. Например, если бы вместо этого было __previousResult__, то этот вопрос никогда бы не был задан. - person aaaaaa; 26.09.2017