运算符的常见问题

运算符的常见问题

1、算数运算符常见问题

(1)运算浮点时运算会有误差(二进制精度问题影响)。

(2)算术运算符中前后有字符串的出现且有+运算符的情况下则一般会完成字符串的拼接。

(3)如果运算过程中没有字符串且使用+运算符的情况下,其他类型都会转换为Number类型并进行加法运算。

(4)所有类型遇到 - * / % 运算符时,都会隐式转换为数值,然后进行计算。

2、一元运算符和赋值运算符
赋值运算符:
var a = 3;
a += "";

(1)会利用隐式转换完成字符串的拼接。

var a = 5;
var b = a+5+(a+=5);

(2)优先级问题:优先级低的无法直接排在优先级高的后直接运算,通常需要加()来解决问题,不然代码会出现报错。

(3)当进行左移位或者右移位时先转换为二进制。

(4)赋值运算符优先级非常低。

一元运算符:

(1)a++与++a的问题。

从结果来说对于a他们的计算结果相同。

但在两者同时用于计算时,a++时将a先参与运算或者赋值,而++a是将a加1后的结果先参与运算或者赋值。

(2)对于 " ++ " 和 " – " 来说通常都会直接使用算数运算符来处理,一般情况下先转化为数值,然后在进行运算。

var a = 3;
var b = a+++a+++a+a+a+++a+++a;
var c = a+++(a+=a)+a++;

他们的结果都是一定的。

3、关系运算符与逻辑运算符
关系运算符:

(1)它不一定只用于比较两者之间关系,还可以参与计算。

var a=3,
    b=4,
    c=5;
 c+= a<b;

(2)== 优先转换为数值然后进行比较

console.log(0=='')  true
console.log(false=='')  true
console.log(0==false)  true

特殊

console.log(null==undefined)  true

只有null与undefined比较才是true,其余都为false。

console.log(NaN==NaN)  false

NaN为唯一存在的值,它无法与自身相等,因为它可能是任何一个值。

逻辑运算符

(1)&& 的一些用法

true && true = (第二个值)

true && false = (第二个值)

false && true = (第一个值)

false && false = (第一个值)

例如:

console.log(3&&0); 0
console.log(3&&4);  4
console.log(""&&0); ""

(2)|| 的一些用法

true || true = (第一个值)

true || false = (第一个值)

false || true = (第二个值)

false || false = (第二个值)

var obj;
obj = obj || {a:1}

若obj转换为布尔的值为true,则直接熔断。

如果为false则取第二个值。

位运算

主要用于专项代码,代码不易被看懂。

(1)&运算

特点: 1 & 1 = 1, 1 & 0 = 0,

​ 0 & 1 = 0, 0 & 0 = 0.

25 & 34 = 0//25 转化为二进制为 011001;
//34 转换为二进制为 100010;
//   所以计算结果为 000000;
6 & 7 = 7;
37 & 7 = 5;

任何与2^n-1为原数值。(二进制转化所剩后几位时)。

(2)|运算

特点: 1 | 1 = 1, 0 | 1 = 1,

​ 1 | 0 = 1, 0 | 0 = 0.

25 | 34 = 59//25 转化为二进制为 011001;
//34 转换为二进制为 100010;
//   所以计算结果为 111011;3*16+11=59.

(3)^异或运算

特点: 1 ^ 1 = 0, 0 ^ 1 = 1,

​ 1 ^ 0 = 1, 0 ^ 0 = 0.

6 ^ 7 = 1;
// 110 ^ 111 = 001

(4)~位非运算

特点:加1取负数

~1 = -2

(5)<< >> 左移右移

a<<b 将a的二进制向左移动b个单位,右边用0填充。

a>>b 将a的二进制向右移动b个单位,并丢弃被移位的值。

(6)三目运算

var a = 3>2 ? 1 : 0;

判断条件是否成立,如果成立返回第一个值,否则返回第二个值。

或者说若转换布尔为真则返回第一个值,否则返回第二个值。

注:

问号前的内容会隐式转换为布尔值

三目运算比赋值运算高

当需要返回是布尔值时,不需要用三目运算。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值