算数运算符

1.算数运算符

任何一个表达式都是具备返回结果的

var y = x = 4;
console.log(y,x) // 4,4+
// 先把x=4的结果赋值给y
// 然后再将 4 赋值给 x

加法运算

任意类型和字符串进行相加时,会将任意类型的隐式转换为字符,然后首位相连

var x = 1;
console.log(!x + 'aa') // falseaa
console.log({a:1;b:2} + 'aa' == {} + 'aa') //true
console.log([1,2,3] + 4) //1,2,3,4
console.log([1] + 4) //14

+ !(非) 先隐式转换为布尔值,然后再取反

除了加法以外,任意类型 - * / %(取模) 都优先隐式转换为数值运算

console.log('10'/null) //Infinity
console.log([10]/2) //5
console.log([]/2) //0
console.log(![10] / 2) //0
console.log(![]/2) //0
var x = 4;
console.log(x - (x + 5) + (x - "a")) //NaN
console.log(x - (x + 5) + '' + (x - "a")) //-5NaN

2.赋值运算符和一元运算符

赋值运算符

var a = 3;
a += 4;
//这个4就是步长,与+ - * / 运算符一致
var b = a += 1 + "a"
consloe.log(b,a) //41a 41a 

数值转换为字符串:a+="";字符串转换为数值:b-=0

赋值运算符的优先级基本最低,除了,之外

一元运算符

一元运算符都会按照数值运算

var x = "4"
consloe.log(x+=1) // 41
consloe.log(x++) //5

赋值运算符与一元运算符都是赋值处理,因此应该是变量运算。

console.log(5++) // 报错:Uncaught SyntaxError: Invalid left-hand side expression in postfix operation

3.关系运算符

关系运算符返回的是布尔值

在关系运算符中,会隐式转换为数值类型

NaN与任何数值比较时都是false

两个字符串比较时,会转换为Unicode编码进行比较

console.log('a'>'b') //false
console.log(true > undefined) //false
console.log([]>-2) //true
console.log(![]>0) //false
console.log(![]<[]) //true

==:隐式转换两侧为相同类型后比较

===:不转换直接比较

0 == false
0 == ""
"" == false
//这三个都会先隐式转换然后再进行比较
//undefined == null 但是不等于false 0 ""
// undefined == null 是用来判断变量是否有值

如果==比较时,两端的类型相同时,不隐式转换,直接比较

如果两端类型不同时,转换为对应的类型

var y = 3;
var x = y > 3
console.log(x)
//这个是用来判断x是否是大于3的,如果大于则结果为true,否则为false,等同于
if(y > 3){
   x = true
}else{
   x = false
}
// "" false 0  NaN undefined null
if(!x){
​
}
​
// null undefined
if(x==undefined){
​
}
​
// undefined
if(x===undefined){
​
}

4.逻辑运算符

&&运算符

true && true => true (返回最后一个的结果)

true && false =>false

false && true =>false

false && false =>false(当第一次遇到false的时候直接返回

返回结果:转换结果的值

console.log(3 && 5) //5
console.log(0 && "") //0
var x = 3
var y = x-3 && 6
console.log(y) //0
// 这个表示的是当x不等于3的时候,返回的就是后面的6,如果x等于3的时候,返回的就是0
// 这个类似于
if(x === 3){
   y = 0
}else{
   y = 6
}

||运算符

true || true => true (遇到true时直接返回)

true || false =>true

false || true =>true

false || false =>false(遇到false的时候继续向后查找,如果都没有,则返回最后一个结果

返回结果:转换结果的值

var o;
o = o || "a"
consloe.log(o)
// 这个相当于是 如果o的值存在,则返回o的值,否则返回另一个值
// 等同于
if(!o){
    o="a"
}
// 这种思想通常用于单例模式中,有则继续使用,没有则初始化

!运算符

5.位运算符(30位以内,4个字节)

&运算符(凸显0的特征)

1 & 1 =>1

1 & 0 =>0

0 & 1 =>0

0 & 0 =>0

先转换为2进制,然后一位一位的进行&运算,运算结束后,再转换为10进制

|运算符(凸显1的特征)

1 | 1 =>1

1 | 0 =>1

0 | 1 =>1

0 | 0 =>0

先转换为2进制,然后一位一位的进行|运算,运算结束后,再转换为10进制

^运算符

1 ^ 1 =>0

1 ^ 0 =>1

0 ^ 1 =>1

0 ^ 0 =>0

特点:

一个数X和另一个数Y的异或结果为Z,那么:

X^Y=Z

Y^Z=X

X^Z=Y

//根据这个特征,可以对密码进行加密

String.fromCharCode(数字) //将Unicode编码转换为字符串
字符串.charCodeAt(索引) //将第几个字符串转换为Unicode编码

先转换为2进制,然后一位一位的进行^运算,运算结束后,再转换为10进制

~运算符

~运算符:(位非运算符):加1取负

console.log(~5) //-6
console.log(~-8) //7

~运算符还可以用于对数字的取整,并且不会四舍五入·(过长的数据不可以用)

console.log(~~4.5567) //4

位移运算符

1.<<(先转换为2进制再进行移动补0)

console.log(1<<8) //256=>2^8
console.log(1<<4) //16 =>2^4

2.>>(先转换为2进制,然后再从右向左消)

console.log(256>>6) //4
// 100000000B 从右向左消6位 得到 100B 然后再转换为10进制

6.条件运算符

variable = boolean_expression ? true_value : false_value;

 var x = 3;
 x+=5 ? x+=3 : 4;//三元运算符的优先级比赋值运算符的优先级高,所以先计算5 ? x+=3 : 4 得到x=6 然后再将6值+=给x
 console.log(x); //9

7.运算符的优先级

(1) . [] () 字段访问、数组下标、函数调用以及表达式分组
(2) ++ -- - ~ ! delete new typeof void  一元运算符、返回数据类型、对象创建、未定义值
(3) * / %   乘法、除法、取模
(4) + - +   加法、减法、字符串连接
(5) << >> >>>   移位
(6) < <= > >= instanceof    小于、小于等于、大于、大于等于、instanceof
(7) == != === !==   等于、不等于、严格相等、非严格相等
(8) &   按位与
(9) ^   按位异或
(10)  | 按位或
(11)  &&    逻辑与
(12)  ||    逻辑或
(13)  ?:    条件(三元)
(14)  = oP =    赋值、运算赋值
(15)  , 多重求值
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值