JavaScript数学(参数传递、数组和“应用”方法)
1) 为什么JavaScript数学(参数传递、数组和“应用”方法),javascript,Javascript,1) 为什么功能会失败?我认为它符合Mozilla文档中的示例,即 function getMin(x,y) { //from Mozilla documentation return Math.min(x,y) } function smallest(array){ //my own experimentation with Resig`s example return Math.min(array); } function largest(array){ //f
功能会失败?我认为它符合Mozilla文档中的示例,即
function getMin(x,y) { //from Mozilla documentation
return Math.min(x,y)
}
function smallest(array){ //my own experimentation with Resig`s example
return Math.min(array);
}
function largest(array){ //from John Resig`s learning advanced JavaScript #41
return Math.max.apply( Math, array );
}
assert(smallest([0, 1, 2, 3]) == 0, "Locate the smallest value.");
assert(largest([0, 1, 2, 3]) == 3, "Locate the largest value.");
试一试
当作为数组传递时,它将不起作用,因为在比较之前,min
将其参数转换为数字。尝试将数组转换为数字将产生NaN
,除非该数组包含一个看起来像数字的元素
所以
但是
Math.min
和Math.max
接受任意数量的数字作为参数。您的最小的
正在尝试传递数组,而不是数字
使用apply
(如示例中的max
)将数组元素粘贴为参数。它与示例不符。文档中的[]是可选的指示符,而不是数组分隔符。.apply(object,array)
是将数组解压到参数列表中的正确语法。仅仅将数组传递给将所有参数转换为数字的函数是没有用的,因为它只会看到NaN。Math.min()函数可以接受任意数量的参数。但是,将单个数组传递给函数只是传递一个参数,而不是几个参数。这个参数就是数组本身。您会记得,数组是一流的值
这就是“apply”函数的全部要点,它在每个函数上都可用。它用于调用函数并向其传递由数组实例中的条目组成的参数列表。执行此操作时:
var array = [ 1, 2, 3, 4, 5 ];
someFunction.apply(irrelevant, array);
这就像打电话:
someFunction(1, 2, 3, 4, 5);
(在函数调用中,“无关”参数将用作此
值。)应用将数组作为参数对象传递给Math.min-
数学(a,b,c,d,e)
最小值作为第一个变量传递整个数组-
Math.min(x)
我知道你提供的例子是有效的,但是我想知道为什么(为了学习)我的例子,它似乎证实了Mozilla的例子,不起作用(他已经计算出这是必要的:见最大的)。我想你的意思是“一流”,而不是“一流”。:-)对我来说,他们都是“一流”和“一流”:-)
isNaN(Math.min([3, 4])) // because,
isNaN(Math.min('3,4')) // which is the same as
isNaN(Math.min(+'3,4')) // which is equivalent to
isNaN(Math.min(NaN))
var array = [ 1, 2, 3, 4, 5 ];
someFunction.apply(irrelevant, array);
someFunction(1, 2, 3, 4, 5);