30-【JS全解】JS运算符

1.number运算

加减乘除:9/0 Infinity -5/0 -Infinity

余数:-1%7 -1

指数:**

自增自减:表达式a++的值是加之前的值,++a是加之后的值**(a在前,值为前,a在后,值为后)**

少用自增和自减,用a+=1,只在for循环里用a++

let a=1
++a
2
a++
2
a
3

求值运算符: + +(-8)//-8

负数运算符:- -(-8)//8

2.string运算符(只支持+)

连接运算符 +

对于数字+运算符,会把数字改运算符

对于数字-运算符,会把运算符改数字,因为只支持减号

所以不同运算符少运算一起

123+'123'
"123123"
123-'123'
0

3.比较运算符

js三位一体 ==

0=='0'
true
0==[]
true
0=='\t'
true
[]=='0'
false
[]=='\t'
false
'0'=='\t'
false

所以永远不要用==,用全等

x==y真值表难理解的几个点:

[]是真的,但是不等于true []==true //false

空数组是false,空对象却不是false

({})==false
false
[]==false
true

x===y真值表规则

  • 相同类型看值是否相等

  • 对象看地址是否相等,内存图

    []===[]
    false
    {}==={}
    false
    NaN===NaN
    false
    

4.布尔运算符

**防御性编程:**短路逻辑

防止不存在console报错,为假便停止,为真打下一个

console&&console.log&&console.log(‘hi’ )

console=undefined

console.log('hi')
VM1034:1 Uncaught TypeError: Cannot read property 'log' of undefined
    at <anonymous>:1:9
(anonymous) @ VM1034:1

if(console){
console.log('hi')
}

console={}

if(console){
if(console.log){
console.log('hi')
}
}

a的保底值

a||100 a保底值是100

解决空判断失误问题最新语法:主要是null和undefined为0

function add(n=0){
return n+1
}

add(null)
1
add(undefined)
1
add(’’)
“1”

function f1(n){
if(!n){n=0}
return n+1
}
undefined
function f1(n){
n||n+1
}
undefined
function add(n=0){
return n+1
}
undefined

5.二进制运算符

  • 与运算 垂直运算,二进制数都为1才是1

    (0b0001 & 0b1111).toString(2)
    “1” 是0001

  • 或运算 | 垂直运算,有一个1就是1,都是0才是0

    0b0001
    1
    0b0001 |0b1111
    15
    (0b0001 |0b1111).toString(2) //用十进制转成二进制 字符串表示二进制
    “1111”

  • 否运算 ~ 会以补码方式

规律:十进制结果+二进制数的十进制数的相反数=—1

例子:0b0011的10进制数为3, 3+(-4)=-1,所以结果十进制数为-4,转成二进制-0100

~0b0011
-4
(~0b0011).toString(2)
"-100"
  • 异或 ^ 相同的为0,不同则为1
0b0001 ^0b1101
12
(0b0001 ^0b1101).toString(2)
"1100"
  • 左移运算符<<和右移运算符 >> 二进制数
(0b0110 >>1).toString(2)
"11"
(0b0110 >>2).toString(2)
"1"
(0b0110 <<1).toString(2)
"1100"
  • 头部补零的右移运算符>>>

    正数下基本和右移一样

6.二进制运算符的运用

  • 二进制运算符判断奇偶

    1的最后一位是1,其余都是0,偶数最后一位是0,与1结合是0,因为都是1才为1

    偶数&1=0

    奇数&1=1

    0b0001&1
    1
    0b0010&1
    0
    
  • 使用~~,>>,>>>,<<,|来取整

~~ 6.11
6
(~~ 6.11).toString(2)
"110"
6.83>>0
6
6.83>>>0
6
6.83<<0
6
6.83|0
6
  • 用^来交换a,b的值 相同为0

    常用:[a,b]=[b,a]

    步骤:a=b;b=a;a^=b

    a=0b0010
    2
    b=0b0110
    6
    a^=b
    4
    b^=a
    2
    a^=b
    6
    a
    6
    b
    2
    

7.其他运算符

点运算符 .

对象.属性名=属性值 读取对象属性值

对于非对象,会转换成对象,例如Number对象,不要用Number\String\Boolean对象

他做了三件事:创建一个封装对象,封装对象来操作,然后滚了

var a=1
undefined
a.xxx='frank'
"frank"
a.xxx 
undefined
//a.xxx用完被扔了

同理

a='1,2,3'
"1,2,3"
a.split(',')
(3) ["1", "2", "3"]
void运算符

void 语句/表达式

计算值或者执行语句,然后返回undefined

如:点击标签不跳转

<a href='javascript:;' onclick="console.log('hi')">百度一下<a>
逗号运算符

表达式1,表达式2,表达式3

如a=(1,2,3)

作用:把表达式n的值作为整体的值,如果是函数为返回值

a=(1,2,3)
3
a
3

实现箭头函数,不用return和{}执行两个语句,用逗号运算符

要用括号包住

let f=x=>(console.log('hi'),x*x)

f(2)
'hi'
4

8.运算符优先级

  • 不同运算符

圆括号运算符优先级,逗号是最低的

因为运算符优先级太多了,常用括号把需要优先的括起来

!(a===1)
true
(!a)===1
false
a
2
  • 相同运算符

从左到右:a+b+c

从右到左:a=b=c=d=2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值