为啥在参数周围使用 /*、*/ 以及为啥在提取数组长度时使用 >>>? [复制]
Posted
技术标签:
【中文标题】为啥在参数周围使用 /*、*/ 以及为啥在提取数组长度时使用 >>>? [复制]【英文标题】:Why use /*, */ around arguments and why use >>> when extracting the length of an array? [duplicate]为什么在参数周围使用 /*、*/ 以及为什么在提取数组长度时使用 >>>? [复制] 【发布时间】:2010-11-26 00:13:32 【问题描述】:我在developer.mozilla.org站点的indexOf页面上查看javascript参考手册,注意到他们的indexOf实现代码中有一些东西,希望有人能给我解释一下。
为了节省大家往返 Mozilla 网站的时间,这里是整个功能:
if (!Array.prototype.indexOf)
Array.prototype.indexOf = function(elt /*, from*/)
var len = this.length >>> 0;
var from = Number(arguments[1]) || 0;
from = (from < 0)
? Math.ceil(from)
: Math.floor(from);
if (from < 0)
from += len;
for (; from < len; from++)
if (from in this &&
this[from] === elt)
return from;
return -1;
;
我不明白的是函数声明中的/*, from*/
,以及提取长度的零填充右移>>>
数组 (var len = this.length >>> 0;
)。
【问题讨论】:
【参考方案1】:/*, from */
是一个注释掉的参数。但是,它似乎已留在 cmets 中以表明可以可选地为函数指定此参数。
var from = Number(arguments[1]) || 0;
我相信 arguments[1]
将是 from
如果传入的值。
参数数组特别 有用的功能,可以 以可变数量调用 论据,或有更多的论据 他们被正式宣布接受。 http://www.devguru.com/Technologies/Ecmascript/Quickref/arguments.html
>>>
是无符号右移。它在这里被用来将可能有符号的数字length
转换为无符号的数字。
Extract from Professional JavaScript for Web Developers
http://www.c-point.com/javascript_tutorial/jsoprurshift.htm
【讨论】:
谢谢,现在明白了。我没有意识到长度属性可以是无符号的,javascript有时让我感到困惑:)【参考方案2】:/*, from */
是可选参数。之后通知var from = Number(arguments[1]) || 0;
。如果在函数调用中传递了第二个参数,则变量 from 将设置为它。
不确定无符号右移。对我来说没有任何意义。
【讨论】:
【参考方案3】:函数声明中的/*, from*/
只是作者的一个注释,说明还有第二个可选参数from。它是作为注释写的,因此它不是签名的一部分(Array.prototype.indexOf.length
返回 1)。
而右移可能总是用来得到一个整数值this.length
。
【讨论】:
以上是关于为啥在参数周围使用 /*、*/ 以及为啥在提取数组长度时使用 >>>? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
为啥 SOAP 参数的顺序在 PHP SOAP 中很重要,以及如何解决它?