Почему JavaScript не позволяет вам напрямую обращаться к методам на номера?

В Ruby вы можете сделать это:

3.times { print "Ho! " } # => Ho! Ho! Ho!

Я попытался сделать это в JavaScript:

Number.prototype.times = function(fn) {
    for (var i = 0; i < this; i++) {
        fn();
    }
}

Это работает:

(3).times(function() { console.log("hi"); });

Это не

3.times(function() { console.log("hi"); });

Chrome дает мне синтаксическую ошибку: "Неожиданный токен ILLEGAL". Почему?

Ответы

Ответ 1

. после того, как цифры представляют десятичную точку номера, вам нужно будет использовать другой для доступа к свойству или методу.

3..times(function() { console.log("hi"); });

Это необходимо только для десятичных литералов. Для восьмеричных и шестнадцатеричных литералов вы используете только один ..

03.times(function() { console.log("hi"); });//octal
0x3.times(function() { console.log("hi"); });//hexadecimal

Также экспоненциальный

3e0.times(function() { console.log("hi"); });

Вы также можете использовать пробел, так как пробел в номере недействителен, а затем нет двусмысленности.

3 .times(function() { console.log("hi"); });

Хотя, как указано в wxactly в комментариях, a minifier удалит пространство, вызывающее вышеупомянутую синтаксическую ошибку.