JS按位取反
Javascript 按位取反运算符 (~) ,对一个表达式执行位非(求非)运算。如 ~1 = -2; ~2 = -3;
来看看~1的计算步骤:
将1(这里叫:原码)转二进制 =
00000001
按位取反 =
11111110
发现符号位(即最高位)为1(表示负数),将除符号位之外的其他数字取反 =
10000001
末位加1取其补码 =
10000010
转换回十进制 =
-2
按位取反的运算规则这么奇怪并不是JavaScript独有的,而是所有的计算机语言都是这样的。这样做的主要原因是为了为了统一减法和加法,在计算机中,减法会变成加一个负数,而负数会以补码的形式存储。而这样主要是因为补码和数字的十进制数有这么转换关系,负数:
补码(x) = -x - 1
,正数:补码(x) = x
。
可参考:二进制如何转十进制,十进制如何转二进制
问题地址:https://segmentfault.com/q/1010000005697515
语法标签label
JavaScript语言允许,语句的前面有标签(label),相当于定位符,用于跳转到程序的任意位置,标签的格式如下。
label:
statement
标签可以是任意的标识符,但是不能是保留字,语句部分可以是任意语句。
标签通常与break语句和continue语句配合使用,跳出特定的循环。
top:
for (var i = 0; i < 3; i++){
for (var j = 0; j < 3; j++){
if (i === 1 && j === 1) break top;
console.log('i=' + i + ', j=' + j);
}
}
// i=0, j=0
// i=0, j=1
// i=0, j=2
// i=1, j=0
面代码为一个双重循环区块,break命令后面加上了top标签(注意,top不用加引号),满足条件时,直接跳出双层循环。如果break语句后面不使用标签,则只能跳出内层循环,进入下一次的外层循环。
continue语句也可以与标签配合使用。
top:
for (var i = 0; i < 3; i++){
for (var j = 0; j < 3; j++){
if (i === 1 && j === 1) continue top;
console.log('i=' + i + ', j=' + j);
}
}
// i=0, j=0
// i=0, j=1
// i=0, j=2
// i=1, j=0
// i=2, j=0
// i=2, j=1
// i=2, j=2
上面代码中,continue命令后面有一个标签名,满足条件时,会跳过当前循环,直接进入下一轮外层循环。如果continue语句后面不使用标签,则只能进入下一轮的内层循环。
说明:
break语句和continue语句都具有跳转作用,可以让代码不按既有的顺序执行。
break语句用于跳出代码块或循环。
continue语句用于立即终止本轮循环,返回循环结构的头部,开始下一轮循环。
正则表达式中replace的0,1是什么?
str.replace(reg,function(){}) 应用的地方很多啊,最基本的就是 比如str 是一串数字,比如你要把这些数字替换成 大写的汉字
var ary=["一","二","三","四","五","六"]
"123456".replace(/\d/g,function(){
return ary[argument[0]];
})
还有一种用法就是 不替换 字符串,只是利用replace 可以 匹配几次,这个function 就执行几次的特性。来做一些事情,比如格式化时间字符串。等等。
1−−9 是RegExp 自带的,只要放生了匹配就会有。 test exec str的replace 都会有。代表的是 分组,即小括号里面的小正则 捕获到的内容。
/^(\d{4})[\/-](\d{1,2})[\/-](\d{1,2})$/
比如这个 简单的匹配 年月日的正则,
我们就可以通过 12 $3 获取到并进行处理。
在一个例子:
var reg=new RegExp("(http://www.qidian.com/BookReader/)(\\d+),(\\d+).aspx","gmi");
var url="http://www.qidian.com/BookReader/1017141,20361055.aspx";
var rep=url.replace(reg,"$1ShowBook.aspx?bookId=$2&chapterId=$3");
你可能注意到了,在reg正则表达式里的几对"()",
比如("(http://www.qidian.com/BookReader/)
,(\\d+)
,$n就指的是匹配到的第n个括号里的内容,**$n主要是用在后面的程序需要引用前面的正则匹配到的内容时。**在这个例子里:
$1 : http://www.qidian.com/BookReader/
$2 : 1017141
$3 : 20361055
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。