Лучший способ объяснить, что он делает, - сначала немного усложнить.
Первое, на что нужно обратить внимание, - это то, что метод String.prototype.replace()
при вызове с функцией обратного вызова пропустит match
, затем любые захваченные группы (в данном случае ни одной), затем offset
, затем string
в качестве аргументов, поэтому его можно развернуть следующим образом:
!''.replace(/^/, (match, offset, string) => String(match, offset, string))
Теперь, когда String()
вызывается как статический метод (без оператора new
), он принимает свой первый параметр и преобразует его в строку, игнорируя остальные параметры переданы:
console.log(String('foo', 0, 'foo bar')) // 0, 'foo bar' ignored
Учитывая это, мы можем теперь упростить выражение до этого:
!''.replace(/^/, match => match)
, поскольку match
уже является строкой. Теперь /^/
соответствует сечению нулевой ширины в начале строки, к которой вызывается метод, и replace()
вставляет возвращаемое значение функции обратного вызова в то же место. Поскольку match
является возвращаемым значением, целое .replace(/^/, match => match)
не вызывает побочных эффектов, поэтому выражение теперь эквивалентно:
!''
И, как вы уже указали, ''
- ложь, поэтому !''
оценивается как true
.