【问题标题】:Why doesn't JavaScript let you call methods on numbers directly? [duplicate]为什么 JavaScript 不允许你直接调用数字上的方法? [复制]
【发布时间】:2012-09-04 23:18:50
【问题描述】:

在 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 给我一个语法错误:“Unexpected token ILLEGAL”。为什么?

【问题讨论】:

  • ... 因为 JavaScript 不是 Ruby?这就像在问“为什么 cobol 不像 Ruby 那样工作?”。
  • @Incognito 嗯,不是吗?我在问为什么这是一个语法错误,而不是为什么它不像 ruby​​ 那样工作......
  • 您能解释一下最初谈论 ruby​​ 背后的理性并保持与该陈述的一致性吗?
  • @Incognito 我想重新创建那个方法,所以我只是提到了我想要实现的目标。
  • @Incognito 显然 Ruby 在 JS 问题中提出来是一件坏事,所以我不会再为此烦恼了......

标签: javascript


【解决方案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 在 cmets 中所述,缩小器会删除导致上述语法错误的空间。

【讨论】:

  • 啊,谢谢。有趣的是它也可以在 Ruby 中表示小数点,但它仍然有效。
  • 我反对使用 2 个点,因为这很可能给读者造成混淆。括号更具自我描述性。
  • @AlexCoplan 我猜是因为 Ruby 有整数和浮点类型,但 JavaScript 只有数字
  • 最后一个使用空格的例子很有趣,但依赖它是不安全的...当您通过压缩程序运行该代码时,BAM 您的语法错误再次出现。
猜你喜欢
  • 2020-11-03
  • 1970-01-01
  • 2022-01-19
  • 2016-07-28
  • 1970-01-01
  • 2021-07-18
  • 1970-01-01
  • 2023-04-05
相关资源
最近更新 更多