JavaScript【运算符特性】【损失精度】

运算损失精度的问题

JavaScript在进行浮点数运算的时候会有精度丢失的问题;eg:0.1 + 0.2 = 0.3000000000004;那么为什么会造成这种情况呢,原因是,把浮点数转化为二进制机器码,然后再转换成十进制的数值的时候有精度的损失,而这个差值在我们JavaScript中,给算上了,因此0.1 + 0.2 != 0.3;

怎么解决精度的问题呢?

可以同时先把他变成一个整数,比如所*10 *1000 *1000…再进行运算,运算结束以后再除回来。

var num1 = 0.1;
var num2 = 0.2; 
document.write(num1 + num2); // 0.30000000000000004
document.write((num1 * 100 + num2 * 100) / 100); // 0.3

运算符特性:

双等于号具有自动转字符类型的性质:

 document.write(2 == "2"); //  true   :双等于号会转型,把数字字符转化为数字类型
 document.write(2 === "2"); // false  全等于号是是会判断数据类型的。数值型不等于字符串类型

逻辑运算符:
如果在逻辑运算中,逻辑运算符左边的值就能确定整个式子的结果的话,那么就不会再往下看了。有以下两种情况:

  1. &&运算中,左边第一个是false,那么就不会再计算右边的式子,此时直接输出结果。
  2. || 运算中,左边第一个值是true,那么程序也就不会再计算或运算符右边的式子,此时直接输出结果。
// 逻辑与短路运算结果的特性:
<script>
        document.write(21 && 15); //如果表达式一为真则 输出后面表达式二的值15
        document.write(0 && 15); //如果前面表达式一为假 则输出前面表达式一的0
        // 都有哪些是假呢?     eg: 0 null undefined  ' '(空字符串)  NaN
</script>

// 逻辑或短路运算结果的特性:
<script>
        document.write(21 || 15); // 如果表达式一位真,那么就输出表达式一 21
        document.write(0 || 15); //如果表达式一位假,那么就输出表达式二 15
</script>


// 逻辑或影响运算的例子:
<script>
        var num = 0;
        document.write(123 || num++); // 123
        document.write(num); // 是1么?不是!  答案是:0  ;此时并没有自增,因为逻辑中断了
</script>

以上情况被称为:逻辑中断(短路运算);

运算符的优先级

  1. 小括号:()
  2. 一元运算符 也就是 只有自己一个式子运算 eg: num++ , ++num
  3. 算数运算符: 先乘除 再加减
  4. 关系运算符: 大于 大于等于 小于 小于等于
  5. 相等运算符:== != === !==
  6. 逻辑运算符:&& ||(先与再非)
  7. 赋值运算符: ==
  8. 逗号运算符:,

总结:优先级括号最大;逗号最小…


运算符优先级例题:
// 计算:
console.log(4 >= 6 || '你' != '帅哥' && !(12 * 2 == 144) && true);  

结果等于什么呢?怎么运算呢?

首先我们先划分一下,我们能看到有逻辑&&与||这两个的优先级是最低的,那么以它们为界分成四部分。是不是有思路了...此时也不要大意,不能先算前面的4 >= 6应该先算后面的三个式子,为什么呢?因为在逻辑&&的优先级大于逻辑||。

在这里插入图片描述
以上运算过程为:

方程的形式写出来:
=  false || true && true && true && true                   (&&优先级大于||)
=  false || true
=  true

最后再来两道题吧…

console.log('敲代码'||'出去玩');
console.log('出去玩'&&'敲代码');

                                    // 他们的结果是?... 
                                    
结果都是: “敲代码”

或运算第一个为真就不用往后面看了
与运算第一个为真那就直接输出第二个值

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值