为什么2.ceil()抛出异常,而2.3.ceil()在prototype.js中返回3?

时间:2011-04-25 15:24:32

标签: javascript prototypejs

为了使它更通用...我通过这样做改变了Javascript中Number对象的原型

Number.prototype.ceil = function() { return Math.ceil(this); }; 

现在2.3.ceil()返回3并且2.ceil()抛出异常。 但是,如果我做b = 2然后做b.ceil(),它工作正常!!所以,基本上它仍然是javascript的问题。

3 个答案:

答案 0 :(得分:3)

方法是Math.ceil,它不是实例方法。

var b = 2;
console.log(Math.ceil(b));

b = 2.3;
console.log(Math.ceil(b));

看起来创建一个可以执行此操作的原型方法是微不足道的:

Number.prototype.ceil = function() {
    return Math.ceil(this);
};

console.log(2.3.ceil());

它看起来像JavaScript保留数字文字中的第一个小数,用于向数字添加小数。这是一种语言功能。要解决这个问题,您需要两位小数:

2.ceil(); // does not work
2.3.ceil(); // does work
2..ceil(); // does work

答案 1 :(得分:0)

2.ceil()看起来像是语法错误。 (解释器可能会对点混淆 - 它会尝试将点解释为数字的一部分。)

查看2..ceil()(请注意双点)或(2).ceil()是否适合您。

答案 2 :(得分:0)

你不应该做任何这些,除非你有某种框架或原型.ceil()作为一种方法的原型,在这种情况下,它可能是原型作为字符串的方法。 IOW .ceil()不是原生的javascript方法。

Javascript的原生“round up”方法.ceil()通过使用像

这样的Math对象来工作
alert(Math.ceil(2.3));