Функция `toLocaleString()` не срабатывает как ожидается после применения `toFixed()` из-за того, что `toFixed()` возвращает строку, а не число.
Давайте разберём подробнее:
1. В первом примере:
```javascript
var a = 12.34;
a.toLocaleString();
```
Здесь `a` — это число, и при вызове `toLocaleString()` оно преобразуется в строку с учётом локализации, заменяя разделитель десятичной части на запятую (если локализация настроена соответствующим образом).
2. Во втором примере:
```javascript
var a = 12.34;
a.toFixed(2).toLocaleString();
```
Здесь `a.toFixed(2)` возвращает строку `"12.34"` (в зависимости от локали, последний аргумент определяется на основе контекста, в данном случае, если используется английская локаль, то десятичный разделитель будет точкой). Затем, когда вы пытаетесь вызвать метод `toLocaleString()` на этой строке, это вызывает ошибку, потому что строка не имеет метода `toLocaleString()`.
Для того чтобы данный код работал как ожидается, нужно привести результат `toFixed()` обратно к типу `Number`, что можно сделать следующим образом:
```javascript
var a = 12.34;
Number(a.toFixed(2)).toLocaleString(); // будет работать
```
Теперь `toLocaleString()` будет применён к числу, и вы получите результат в нужном формате в зависимости от локализации.
Если вам нужно заменить точку на запятую, вы можете сделать это вручную, например:
```javascript
var a = 12.34;
var result = a.toFixed(2).replace('.', ','); // "12,34"
```
Таким образом, вы получите строку с нужными вам разделителями.