操作符
在应用给对象的时候,采用的是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 != 0、undefined != 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的话,则不执行循环,因此特别好用,比如在Vue的v-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以及代码复盘问题。希望各位大佬多加鼓励。