跳到主要内容

JavaScript 运算符和事件

运算符的定义和分类

👉 运算符,也称为操作符,对值进行运算。

👉 表达式,由运算符,字面量或变量组合的式子。

👉 返回值,表达式运算的结果。

算术运算符

算术运算符描述
+
-
*
/
%取余

运算优先级

1️⃣ 小括号() 最优先

2️⃣ 先乘除,后加减

3️⃣ 取余比乘除低,比加减高

const result1 = (33 * 3) % 2
console.log(result1) // 1

const result2 = 33 + (3 % 2)
console.log(result2) // 34

💡 生产环境优先的运算都会用小括号

浮点数运算的精度问题

浮点数最高支持 17 位小数,算术运算时会有精度问题。

console.log(0.1 + 0.2) // 0.30000000000000004
console.log(0.07 * 100) // 7.000000000000001

🔗 解决方案见:浮点数

自增和自减

++ 可以让变量自增 1

let a = 1
a++
console.log(a) // 2

let b = 1
++b
console.log(b) // 2
  • a++ 是先用再加
  • ++b 是先加再用
let a = 1
console.log(a++) // 1
console.log(a) // 2

let b = 1
console.log(++b) // 2
console.log(b) // 2

console.log(a++) 这条表达式中,等价于 console.log(a); a = a + 1;


同理,自减是 --

一元运算符

typeof

打印类型。

let a = 1
console.log(typeof a) // number

+

  • 对于正数不会有影响
  • 对于其他类型,可以隐式转换为 number 类型
let a = 1
let b = +a
console.log(b) // 1

let c = '1'
let d = +c
console.log(d) // 1

-

对数字取负。

布尔运算

&&

||

! 取反

非布尔值的运算

非布尔值运算的过程中,先隐式转换为布尔值比较,最终结果返回原值。

console.log(1 && 2) // 2
console.log(0 && 2) // 0
console.log(1 || 0) // 1
console.log(0 || 2) // 2

非布尔值的 ! 运算

const a = 1
const b = !a
console.log(b) // false
console.log(typeof b) // boolean

赋值运算符

a += 5 等价于 a = a + 5

a -= 5 等价于 a = a - 5

a *= 5 等价于 a = a * 5

a /= 5 等价于 a = a / 5

a %= 5 等价于 a = a % 5

Unicode 编码

在字符串中可以使用 Unicode 编码。

console.log('\u2600') // ☀
console.log('\u2602') // ☂

😈 在一些网站中,可能会设置拦截恶意字符 * ,但此时 hacker 可能用 unicode 编码取绕开这个限制。

事件句柄

属性事件FFNIE
onabort图像加载被中断134
onblur元素失去焦点123
onchange改变内容123
onclick点击某个对象123
ondblclick双击某个对象144
onerror加载文档或图像发生错误134
onfocus元素获得焦点123
onkeydown某个键盘的键被按下143
onkeypress某个键盘的键被按下或按住143
onkeyup蒙恩键盘的键被松开143
onload某个页面或图像加载完毕123
onmousedown某个鼠标按键被按下144
onmousemove鼠标移动163
onmouseout鼠标从某元素移开144
onmouseover鼠标移动到某元素之上123
onmouseup鼠标按键被松开144
onreset重置按钮被点击134
onresize窗口或框架被调整尺寸144
onselect文本被选定123
onsubmit提交按钮被点击123
onunload用户退出页面123