Hac*_*tly 23 javascript numbers operators
以下函数旨在实现indexOfIE中的属性.如果你曾经不得不这样做,我相信你以前见过它.
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;
};
}
Run Code Online (Sandbox Code Playgroud)
我想知道作者在初始长度检查中使用三个大于标志是否常见?
var len = this.length >>> 0
在控制台中执行此操作只会返回我传递给它的对象的长度,而不是true或false,这让我想到了语法的目的.这是一些我不了解的高级JavaScript忍者技术吗?如果是的话,请赐教!
Bra*_*ney 24
资料来源: LINK
这是零填充右移位运算符,它将第一个操作数的二进制表示向右移动第二个操作数指定的位数.向右移动的位被丢弃,并且在左侧添加零.使用正数时,您将获得与符号传播右移运算符相同的结果,但负数会丢失其符号变为正数,如下一示例所示(假设'a'为-13)将返回1073741820:
码:
Run Code Online (Sandbox Code Playgroud)result = a >>> b;
Sal*_*n A 14
>>>是零填充右移运算符.的>>> 0是操作者的滥用任何数值表达式转换为"整数"或非数字表达为零.这是它的作用:
该运算符将第一个操作数向右移动指定的位数.向右移位的多余位被丢弃.零位从左侧移入.符号位变为0,因此结果始终为正.
按位运算符将其操作数视为32位(零和1)的序列,而不是十进制,十六进制或八进制数.[...] Bitwise运算符对此类二进制表示执行操作,但它们返回标准JavaScript数值.
这些语句一起声明expr >>> 0将始终返回正数,如下所示:
expr 为按位运算转换为32位整数>>> 0 没有效果(没有位移位)Number以下是一些表达式及其结果:
1 >>> 0 // 1 -- Number cast to 32-bit integer then back to Number
"1" >>> 0 // 1 -- String cast to 32-bit integer then back to Number
undefined >>> 0 // 0 -- failed cast yields zero
Run Code Online (Sandbox Code Playgroud)
其他有趣的案例:
1.1 >>> 0 // 1 -- decimal portion gets it
-1 >>> 0 // 4294967295 -- -1 = 0xFFFFFFFF
// Number(0xFFFFFFFF) = 4294967295
"A" >>> 0 // 0 -- cast failed
"1e2" >>> 0 // 100 -- 1x10^2 is 100
"1e10" >>> 0 // 1410065408 -- 1x10^10 is 10000000000
// 10000000000 is 0x00000002540BE400
// 32 bits of that number is 0x540BE400
// Number(0x540BE400) is 1410065408
Run Code Online (Sandbox Code Playgroud)
注意:您会注意到它们都没有返回NaN.
的>>>(右移位)二进制运算符被简单地移位数的最右边的位的指定的次数,以及填充用零到左侧.
注意:在下面的示例中,数字后面的数字表示它所在的基数.2表示二进制,10表示十进制.
例如,4 >>> 1会这样做:
4(10) = 100(2)
4(10) >>> 1(10) = 010(2) = 2(10)
shift once to the right
Run Code Online (Sandbox Code Playgroud)
其他例子:
4(10) >>> 2(10) = 100(2) >>> 2(10) = 001(2) = 1(10)
10(10) >>> 4(10) = 1010(2) >>> 4(10) = 0000(2) = 0(10)
15(10) >>> 1(10) = 1111(2) >>> 1(10) = 0111(2) = 7
Run Code Online (Sandbox Code Playgroud)
我记得它的方法是向右移动必要的位数,然后写入数字.就像,在最后一个例子中,我只是将所有内容移动到右侧,因此结果为0111.
转移0次确实......没有.不知道为什么会这样.
| 归档时间: |
|
| 查看次数: |
5031 次 |
| 最近记录: |