一、位运算符
& 与 都为1结果为1
| 或 只要有1结果为1
^ 异或 相同为0,不同为1
~ 非 0变1,1变0
~正数 -(n+1)
~负数 (|n|-1)
<< 左移
>> 右移 有符号右移
>>> 右移 无符号右移
3&2
011
& 010
---------
010
5&3
101
& 011
----------
001
3|2
011
| 010
------------
011
5|3
101
| 011
----------
111
3^2
011
^ 010
------------
001
5^3
101
^ 011
----------
110
js 数值类型--64位
32位 最高位-符号位
18 -- 10010
00000000 00000000 00000000 00010010
-18
11111111 11111111 11111111 11101101 取反
11111111 11111111 11111111 11101110 加1
~18 //-19
00000000 00000000 00000000 00010010
11111111 11111111 11111111 11101101 ~后
11111111 11111111 11111111 11101100 减1
00000000 00000000 00000000 00010011 取反 19
加负号 -19
~3 //-4
00000000 00000000 00000000 00000011
11111111 11111111 11111111 11111100 ~后
11111111 11111111 11111111 11111011 减1
00000000 00000000 00000000 00000100 取反 4
加负号 -4
左移<<
2<<5 向左移动5位
00000000 00000000 00000000 00000010 2
000 00000000 00000000 0000001000000 左移5位,空出低位补0
-2<<5
00000000 00000000 00000000 00000010
11111111 11111111 11111111 11111101
11111111 11111111 11111111 11111110 -2
111 11111111 11111111 1111111000000
111 11111111 11111111 1111110111111
000 00000000 00000000 0000001000000 64
右移>>
64>>5
00000000 00000000 00000000 01000000
0000000000000 00000000 00000000 010 右移 高位补0
-64>>5
00000000 00000000 00000000 01000000
11111111 11111111 11111111 10111111
11111111 11111111 11111111 11000000
1111111111111 11111111 11111111 110 有符号右移,看符号位,如为1补1
0000000000000 00000000 00000000 010 -2
-64>>>5
00000000 00000000 00000000 01000000
11111111 11111111 11111111 10111111
0000011111111 11111111 11111111 101 无符号右移,不看符号位,高位全部补0
0000011111111 11111111 11111111 100
1111100000000 00000000 00000000 011
console.log(3&2) //2
console.log(5&3) //1
console.log(3|2) //3
console.log(5|3) //7
console.log(~3) //4
console.log(~18) //-19
console.log(25&3) //1
console.log(25|3) //27
console.log(25^3) //26
console.log(~25) //-26
console.log(-2<<5) //64
console.log(64>>5) //2
console.log(13>>2) //3
console.log(-13<<2) //-52
console.log(9<<4) //144
console.log(255&85) //85
console.log(~15) //-16
console.log(~-15) //14
二、三目(三元)运算符 ? :
a=10
if(a>0){
alret("yes")
}else{
alret("no")
}
a>0? alret("yes"):alret("no")
三、js的内置对象
Date
Math
1、Date 日期对象
var d1=new Date() //当前时间
console.log(d1.getDate()) //日
console.log(d1.getDay()) //星期 1234560
console.log(d1.getHours()) //小时1...23 0
console.log(d1.getMinutes()) //分钟1... 59 0
console.log(d1.getMonth()) //月0...11
console.log(d1.getSeconds()) //秒1...59 0
console.log(d1.getTime()) //返回1970.1.1午夜(零时)开始到当前时间的“毫秒”数
console.log(d1.getFullYear()) //年
//计算长这么大,经历了多少天
var d1=new Date()
var a=new Date("2001-7-25")
console.log(parseInt((d1-a))/(1000*60*60*24))
function formatDate(type){
var d1=new Date()
console.log(d1.getFullYear()+"-"+d1.getMonth()+1+"-"+d1.getDate())
}
var ndate=formatDate("-")
格式话日期对象
console.log(d1.toLocaleDateString())//2022/7/1
console.log(d1.toLocaleString()) //2022/7/1 11:22:53
console.log(d1.toLocaleTimeString())//11:22:53
2022-07-01
2022年7月1日
formatDate("-")------2022-07-01
formatDate("/")------2022/07/01
formatDate("zh")------2022年7月1日
formatDate(".")------2022.07.01
Date.prototype.formDate=function(type){
var d1=new Date()
if(type=="-"){
alert(d1.getFullYear()+"-"+d1.getMonth()+1+"-"+d1.getDate())
}else if(type=="/"){
alert(d1.getFullYear()+"/"+d1.getMonth()+1+"/"+d1.getDate())
}else if(type=="zh"){
alert(d1.getFullYear()+"年"+d1.getMonth()+1+"月"+d1.getDate()+"日")
}else if(type=="."){
alert(d1.getFullYear()+"."+d1.getMonth()+1+"."+d1.getDate())
}
}
----原型封装----
对象:属性、方法
日期格式化---升级版
formatdate("yyyy-MM-dd hh:mm:ss")
//方法1
function formatdate(fmt){
var d=new Date()
var reg=/(y+)-(M+)-(d+) (h+):(m+):(s+)/
if(reg.test(fmt)){
fmt=fmt.replace(RegExp.$1,d.getFullYear())
fmt=fmt.replace(RegExp.$2,d.getMonth()+1)
fmt=fmt.replace(RegExp.$3,d.getDate())
fmt=fmt.replace(RegExp.$4,d.getHours())
fmt=fmt.replace(RegExp.$5,d.getMinutes())
fmt=fmt.replace(RegExp.$6,d.getSeconds())
console.log(fmt)
}
}
formatdate("yyyy-MM-dd hh:mm:ss")
//方法2
function formatdate(fmt){
var d=new Date()
var dreg={"y+":d.getFullYear(),
"M+":d.getMonth()+1,
"d+":d.getDate(),
"h+":d.getHours(),
"m+":d.getMinutes(),
"s+":d.getSeconds()}
for(var k1 in dreg){
//k1,dreg[k1]
//字符串转换正则
// new RegExp("("+k1+")") // /(y+)/
if(new RegExp("("+k1+")").test(fmt)){
fmt=fmt.replace(RegExp.$1,dreg[k1])
}
}
return fmt
}
var ndate= formatdate("yyyy-MM-dd hh:mm:ss")
alert(ndate)
//方法3
Date.prototype.formatdate=function(fmt){
var dreg={"y+":this.getFullYear(),
"M+":this.getMonth()+1,
"d+":this.getDate(),
"h+":this.getHours(),
"m+":this.getMinutes(),
"s+":this.getSeconds()}
for(var k1 in dreg){
if(new RegExp("("+k1+")").test(fmt)){
fmt=fmt.replace(RegExp.$1,dreg[k1])
}
}
return fmt
}
var ndate=new Date().formatdate("yyyy-MM-dd hh:mm:ss")
alert(ndate)