转载请注明出处,未经同意,不可修改文章内容。
🔥🔥🔥“前端一万小时”两大明星专栏——“从零基础到轻松就业”、“前端面试刷题”,已于本月大改版,合二为一,干货满满,欢迎点击公众号菜单栏各模块了解。
涉及面试题:
1. NaN 是什么?有什么特别之处?
2. == 与 === 有什么区别?
3. console.log(1+"2") 和 console.log(1-"2") 的打印结果?
4. 为什么 console.log(0.2+0.1==0.3) 输出 false ?
5. 请用三元运算符(问号冒号表达式)改写以下代码:
if(a > 10) {
b = a
}else {
b = a - 2
}
6. 以下代码输出的结果是?
var a = 1;
a+++a;
typeof a+2;
7. 以下代码输出什么?
var d = a = 3, b = 4
console.log(d)
8. 以下代码输出什么?
var d = (a = 3, b = 4)
console.log(d)
9. 以下代码输出结果是?为什么?
var a = 1, b = 2, c = 3;
var val = typeof a + b || c >0
console.log(val)
var d = 5;
var data = d ==5 && console.log('bb')
console.log(data)
var data2 = d = 0 || console.log('haha')
console.log(data2)
var x = !!"Hello" + (!"world", !!"from here!!");
console.log(x)
10. 以下代码输出结果是?为什么?
var a = 1;
var b = 3;
console.log( a+++b );
11. 以下代码输出的结果是?为什么?
console.log(1+1);
console.log("2"+"4");
console.log(2+"4");
console.log(+"4");
12. var a = b = 3; 相当于?
❌ var a; var b; a = b; b = 3;
✅ var a; b = 3; a = b;
✅ var a = (b = 3)
❌ var (a = b) = 3
13. 以下说法正确的是?
✅ a++ 是一个表达式,表达式的值就是 a 原始的值, 之后 a 本身再自增 1。
✅ b = a++ 相当于 b = a; a++
❌ b = a++ 相当于 a = a + 1; b = a;
✅ b = ++a 相当于 b = (a = a + 1)
编号:[js_02]
前言: 上篇文章我们提到了“表达式”,而运算符的作用主要就是用于连接简单表达式,以组成一个复杂表达式。与运算符相关的知识点不算多,结合一些常识,细读本篇,我们会打好这个小基础。
-
调试(针对 Chrome 浏览器)
鼠标操作:右键 --> 检查 --> Console -
快捷键操作:
Windows 系统:F12
macOS 系统:command + option + i
1 常用运算符
- 算术运算符
- 赋值运算符
- 比较运算符
- 布尔运算符
- 三目运算符
- 其他
1.1 算术运算符
算术运算符可以细分为:
+ // 加法运算符
- // 减法运算符
* // 乘法运算符
/ // 除法运算符
% // 余数运算符
++ // 自增运算符
-- // 自减运算符
1.1.1 加法运算符
把两个简单表达式(操作数)用“加号运算符”连接时:
- 如果两个操作数都是“数字”的时候,做加法运算。
console.log(1 + 2)
// 3
- 如果两个操作数都是“字符串”或其中有一个是“字符串”的时候,都转化为字符串,做字符串的拼接处理。
console.log("1" + "2")
// "12"
console.log("1" + 2)
// "12" ❗️注意结果的读法:不是连读的数字 12,而是 1 和 2 分开读。
console.log(1 + "Oli")
// "1Oli"
console.log("Oli" + "cool")
// "Olicool"
- 如果只有 一个“字符串” 操作数的时候,会尝试将这个“字符串”转换为 “数字”。
console.log(+ "1")
// 1
- 如果只有 一个“字符串” 操作数的时候,会尝试将这个“字符串”转换为 “数字”,但如果“字符串”无法转换为数字,则显示结果为:NaN。
(💡NaN ——not a number :表示为“不是数字的数字”。所以可以理解为:它也是一个数字类型,不过它不是一个有效的数,表示为错误数字!)
(❗️ 注意:NaN 和 NaN 是不相等的,即 NaN 与自己不相等。)
console.log(+ "Oli")
// NaN
- 如果操作数其中一个或两个是 “对象”,则调用对象的
.valueOf或.toString方法(❗️ 两者同时使用时,注意优先级,valueOf的优先级高于toString)。
(💡暂时先了解,混个眼熟,后边的文章会详解~)
var obj = {
toString: function() {
return "hello"
},
valueOf: function() {
return 1
}
}
console.log(obj + "Oli")
// "1Oli"
🆚
var obj = {
toString: function() {
return "hello"
}
}
console.log(obj + "Oli")
// "helloOli"
1.1.2 “减、乘、除”运算符
会尽可能地将“字符串”转换为“数字”,如果转换不了“数字”,则得出结果为:NaN 。
1.1.3 余数运算符
(💡这个运算符主要用于“循环语句”!)
console.log(100 % 3)
// 1
1.1.4 自增运算符
(着重讲自增运算符,自减运算符同理!)
x++
++x
x++作为 “表达式” 的结果是 x 本身的值;x++作为同一作用域中的下一个“变量”,则是 x 内部又自增了 1,即x = x + 1;++x表示:自增后下一个变量 x 的值。
var a = 1;
var b = a++;
console.log(a)
// 2
console.log(b)
// 1
var c = ++a;
console.log(a)
// 3
console.log(b)
// 1
console.log(c)
// 3
1.2 赋值运算符
x += y // 等同于 x = x + y
x -= y // 等同于 x = x - y
x *= y // 等同于 x = x * y
x /= y // 等同于 x = x / y
x %= y // 等同于 x = x % y
x &= y // 等同于 x = x & y
x |= y // 等同于 x = x | y
1.3 布尔运算符
布尔运算符用于结果为 true 或 false 的布尔表达式中。
有两种布尔运算符:“比较运算符”和“逻辑运算符”。
- 比较运算符: 比较运算符比较两个值,然后返回一个布尔值(true 或 false),表示是否满足比较条件。
JS 提供了 9 种比较运算符:
1.3.1 = 赋值
= 为“赋值运算符”,表示把 = 后边的表达式的值赋值给 = 前边的表达式。
var a;
var b = "Oli";
var c = a = b;
console.log(c)
// "Oli"
1.3.2 == 相等
这里的“相等”是 “近似相等”,后台得到的值是 true 或 false 。
如“数字”和“字符”串的比较,后台会将字符串做一个类型转换:
var aa = "3";
var bb = 3;
console.log(aa == bb)
// true
1.3.3 === 绝对相等
这里的相等是“绝对相等”,即类型和值都必须相等。
1.3.4 != 不相等
1.3.5 !== 严格不相等
1.3.6 < 小于
1.3.7 <= 小于等于
1.3.8 > 大于
1.3.9 >= 大于等于
- 逻辑运算符:
逻辑运算符将两个布尔表达式合二为一,得到一个布尔结果(true 或 false)。
| 运算符 | 描述 |
|---|---|
| || | 表示“或”,只要至少有一个表达式为 true,结果就为 true。 |
| && | 表示“与”,仅当两个表达式都为 true 时,结果才为 true。 |
| ! | 表示“非”,仅当表达式为 false 时,结果才为 true 。 |
1.4 三目运算符
三目运算符的语法规则为:
Condition ? true case : false case
- 这里有一个 “条件判断”,如果“条件判断”为真,则整个表达式的结果就是 true case 执行的结果;
- 如果“条件判断”为假,则整个表达式的结果就是 false case 执行的结果。
例如,将下面的代码用“三目运算符”改写:
if(a > 10) {
b = a;
}else {
b = a - 2;
}
用“三目运算符”简写为:
b = a>10 ? a : a-2
1.5 其他运算符
1.5.1 小括号
()
在 JS 中,小括号是一种运算符,它有两种用法:
- 如果把表达式放在小括号中,作用是“求值”;
- 如果跟在“函数”的后面,作用是“调用函数”。
1.5.2 void
void 运算符的作用是:执行一个表达式,然后返回 undefined。
(💡具体用途,后边综合使用时再介绍,这里先混混眼熟!)
void 1;
// undefined
void 2;
// undefined
1.5.3 逗号运算符
“逗号运算符”用于对两个表达式求值,并返回后一个表达式的值。
例如:
var a = 1;
var b = 2;
var c = (a, b);
console.log(c)
// 2
1.5.4 typeof 运算符
typeof 运算符常用于判断数据的类型(💡下篇文章会着重讲解 typeof 的用法)。
2 运算符的“优先级”和“结合性”
优先级: 运算符的“优先级”决定了表达式中运算执行的先后顺序,优先级高的运算符最先被执行。
结合性:“结合性”决定了拥有相同优先级的运算符的执行顺序。
- 有的运算符是 “左”结合,即运算从左到右执行:
x = a + b + c;
x = (a + b) + c;
- 有的运算符是**“右”结合**,即运算从右到左执行:
x = a = b = c;
x = (a = (b = c));
🏆 以下表格取自《JavaScript 权威指南》,从上到下表示运算符的“优先级”。R/L 代表相同优先级运算符的“结合性”是“右结合”还是“左结合”:
后记: 与“运算符”相关的知识点,我们很多都可以通过数学常识去掌握。对于生疏的,我们要勤于在开发工具上去调试、去试错。动起手来,一步一个脚印走踏实!
祝好,qdywxs ♥ you!