理解JavaScript中的数字函数
我在Mozilla开发者网络上读到关于JavaScript数字对象的文章。我是新来的。以下是我的脚本:理解JavaScript中的数字函数,javascript,Javascript,我在Mozilla开发者网络上读到关于JavaScript数字对象的文章。我是新来的。以下是我的脚本: 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
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
我想知道为什么我得到了所有的零,尽管数字=16。请帮助我理解这一点 你必须有:
var number = 16;
console.log(number.toExponential());
console.log(number.toFixed());
console.log(number.toPrecision());
使用prototype,您可以定义自己的方法和对象属性
原型基本上扩展了对象
以下是原型的一个简单示例:
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());
}
在本例中,该关键字引用number对象,所以您不必在函数中传递任何参数进行操作
看看你必须具备:
var number = 16;
console.log(number.toExponential());
console.log(number.toFixed());
console.log(number.toPrecision());
使用prototype,您可以定义自己的方法和对象属性
原型基本上扩展了对象
以下是原型的一个简单示例:
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());
}
在本例中,该关键字引用number对象,所以您不必在函数中传递任何参数进行操作
看看数字。原型函数依赖于实际数字原型是特定类型的定义。字符串变量有活在String.prototype上的函数,数组有在Array.prototype上定义的函数,等等。这是学习原型继承的好起点,所以只需调用number.toFixed、number.toFixed等。您甚至可以执行16.toString等
通过调用prototype函数,而不是在16上调用函数,可以不使用任何函数。数字。prototype函数以实际数字为基础。prototype是特定类型的定义。字符串变量有活在String.prototype上的函数,数组有在Array.prototype上定义的函数,等等。这是学习原型继承的好起点,所以只需调用number.toFixed、number.toFixed等。您甚至可以执行16.toString等 通过调用原型函数而不是在16上调用函数,您是在不使用任何内容的情况下调用函数。尝试以下操作:
var number = 16;
console.log( Number.prototype.toExponential.call(number) );
请注意调用实例上Number对象的方法表示的调用。尝试以下操作:
var number = 16;
console.log( Number.prototype.toExponential.call(number) );
请注意调用实例上Number对象的方法表示的调用。如果执行以下操作,您的运气会更好:
var number = new Number(16);
console.log(number.toExponential());
console.log(number.toFixed());
console.log(number.toPrecision());
console.log(number.valueOf());
(16).toExponential();
注意*最好不要以这种方式在javascript中使用数字,除非您特别需要避免使用原语
得到0的原因是,如果没有实例化,则数字原型默认为零
Number是一个原型,它在语义上被设计用于生成继承这些方法的新对象。这些方法不是直接从数字原型调用的,而是从数字本身调用的。请尝试以下操作:
var number = new Number(16);
console.log(number.toExponential());
console.log(number.toFixed());
console.log(number.toPrecision());
console.log(number.valueOf());
(16).toExponential();
您必须将数字括在括号中,以便解释器知道您正在访问方法,而不是定义浮点
这里需要理解的重要一点是,数字原型提供了所有数字将在javascript中继承的所有方法
为了进一步解释获得0的原因,数字原型上的方法旨在绑定到数字对象。它们将使用绑定对象作为输入,并将忽略任何参数。由于它们被绑定到默认数字对象,默认数字为0,因此所有方法都将返回其版本0
javascript中有一种方法可以使用call方法将方法重新绑定到对象。还有bind和apply:
Number.prototype.toExponential.call(16);
如果您执行以下操作,您的运气会更好:
var number = new Number(16);
console.log(number.toExponential());
console.log(number.toFixed());
console.log(number.toPrecision());
console.log(number.valueOf());
(16).toExponential();
注意*最好不要以这种方式在javascript中使用数字,除非您特别需要避免使用原语
得到0的原因是,如果没有实例化,则数字原型默认为零
Number是一个原型,它在语义上被设计用于生成继承这些方法的新对象。这些方法不是直接从数字原型调用的,而是从数字本身调用的。请尝试以下操作:
var number = new Number(16);
console.log(number.toExponential());
console.log(number.toFixed());
console.log(number.toPrecision());
console.log(number.valueOf());
(16).toExponential();
您必须将数字括在括号中,以便解释器知道您正在访问方法,而不是定义浮点
这里需要理解的重要一点是,数字原型提供了所有数字将在javascript中继承的所有方法
为了进一步解释获得0的原因,数字原型上的方法旨在绑定到数字对象。它们将使用绑定对象作为输入,并将忽略任何参数。由于它们被绑定到默认数字对象,默认数字为0,因此所有方法都将返回其版本0
javascript中有一种方法可以使用call方法将方法重新绑定到对象。还有bind和apply:
Number.prototype.toExponential.call(16);
请向我解释一下.prototype的概念:我以前从未见过它:它是面向对象javascript的整个基础…=对象具有由原型定义的类型,实例共享所有原型函数。
你肯定想读一些类似JavaScript的东西:让自己熟悉JavaScript工作原理的核心的好部分=到目前为止,我学到的是如何使用JavaScript,而不是工作原理。就像我说的,我对这件事还不熟悉。你有什么好书推荐吗我用一个有用的链接更新了答案,如果你正在学习的话,Crockford关于JavaScript的其余部分通常也值得一读JavaScript@LittleChild看看我的示例请向我解释一下.prototype的概念:我以前从未见过它:它是面向对象javascript的整个基础…=对象具有由原型定义的类型,实例共享所有原型函数。你肯定想读一些类似JavaScript的东西:让自己熟悉JavaScript工作原理的核心的好部分=到目前为止,我学到的是如何使用JavaScript,而不是工作原理。就像我说的,我对这件事还不熟悉。你有什么好书推荐吗我用一个有用的链接更新了答案,如果你正在学习的话,Crockford关于JavaScript的其余部分通常也值得一读JavaScript@LittleChild请看我的示例,但请不要在现实生活中更改主机对象。@phylax这是什么意思?:主机对象包括数字、数组、字符串。。。改变他们的行为被认为是不好的做法。在这里阅读更多:@phylax:这些不是宿主对象,在现实生活中,扩展它们的原型可能很有用。不同的人对这件事有不同的看法,但这本身并没有什么问题。更具情境性。@phylax-Like cookie monster说我看不出这有什么问题,不管怎样,我只是展示了一个原型如何工作的示例,但请不要在现实生活中更改主机对象。@phylax这是什么意思?:主机对象包括数字、数组、字符串。。。改变他们的行为被认为是不好的做法。在这里阅读更多:@phylax:这些不是宿主对象,在现实生活中,扩展它们的原型可能很有用。不同的人对这件事有不同的看法,但这本身并没有什么问题。“这更具情境性。”phylax-Like cookie monster说,我看不出这有什么问题,不管怎样,我只是举了一个例子说明原型是如何工作的——你不应该提倡使用新数字。一些经验不足的开发人员可能会意识到这一点,并在以后遇到各种各样的问题。不过,我喜欢剩下的答案:我只是用它来演示数字原型是如何实例化的。当然,我也提供了访问相关方法的原始方法。但是,如果我可以问,为什么不赞成使用新数字?主要是因为它使比较不一致。例如,新数字16==新数字16为假。新数字0<新数字16为真。使用对象而不是原语值的副作用。你不应该提倡使用新数字。一些经验不足的开发人员可能会意识到这一点,并在以后遇到各种各样的问题。不过,我喜欢剩下的答案:我只是用它来演示数字原型是如何实例化的。当然,我也提供了访问相关方法的原始方法。但是,如果我可以问,为什么不赞成使用新数字?主要是因为它使比较不一致。例如,新数字16==新数字16为假。新数字0<新数字16为真。使用对象而不是原始值的副作用。