JavaScript(Number和Math)对象 & MooTools Native Extensions之Numbers篇

JavaScript Number(数字对象)

在JavaScript中,数字是—种基本的数据类型。在JavaScriptl.1中,JavaScript 还支持Number对象,该对象是原始数值的包装对象。JavaScript在必要时会自动地进行原始数据和对象之间的转换。在JavaScript 1.1中,可以用构造函数Number() 明确地创建一个Number对象,尽管这样做并没有什么必要。

构造函数Number()还可以不与运算符new—起使用,而直接作为转换函数来使用。 以这种方式调用Number()时,它会把自己的参数转换成一个数字,然后返回转换后的原始数值(或NaN)。

构造函数Number()通常还用作5个有用的数字常量的占位符,这5个有用的数字常量分别是可表示的最大的数、可表示的最小的数、正无穷大、负无穷大和特殊的非数 字值。

Number 对象的方法

FF: Firefox, IE: Internet Explorer

方法 描述 FF IE
toString 把数字转换为字符串,使用指定的基数。 1.0 4.0
toLocaleString 把数字转换为字符串,使用本地数字格式顺序。 1.0 4.0
toFixed 把数字转换为字符串,结果的小数点后有指定位数的数字。 1.0 5.5
toExponential 把数字转换为字符串,结果采用指数计数法,小数点后有指定位数的小数。 1.0 5.5
toPrecision 把数字转换为字符串,结果中包含指定位数的有效数字。采用指数计数法或定点计数法,由数字的大小和指定的有效数字位数决定采用哪种方法。 1.0 5.5
valueOf 返回一个 Number 对象的基本数字值。 1.0 4.0

Number 对象的属性

FF: Firefox, IE: Internet Explorer

属性 描述 FF IE
MAX_VALUE 可表示的最大的数。 1.0 4.0
MIN_VALUE 可表示的最小的数。 1.0 4.0
NaN 非数字值。 1.0 4.0
NEGATIVE_INFINITY 负无穷大,溢出时返回该值。 1.0 4.0
POSITIVE_INFINITY 正无穷大,溢出时返回该值。 1.0 4.0

注释:上面的这 5 个常量是构造函数 Number() 自身的属性,而不是单独的某个 Number 对象的属性。

比如这样使用属性 MAX_VALUE 是正确的:

1
var big = Number.MAX_VALUE

但是这样是错误的:

1
2
var n= new Number(2);  
var big = n.MAX_VALUE

作为比较,看一下toString()和Number对象的其他方法,它们是每个Number对象的方法,而不是Number()构造函数的方法。

前面提到过,在必要时,JavaScript 会自动地把原始数值转换成Number对象。

这就是说,调用Number方法的既可以是Number对象,也可以是原始数字值。

1
2
var value = 1234;    
var binary_value = n.toString(2);

注意:

toString(参数)是有参数的。默认为空的时候是十进制。参数可选。规定表示数字的基数,使 2 ~ 36 之间的整数。若省略该参数,则使用基数 10。但是要注意,如果该参数是 10 以外的其他值,则 ECMAScript 标准允许实现返回任意值。

参数为2是二进制值。

Number 对象的方法详解

正如你可能想到的,Number 对象是 Number 原始类型的引用类型。要创建 Number 对象,采用下列代码:

1
var oNumberObject = new Number(68);

您应该已认出我们在上面讨论特殊值(如 Number.MAX_VALUE)时提到的 Number 对象。所有特殊值都是 Number 对象的静态属性。

要得到数字对象的 Number 原始值,只需要使用 valueOf() 方法:

1
var iNumber = oNumberObject.valueOf();

当然,Number 类也有 toString() 方法,下面的方法介绍中详细讨论该方法。

除了从 Object 对象继承的标准方法外,Number 对象还有几个处理数值的专用方法。

toFixed() 方法

toFixed() 方法返回的是具有指定位数小数的数字的字符串表示。

例如:

1
2
var oNumberObject = new Number(68);  
alert(oNumberObject.toFixed(2));  //输出 "68.00"

在这里,toFixed() 方法的参数是 2,说明应该显示两位小数。该方法返回 "68.00",空的字符串位由 0 来补充。对于处理货币的应用程序,该方法非常有用。toFixed() 方法能表示具有 0 到 20 位小数的数字,超过这个范围的值会引发错误。

toExponential() 方法

与格式化数字相关的另一个方法是 toExponential(),它返回的是用科学计数法表示的数字的字符串形式。

与 toFixed() 方法相似,toExponential() 方法也有一个参数,指定要输出的小数的位数。

例如:

1
2
var oNumberObject = new Number(68);  
alert(oNumberObject.toExponential(1));  //输出 "6.8e+1"

这段代码的结果是 "6.8e+1",前面解释过,它表示 6.8×101。问题是,如果不知道要用哪种形式(预定形式或指数形式)表示数字怎么办?可以用 toPrecision() 方法。

toPrecision() 方法

toPrecision() 方法根据最有意义的形式来返回数字的预定形式或指数形式。它有一个参数,即用于表示数的数字总数(不包括指数)。

例如,

1
2
var oNumberObject = new Number(68);  
alert(oNumberObject.toPrecision(1));  //输出 "7e+1"

这段代码的任务是用一位数字表示数字 68,结果为 "7e+1",以另外的形式表示即 70。的确,toPrecision() 方法会对数进行舍入。不过,如果用 2 位数字表示 68,就容易多了:

1
2
var oNumberObject = new Number(68);  
alert(oNumberObject.toPrecision(2));  //输出 "68"

当然,输出的是 "68",因为这正是该数的准确表示。不过,如果指定的位数多于需要的位数又如何呢?

1
2
var oNumberObject = new Number(68);  
alert(oNumberObject.toPrecision(3));  //输出 "68.0"

在这种情况下,toPrecision(3) 等价于 toFixed(1),输出的是 "68.0"。

toFixed()、toExponential() 和 toPrecision() 方法都会进行舍入操作,以便用正确的小数位数正确地表示一个数。

提示:与 Boolean 对象相似,Number 对象也很重要,不过应该少用这种对象,以避免潜在的问题。只要可能,都使用数字的原始表示法。

接下来,是 Number 对象与其它对象共有的方法 。

toString( ) 方法()

从…继承/覆盖

覆盖 Object.toString( )。

toString() 方法可把一个 Number 对象转换为一个字符串,并返回结果。它的返回值是数字的字符串表示。

1
2
3
var number=new Number(125);
alert(typeof number.toString()+ " : " +number.toString());
//输出"string : 125"

注意:

其它对象的toString()方法:array.toString() 、 boolean.toString() 、 date.toString() 、 Number.toString()

 

toLocaleString() 方法

toLocaleString() 方法可把一个 Number 对象转换为本地格式的字符串。

返回值: 数字的字符串表示,由实现决定,根据本地规范进行格式化,可能影响到小数点或千分位分隔符采用的标点符号。

1
2
3
4
5
6
var number=new Number(1000);
alert(typeof number.toLocaleString()+ " : " +number.toLocaleString());
 
//ff中输出为:"string :1,000"
 
//ie中输出为:"string : 1,000.00"

注意:该方法是转换为本地格式的字符串,不同的浏览器得到的格式是不一样的。

其它对象的toLocaleString()方法:array.toLocaleString() 、 date.toLocaleString() 、 Number.toLocaleString()

valueOf() 方法

从…继承/覆盖

覆盖 Object.valueOf( )。

valueOf() 方法可以字符串返回数字。

字符串的输出通常等于该数字。

valueOf() 方法通常由 JavaScript 在后台自动进行调用,而不是显式地处于代码中。

返回值:Number对象的原始数值。几乎没有必要明确调用该方法。

1
2
3
4
5
var number_x=new Number(1000);
var number_y="1000"
 
alert(number_x.valueOf()==number_y.valueOf());
//输出为 :true

注意:

对象的valueOf()方法返回的是与那个对象相关的原始值(如果这样的值存在)。 Number对象、Boolean对象和String对象的valueOf()方法可以将这些包装对象转 换成它们表示的原始值。

对于类型为Number的对象,valueOf()返回该对象表示的原始数值。同样,对于Boolean对象来说,该方法返回与对象相关的布尔值。对于String对象来说,返回与 对象相关的字符串。

JavaScript Math(数学对象)

Math 对象并不像 Date 和 String 那样是对象的类,因此没有构造函数 Math(),像 Math.sin() 这样的函数只是函数,不是某个对象的方法。

Math 对象的方法

FF: Firefox, N: Netscape, IE: Internet Explorer

方法 描述 FF N IE
abs(x) 返回数的绝对值 1 2 3
acos(x) 返回数的反余弦值 1 2 3
asin(x) 返回数的反正弦值 1 2 3
atan(x) 以介于 -PI/2 与 PI/2 弧度之间的数值来返回 x 的反正切值 1 2 3
atan2(y,x) 返回从 x 轴到点 (x,y) 的角度(介于 -PI/2 与 PI/2 弧度之间) 1 2 3
ceil(x) 对一个数进行上舍入。 1 2 3
cos(x) 返回数的余弦 1 2 3
exp(x) 返回 e 的指数。 1 2 3
floor(x) 对一个数进行下舍入。 1 2 3
log(x) 返回数的自然对数(底为e) 1 2 3
max(x,y) 返回 x 和 y 中的最高值 1 2 3
min(x,y) 返回 x 和 y 中的最低值 1 2 3
pow(x,y) 返回 x 的 y 次幂 1 2 3
random() 返回 0 ~ 1 之间的随机数 1 2 3
round(x) 把一个数四舍五入为最接近的整数 1 2 3
sin(x) 返回数的正弦 1 2 3
sqrt(x) 返回数的平方根 1 2 3
tan(x) 返回一个角的正切 1 2 3
toSource() 代表对象的源代码 1 4 -
valueOf() 返回一个 Math 对象的原始值 1 2 4

Math 对象的属性

FF: Firefox, N: Netscape, IE: Internet Explorer

属性 描述 FF N IE
constructor 对创建此对象的函数的引用 1 2 4
E 常量 e,自然对数的底数 (约等于2.718) 1 2 3
LN2 返回 2 的自然对数(约等于0.693) 1 2 3
LN10 返回 10 的自然对数(约等于2.302) 1 2 3
LOG2E 返回以 2 为底的 e 的对数 (约等于 1.414) 1 2 3
LOG10E 返回以 10 为底的 e 的对数 (约等于0.434) 1 2 3
PI 返回圆周率 (约等于3.14159) 1 2 3
prototype 允许您向对象添加属性和方法 1 2 4
SQRT1_2 返回 2 的平方根除 1 (约等于 0.707) 1 2 3
SQRT2 返回 2 的平方根 (约等于 1.414)

abs() 方法

abs() 方法可返回数的绝对值。

语法:

Math.abs(x)

返回值:

x 的绝对值。

示例

1
2
3
4
5
alert(Math.abs(7.25));//7.25
alert(Math.abs(-7.25));//7.25
alert(Math.abs(7.25-10));//2.75
 
<strong><em>Math.floor( )</em></strong>方法

Math.floor()执行的是向下取整计算,它返回的是小于等于函数参数,并且与之最接近的整数。

Math.floor()将一个浮点值下舍人为最接近的整数。Math.floor()执行的操作不同于Math.round(),它总是进行下舍人,而不是上舍入或下舍人到最接近的整数。还要注意,Math.floor()将负数舍入为更小的负数,而不是向0进行舍入。

语法

Math.floor(x)

返回值

小于等于x,并且与它最接近的整数。

示例

1
2
3
4
a = Math.floor(1.99);  // 结果为1.0   
b = Math.floor(1.01);    // 结果为1.0  
c = Math.floor(1.0);     // 结果为1.0   
d = Math.floor(-1.01);   // 结果为 -2.0

Math.round( )

Math.round( )将把它的参数上舍入或下舍入到与它最接近的整数。对于0.5,它将上舍入。例如,2.5将被舍入为3,-2.5将被舍入为-2。

语法

Math.round(x)

返回值

与x最接近的数。

示例

1
2
3
4
5
alert(Math.round(0.60));//结果为 1 
alert(Math.round(0.50));//结果为 1
alert(Math.round(0.49));//结果为 0
alert(Math.round(-4.40));//结果为 -4
alert(Math.round(-4.60));//结果为 -5

Math.random( )

random() 方法可返回介于 0 ~ 1 之间的一个随机数。

语法

Math.random( )

返回值

0.0 ~ 1.0 之间的一个伪随机数。

示例

1
alert(Math.random());//0.5784334093104445

Math.max( )

返回最大的参数

语法

Math.max(args…)

返回值

参数中最大的值。如果没有参数,返回-Infinity。如果有一个参数为NaN,或是不能转换成数字的非数字值,则返回NaN。

示例

1
alert(Math.max(3,20,6,9));//返回值:20

Math.min( )

返回最小的参数

语法

Math.min(args…)

返回值

参数中最小的值。如果没有参数,返回Infinity。如果有一个参数为NaN,或是不能转换成数字的非数字值,则返HNaN。

示例

1
alert(Math.min(3,20,6,9));//返回值:3

MooTools 对Number的扩展

Most of the native methods for Number in JavaScript are part of the Math
object or are stand-alone functions.

For example, parseInt is just a built-
in function to parse a string to an integer.

This isn’t a very MooTools way of doing things though;

MooTools prefers
to add methods to the prototypes of natives, so MooTools translates most
of these as methods on Number.

As a result, most of the MooTools methods for Number are native methods
just applied to the numbers as methods.

1
2
3
var x = 3.5;
x.floor(); //Returns 3  
Math.floor(3.5); //Same thing

Note that you can’t execute these methods on the literal for numbers
(because number literals can contain decimals), so this won’t work:

3.floor(); 

But this would:

1
(3).floor();

In addition to converting all the Math methods (abs, acos, asin, atan,

atan2, ceil, cos, exp, floor, log, max, min, pow, sin, sqrt, and tan) to
native methods, MooTools adds the following methods:

备注:

所有Javascript标准Math对象中的方法都被映射至Number中,可在Number对象上直接调用, 如:

  • 标准用法: Math.abs(-123)
  • Mootools用法: (-123).abs()

Number.limit

MooTools中的limit()方法也是非常简单直接的。你可以在一个数字上面调用这个方法,传入一个这个数字允许的最小值和一个允许的最大值作为参数,它会自动地进行舍入处理。

作用:

值范围限制在指定区间(在区间内,取原值;超出区间,则取邻近的区间边界值)

用法:

myNumber.limit(min, max);

返回值:

(number) 在区间内取出的值

Example:

1
2
3
4
5
6
7
8
9
10
11
12
//直接使用
(12).limit(2, 6.5);  //返回: 6.5
(-4).limit(2, 6.5);  //返回: 2
(4.3).limit(2, 6.5); //返回: 4.3
//
var limit_test =function(number_to_limit){
	var limited_number=number_to_limit.limit(2,6.5);
	alert(limited_number);
};
limit_test(12);
limit_test(-4);
limit_test(4.3);

注意:limit方法需要传入数字类型的参数。需要传入整数参数时,我们只需在使用limit方法之前先对你要指定为数字的东西转换为十进制整数,只要用MooTools Number中toInt()方法就可以了。

1
2
3
4
5
6
7
8
var limitDemo = function(number_to_limit){   
  //Do our best to get an integer   
  number_to_limit = number_to_limit.toInt();    
  //Get the limited value    
  var limited_number = number_to_limit.limit(0, 255);   
  alert("Number Limited To : " + limited_number);
}
limitDemo(65.75634);//返回:65

Number.round

返回四舍五入到指定的精度:在小数点后的位数。 参数也可以是负数或零(默认)。

作用:

对数值进行指定位上的四舍五入

用法:

myNumber.round([precision]);

返回值:

(number) 四舍五入后的值

Example:

1
2
3
(12.45).round()   //Returns 12  
(12.45).round(1)  //Returns 12.5  
(12.45).round(-1) //Returns 10

Number.times

执行一个函数中指定的次数

作用:

以本数值表示的次数进行迭代

用法:

myNumber.times(fn[, bind]);

参数:

  1. fn – (function) 作用于迭代项的函数. 当前迭代值将作为参数传入该函数
  2. bind – (object, 可选) "this"所引用的对象, 详情请参考Function:bind.

Example:

1
2
3
4
function test(x){
   alert(x);
}
(4).times(test);  //Alerts "0", then "1", then "2", then "3".

Number.toInt

你可以在一个变量上调用它,那么它将尽可能地将它转换成一个整数。

作用:

将数值以指定进制为基准进行计算转换为十进制整数

用法:

myNumber.toInt([base]);

返回值:

(number) 转换后的整数

Example:

1
2
3
4
5
6
7
8
var x = 10;
x.toInt(); //returns 10
 
var x = 10.01;<br />
x.toFloat(); //returns 10.01
 
var x = 10.01;
x.toInt(); //returns 10

Number.toFloat

此方法返回一个浮点数

作用:

将数值转换成浮点数

用法:

myNumber.toFloat();

返回值:

(number) 浮点数

Example:

1
2
(111).toFloat();    //返回 111
(111.1).toFloat();  //返回 111.1

注意:对于toInt 和 toFloat 两大方法作用于数字或字符串,所以在MooTools String中也有toInt 和 toFloat 两大方法。 它们的作用是相同的。

站点统计