红宝书——章节读感(第三章 操作符、语句、总结)

262 阅读3分钟

操作符

在应用给对象的时候,采用的是valueOf() 和 toString()来取可计算的值。

一元操作符

递增、递减操作符

重点来了

    let num1 = 2;
    let num2 = 20;
    --num1 + num2  //就是1+20=21
    let num1 = 2;
    let num2 = 20;
    num1-- + num2  //就是2+20=22
    let o = {
        valueOf(){
            return -1;
        }
    }
    //对象构造值
    o--; //变为-2
    false--; // -1
    true--; // 0

一元加和减

也就是转化正负(用来转化数字,比较好用)

    +"01"   // 1
    +false  // 0
    -true // -1
    //个人经常用于一些逻辑判断的转换

位操作符

    let num= -18;
    num.toString(2); // "-10010"
    
    ~25     // -26  相当于-25-1  补数
    ~~undefined   // 0
    ~~NaN   // 0
    //类似的快捷还有
    !!"0"   //true

按位非

关键如上

按位与

两个位都是1才返回1,否则都是0

  • 111
  • 001             &
  • 就能得到如下
  • 001

按位或

只有1就能够返回1,两个0才返回0

  • 110
  • 010             |
  • 就能得到如下
  • 110

按位异或

既然有个异字,就表示需要看一样和不一样,异1同0
位值不一样返回1,一样返回0

  • 110
  • 010             ^
  • 就能得到如下
  • 100

左移

<<左移符号

有符号右移

>>右移符号

上面这两种符号可以用于看到了哪一步,并且采用true 还是 false
101 经过>> 就是010 表示1跑过了
想要返回上一步 010 经过<< 就是100
而且0刚好表示了初始化,具体看需求运用

无符号右移

>>>无符号右移

布尔操作符

逻辑非

    !!"0"Boolean("0")  一个道理

逻辑与

逻辑非

写代码多运用逻辑与的短路原理以及逻辑非的默认值原理

    let a = true && doSometing();
    let b = undefined || '没有值';

指数操作符

es7的特性,把Math.pow()转化为**

    Math.pow(3,2)  // 9
    3 ** 2         // 9
    Math.pow(16,0.5)  // 4
    16 ** 0.5         // 4

加性操作符

    5 + 5   // 10
    5 + "5" // "55"  //没办法转数字
    "5" + 5 // "55"

减性操作符

    5 - "2"  // 3
    5 - ""   // 0
    5 - null // 0

关系操作符

    undefined > 3  // false
    NaN > 3 // false
    //这两个值比较任何数都是false,容易采坑

相等操作符

==比较前都会进行强制类型转换,false转0,true转1,除了null和undefined。因此,null != 0undefined != 0
===比较的时候就不转换了

    null == undefined  // true
    NaN != NaN  //ture NaN与任何值都不相等

条件操作符

三元表达式经常用,不多说了。

赋值操作符

+= -= >>= <<=

逗号操作符

    let num1 = 1,num2 = 2;
    let num = (1, 2, 3)  //结果num为3

语句

if语句

作者在这里交代了条件代码中哪怕只有一行代码,也要使用代码块的编写方式

do-while语句

循环体内代码至少执行一次,适合在倒计时执行事件时候用,执行一次开始什么的

while语句

有可能一次都不会执行

for语句

for(let i=0; i<max; ++i){ ... }

for-in语句

    for(const propName in window){
        document.write(propName)
    }

如果for-in需要循环的变量是null或者undefined的话,则不执行循环,因此特别好用,比如在Vuev-for就可以肆无忌惮的用啦~~

break 和 continue 语句

重点来了
break和continue可以打标签的,方法如下

    let num = 0;
    outermost:
    for(let i = 0; i < 10; ++i){
        for(let j = 0; j<10; ++j){
            if(i == 5  && j == 5){
                break outermost;
            }
            num++;
        }
    }
    console.log(num); //55

一般如果没有打标记的话,break只会退出第一层,但是还是会走下去,num还是100,但是打了标记之后,break就会退到最外层。

    let num = 0;
    outermost:
    for(let i = 0; i < 10; ++i){
        for(let j = 0; j<10; ++j){
            if(i == 5  && j == 5){
                continue outermost;
            }
            num++;
        }
    }
    console.log(num); //95

也是标记到外面继续执行,因此少了i是5,j大于5的五种情况,因此100-5=95

with 语句

    with(location){
        let qs = search; //相当于 let qs = location.search;
    }

书中并不推荐使用,而且严格模式下不允许。

switch 语句

很少使用了,策略模式它不香吗?

函数

这一块后面细节在讲述,这一章节介绍会有重复。

总结

憋了这么多天,终于把基础章节熬出一篇来了。把握基础很重要,能写出更轻,更易懂的代码,从而减少开发bug以及代码复盘问题。希望各位大佬多加鼓励。