做了个丑丑的封面
第三章真的好多,但是有些又很基础有点乏味,最近有点事又很忙,呜呜~更文慢了所以分了2部分来写,不然上一篇要拖好久了
只能操作一个值的操作符叫一元操作符
前置型:++(--)值
先递增(递减),后执行语句
后置型:值++(–) 先使用值执行语句,再递增(递减)
i++
++i
注意:布尔值++时 false 会变成 1
在应用于对象时,先调用对象的valueOf()
方法来取得一个可供操作的值,然后在对该值调用前述规则。如果结果是NaN
,则在调用toString()
方法后再应用前述规则
当加的值是非数值时,则会执行与使用 Number()
转型函数一样的类型转换
一元减同理
let str = "ljc";
str = -str; //NaN
用按位非操作符(~
),执行按位非的结果就是数值的反码
也可以理解为操作数的负数再减1
let num1 = 25;
let num2 = ~num1; // -26
用按位与操作符(&
),操作两个数,将两个数的二进制比对,同时为1的位数才为1
let result = 25 & 3;
// 结果为 1
用按位或操作符(|
),操作两个数,有 1 则 1
let result = 25 | 3;
// 结果为27
用按位异或操作符(^
),操作两个数,当两位都不同才为 1
let result = 25 ^ 3;
// 结果为 26
用左移操作符(<<
)
右移操作符(>>
)
怎么理解呢?
我是这么理解的,右移,左边补0,把右边的值挤出了32个位置
无符号右移(>>>
)
对于负数,太难了
似乎是将反码的值当成右移前的初值,再正常移
逻辑非操作符(!
)
逻辑与操作符(&&
),操作两个值,同为true
才为true
逻辑或操作符(||
),有true
则true
如果参与乘性计算的某个操作数不是数值,后台会先使用Number()
转型函数将其转化为数值。即空字符串被当做 0 ,布尔值 true
被当做为 1
*
)乘法运算
Infinity
与0相乘,则结果是NaN
Infinity
与非0数值相乘,则结果是Infinity
或-Infinity
,取决于有符号操作数的符号
/
)NaN
Infinity
被任何非零数值除,则结果是Infinity
或-Infinity
,取决于有符号操作数的符号
%
)求模操作符
采用Math.pow
console.log(Math.pow(3, 2); // 9
+
)-
)let result = "Brick" < "alphabet"; // true
判断全等还会比较数据类型是否相等
let result2 = ("55" === 55); // false,不相等,因为数据类型不同
就是三元运算符(?::)
let variable = boolean_expression ? true_value : false_value;
当第一个表达式为真时,variable
的值为true_value
,为假则为false_value
这个东西基本不用但是一些坏蛋面试题里会有
逗号操作符总会返回表达式中的最后一项
let num = (5, 1, 4, 8, 0); // num 的值为 0
if (condition) statement1 else statement2
循环体内的代码至少执行一次
// 只要i 小于10,循环就会重复执行。i 从 0 开始,每次循环递增 1。
let i = 0;
do {
i += 1;
} while (i < 10);
// 变量i 从0 开始,每次循环递增1。只要i 小于10,循环就会继续
let i = 0;
while (i < 10) {
i += 1;
}
先测试代码,进入循环前会先初始化代码
let count = 10;
for (let i = 0; i < count; i++) {
console.log(i);
}
初始化,条件表达式,循环后表达式都不是必要的
for (;;) { // 无穷循环
doSomething();
}
1)遍历数组里的所有数组元素
2)遍历 JavaScript 对象的所有属性
for (index in object)
{
statement
}
当遍历数组时,for in 循环的循环计数器是数组元素的索引值
与 for-in 的本质区别在于,for-of 遍历的是数组或对象的属性值(value)
let arr = [1, '2', null, 3, undefined, '4'];
for(let i of arr){
console.log(i);
}
// 1 2 null 3 undefined 4
给 for 语句添加一个start
标签,可以通过 break 语句跳到指定的标签位置
start: for (let i = 0; i < count; i++) {
console.log(i);
}
outermost:for(){}
break outermost;
大概就是这样实现跳到指定位置
其他用法相同
with 语句的用途是将代码作用域设置为特定的对象
let qs = location.search.substring(1);
let hostName = location.hostname;
let url = location.href;
等价于
with(location) {
let qs = search.substring(1);
let hostName = hostname;
let url = href;
}
少写了一些代码,不推荐使用
switch 语句可以简化复杂的 if 语句
放一个瞅瞅,看看语法
let num = 25;
switch (true) {
case num < 0:
console.log("Less than 0.");
break;
case num >= 0 && num <= 10:
console.log("Between 0 and 10.");
break;
case num > 10 && num <= 20:
console.log("Between 10 and 20.");
break;
default:
console.log("More than 20.");
}
switch 语句在比较每个条件的值时,会使用全等操作符,因此不会强制转换数据类型(比如,字符串"10"不等于数值10)。
这里的函数只是简单的用法,没什么好说的,到第十章有专题
不指定返回值的函数实际上会返回特殊值 undefined。