javascript void运算

JavaScript中有7个位运算相关的运算符:

  • 按位非(NOT) - 用一个波浪线" ~ "表示,对二进制的每一位进行取反操作,即将 变成 ,将 变成 。
  • 按位与(AND) - 用一个和好" & "表示,必须有两个操作数,先对齐二进制位,然后把对应位都为 的为筛下来,其他的都为 。
  • 按位或(OR) - 用一个竖线" | "表示,也必须有两个操作数,对齐位之后只要对应位有1就筛下来,只有同时位0时才返回 。
  • 按位异或(XOR) - 用一个插入符号" ^ "表示,也必须有两个操作数,对齐位之后不同的返回1,相同的返回0。
  • 左移 - 用两个小于号" << 表示,顾名思议,将操作数左移指定位数,右侧空位用0补齐。
  • 有符号右移 - 用两个大于号" >> "表示,保留符号位,剩下的右移指定位。
  • 无符号右移 - 用三个大于号" >>> "表示,往右侧移动指定位数。
以上这些位运算符,最终操作的都是二进制数值。

 
按位“异或”运算符说明
^ 运算符查看两个表达式的二进制表示法的值,并执行按位异或。该操作的结果如下所示:
0101   (expression1)
1100   (expression2)
----
1001   (结果)
当且仅当只有一个表达式的某位上为 1 时,结果的该位才为 1。否则结果的该位为 0。

做奇偶性样式,
html:
<div id="tpl_content_month">
     <div class="c_item c_item_{leftOrRight}"></div>  
</div>

var isleft=0;
isLeft = isLeft ^ 1;

//  模版  去掉前后html空格
var tpl_content_month=document.getElementById('tpl_content_month').innerHTML.replace(/^\s*/,'').replace(/\s*$/,'');
tpl_content_month.replace(/\{leftOrRight\}/g, isLeft ? 'left' : 'right')
###########################################################################
// 获取0-max之间随机整数
function random(max) {
        return Math.random() * max | 0;
        // 获取 1-max之间的随机整数
        // return Math.random() * max | 1
}
// 奇偶判断
function isOdd(number) {
        return (parseInt(number) & 1) === 0;
}
function isEven(number) {
        return (parseInt(number) & 1) === 1;
}
// 取整
function int(number) {
        return number | 0;
}
// 取半
number >> 1;
// 2x
number << 1;
// 随机颜色
'#'+ ('000000' + (Math.random()*0xFFFFFF<<0).toString(16)).slice(-6);
ch.charCodeAt(0) | 32 // 大写转小写
ch.charCodeAt(0) & ~32  // 小写转大写

void运算符的作用是:计算表达式expr,并返回undefined.例子:

> void 0
undefined
> void(0)
undefined

> void 4+7  // 由于void比+优先级更高,所以该表达式被解析为(void 4)+7NaN
> void(4+7)
undefined

> var x;
> x = 3;
3
> void(x = 5);
undefined
> x
5
###########################################################################

void是个运算符,而不是函数,它不能被重新定义,如果自定义一个void函数,会抛出异常,像下面这样:

在Firefox中,只有在严格模式下才会报错,其他的关键字和保留关键字作为函数声明的函数名时也一样.
>function void(expr) { // 没有报错,但不会真正声明一个void函数
     return undefined;
 }

>function void(expr) { // 严格模式下会报错
     "use strict";
     return undefined;
 }
SyntaxError: redefining void is deprecated

>function class(expr) { // class也是个保留关键字
     "use strict";
     return undefined;
 }
SyntaxError: redefining class is deprecated
###########################################################################

void的三种用途.

本文剩余的部分讲讲void运算符的三种用途:
  1. void 0代替undefined
  2. 书签小程序
  3. 在链接中执行JavaScript代码
用途1: 用void 0代替undefined
void 0或者void(0)总是等于undefined
用途2: 书签小程序
书签小程序(Bookmarklets)是一个能够执行JavaScript代码的URI(译者注:使用JavaScript伪协议).如果一个bookmarklet返回的结果不是undefined,那么当前页面显示的内容会被这个返回值替代.这时候就得用到void运算符.[Webkit内核的浏览器不会有这样的麻烦]:
  • javascript:3+4 会把当前页面的内容替换成7.
  • javascript:void(3+4) 不会改变当前页面的内容.void会“隐藏”掉表达式3+4的结果.
类似的:
  • javascript:window.open("http://www.whitehouse.gov/") 会替换掉当前页面的内容.
  • javascript:void window.open("http://www.whitehouse.gov/") 不会改变当前页面的内容.
更复杂的例子:这个bookmarklet可以把当前页面的URL提交到submit.example.com:
javascript:void window.open("http://submit.example.com/submit?"+encodeURIComponent(document.location.href))
这个bookmarklet不会改变当前页面的内容,会在新标签或新窗口中打开页面.

译者注:网上有很多流行的Bookmarklet,通常是导入了另外一个js文件,比如繁体字转换成简体字,比如购物网站比价.

javascript: void(document.body.appendChild(document.createElement("script")).src = "http://tongwen.openfoundry.org/NewTongWen/tools/bookmarklet_cn2.js")
用途3: 在链接中执行JavaScript代码
虽然这种做法是不推荐的,但的确是可行的,例如下面的代码:
<a href="javascript:void computeResult()">Compute</a>
如果函数computeResult()返回undefined(或者没有return语句,也默认返回undefined),则不会有什么事.但 如果这个函数返回了其他的值,那么你必须在函数前面添加void运算符来防止它改变当前页面的内容.[Webkit内核的浏览器不会有这样的麻烦].

译者注:更常见的用法是:javascript:void(0),用来阻止链接默认的跳转行为.

 
     
 
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值