理解JavaScript中的数字函数

时间:2014-04-13 17:14:03

标签: javascript

我正在阅读Mozilla Developer Network上的JavaScript Number对象。我是新来的。以下是我的剧本:

var number = 16;
console.log( Number.prototype.toExponential(number) );
console.log( Number.prototype.toFixed(number) );
console.log( Number.prototype.toPrecision(number) );
// DON'T UNDERSTAND WHAT THIS DOES
// console.log( Number.prototype.toSource(number) );
console.log( Number.prototype.valueOf(number) );  

和输出:

0.0000000000000000e+0 
0.0000000000000000 
0.000000000000000 
0   

我想知道为什么我尽管number = 16得到全零。 请帮助我理解这一点。:)

4 个答案:

答案 0 :(得分:3)

你必须:

var number = 16;
console.log(number.toExponential());
console.log(number.toFixed());
console.log(number.toPrecision());

使用原型,您可以定义自己的对象方法和属性

原型基本上是扩展对象

以下是原型的一个简单示例:

Number.prototype.isPrime = function() {
    if ( this === 0 || this === 1 ) {
        return false;
    }
    for ( var i = 2; i < this; i++ ) {
        if ( this % i === 0 ) {
            return false;
        }
    }
    return true;
};

var arr = [2,4,5,13,15,121];

for ( var i = 0; i < arr.length; i++ ) {
    console.log(arr[i].isPrime());
}

在此示例中,this关键字引用数字对象(因此您不必在函数中传递任何参数以进行操作)

JSFIDDLE

查看prototype

答案 1 :(得分:2)

Number.prototype函数存在于实际数字上(原型是特定类型的定义。字符串变量具有生活在String.prototype上的函数,数组具有在Array.prototype上定义的函数,等等。http://javascript.crockford.com/prototypal.html是这是一个了解原型继承的良好起点),所以只需致电number.toFixed()number.toFixed()等等。您甚至可以(16).toString()等。

你通过调用原型函数而不是“16”来调用函数“无所事事”。

答案 2 :(得分:2)

如果您执行以下操作,您将获得更好的运气:

var number = new Number(16);
console.log(number.toExponential());
console.log(number.toFixed());
console.log(number.toPrecision());
console.log(number.valueOf());

注意*除非您特别需要避免使用原语,否则最好不要以这种方式使用javascript中的数字。

你得到0的原因是因为如果未实例化,则数字原型默认为零。

Number 是一个原型,它在语义上设计用于生成继承这些方法的新对象。这些方法不是直接从 Number 原型中调用,而是从数字本身调用。请尝试以下方法:

(16).toExponential();

您必须将数字包装在括号中,以便解释器知道您正在访问方法而不是定义浮点。

要理解的重要一点是 Number原型提供了所有数字将在javascript中继承的所有方法。

为了进一步解释为什么你得到0,数字原型上的方法是&#34;绑定&#34;到一个数字对象。他们将使用绑定对象进行输入,并忽略任何参数。由于它们绑定到默认的Number对象,因此默认编号为0,因此所有方法都将返回其版本0。

javascript中有一种方法可以使用&#34; call&#34;将方法重新绑定到对象。方法(还有绑定和应用):

Number.prototype.toExponential.call(16);

答案 3 :(得分:1)

试试这个:

var number = 16;
console.log( Number.prototype.toExponential.call(number) );

注意call()调用实例上toExponential对象的方法Number