下面的是看了一些前辈写的代码后,自己改了一下,发现出来的结果难以想像,望那位高手能解解一下。
var arr=[];
var Test=function(){
var num_arr=["1","2","3","4"];
for(var i=0;i<num_arr.length;i++){
var o={
id:i
,fun:~ function(){ return i ;}()
};
arr.push(o);
}
return arr;
}();
for(var j=0;j<arr.length;j++)
{
alert("result="+arr[j].fun);
}
要下班放假了,给分吧
你不但问了个问题,还顺带出了个谜语。
给点提示
[code="java"]var arr=[]; //定义一个数组
var Test=function(){ //定义一个变量Test,它的值是等号后边函数的执行结果
var num_arr=["1","2","3","4"]; //一个数组
for(var i=0;i<num_arr.length;i++){
var o={ //定义一个对象o
id:i
,fun:~ function(){ return i ;}() //~这个操作符不知道干嘛的,这部操作,把函数的操作结果付给fun属性。
};
arr.push(o); //将o放入arr数组
}
return arr; //返回arr,Test值为arr数组
}();
for(var j=0;j<arr.length;j++)
{
alert("result="+arr[j].fun); //弹出属性
}[/code]
使用ie8 debug看下就清楚了,楼主要自己多动手,不要偷懒噢 :D
哪里不一样 8)
请问下~这个符号在js中是干嘛用的,如果去掉这个符号,结果是0,1,2,3
w3school上面也没说明这个“~”的用法 :?
~ 为取反,
操作符 用法 描述
按位与 a & b 如果两个操作数对应位都是 1 的话则在该位返回 1。
按位或 a | b 如果两个操作数对应位都是 0 的话则在该位返回 0。
按位异或 a ^ b 如果两个操作数对应位只有一个 1 的话则在该位返回 1。
求反 ~ a 反转操作数的每一位。
左移 a << b 将 a 的二进制形式左移 b 位。右面的空位补零。
算术右移 a >> b 将 a 的二进制形式右移 b 位。忽略被移出的位。
逻辑右移 a >>> b 将 a 的二进制形式右移 b 位。忽略被移出的位,左侧补入 0。
~按位取反
给分吧 :D
int类型
如: 5取反为-6
计算机是按照补码的方式输出(打印):
int 是4个字节
5 : 00000000 00000000 00000000 00000101
5取反: 11111111 11111111 11111111 11111010
取反后再换成补码输出:
(10000000 00000000 00000000 00000110)B = -6