【发布时间】:2017-11-10 15:33:22
【问题描述】:
我正在尝试使用以下代码扩展 Number 对象:
Number.prototype.isNumber = function(i){
if(arguments.length === 1){
return !isNaN(parseFloat(i)) && isFinite(i);
} else {
return !isNaN(parseFloat(this)) && isFinite(this);
}
}
try {
var x = 8.isNumber();
} catch(err) {
console.log(err);
}
我收到SyntaxError: identifier starts immediately after numeric literal
当我尝试以下操作时:
Number.isNumber(8)
我得到Number.isNumber is not a function!!
【问题讨论】:
-
你真的不希望 JS 能够区分 8.isNumber 和 8.123456 吗?
-
好吧,你将无法做到
8.anything,因为 JS 语法。Number.isNumber不是函数,但var n = 8; n.isNumber()可以满足您的期望。 (正如答案所示,您可以使用()将其转换为工作版本,这可能不是您想要的语法。但如果您不立即使用它,那很好。 -
@ChrisCaviness 没有理由不能,只是不能。例如,Ruby 可以很好地解析它。
-
我认为整个概念是有缺陷的。
variable.isNumber()仅在解析器进行类型检查并接受文字为typeof variable === "number时才有效,否则将引发错误。相反,您想要的是直接扩展Number,而不是原型,以便您可以运行Number.isNumber(variable)。 -
@Christoph Lol,说得好。
标签: javascript syntax-error prototype literals