JavaScript 基础入门:深入理解 ECMAScript 核心运算符

键盘旁的猫
键盘旁的猫
发布时间:2026-10-16| 4人浏览过
原创

在 JavaScript 开发中,运算符是构建逻辑的基础。本文将系统梳理 ECMAScript 中的一元运算符、位运算和布尔运算符,包括 delete、void、逻辑短路等关键特性,通过代码示例展示其实际行为与边界条件。

一元运算符的操作机制

一元运算符仅针对一个操作数进行运算。在 JavaScript 中,常见的类型转换与内存管理运算符包括 delete、void 以及自增自减操作。

第1步:使用 delete 移除对象属性

delete 运算符用于删除对象中以前定义的属性或方法引用,但无法删除由浏览器内置或语言规范定义的不可配置属性。

var o = new Object;
o.name = "Nicholas";
o.show = function(){
    return "test";
};

console.log(o.name);      // outputs Nicholas
console.log(o.show());    // outputs test

delete o.name;
delete o.show;

console.log(o.name);       // outputs undefined
// console.log(o.show());  // TypeError: o.show is not a function

delete o.toString;
console.log(o.toString()); // outputs [object Object] (内部属性未被删除)

第2步:使用 void 避免链接默认行为

void 运算符对任何值都返回 undefined。它常配合 javascript: URI 协议使用,防止链接点击后页面跳转或输出意外内容。

<a href="javascript:void(window.open('about:blank'))">Click Me</a>

第3步:执行前/后自增与自减

自增 (++) 和自减 (--) 分为前缀和后缀形式。前缀式先增值后参与表达式计算;后缀式先参与计算,后增值。

// 前增量/减量
var iNum = 10;
console.log(++iNum); // outputs 11 (等同于 iNum = iNum + 1)
console.log(iNum);   // outputs 11
console.log(--iNum); // outputs 10

// 后增量/减量:先取值计算,后改变变量值
var num = 10;
console.log(num--); // outputs 9 (此时 num 变为 9)
console.log(num);   // outputs 9

第4步:利用一元正负号进行类型转换

一元加号 (+) 可将字符串转换为数字,类似于 parseInt() 或 Number(),但对以 "0x" 开头的字符串自动识别为十六进制。一元减号 (-) 则用于求负并触发类型转换。

var sNum = "50";
console.log(typeof sNum);        // outputs string
console.log(+sNum);              // outputs 50 (number)

var hexStr = "0xB";
console.log(-hexStr);            // outputs -11 (识别为十六进制)

var octStr = "017";
console.log(-octStr);            // outputs -17 (注意:ES5之后严格模式可能报错,通常按十进制处理需留意)

位运算的二进制处理规则

位运算符直接在数值的 32 位二进制形式上进行操作,适用于底层的位掩码处理及性能优化的场景。

第1步:执行按位 NOT (~) 运算

~ 运算符将数字转为 32 位二进制,取反后再转回浮点数。实质上等效于:-N - 1。

var iNum = 25;       // 00...00011001
var result = ~iNum;  // 11...11100110
console.log(result); // outputs -26 (等同于 -(25) - 1)

第2步:执行按位 AND (&)、OR (|) 和 XOR (^)

  • AND (&):两位均为 1 时结果为 1。
  • OR (|):一位为 1 结果即为 1。
  • XOR (^):只有一位为 1 时结果为 1。
var n1 = 25; // 00...00011001
var n2 = 3;  // 00...00000011

console.log(n1 & n2); // outputs 1 (仅最低位同为1)
console.log(n1 | n2); 
console.log(n1 ^ n2); // outputs 26 (差异位被标记)

第3步:使用移位运算符调整数值

  • 左移 (< < < code>):左侧丢弃,右侧补 0。相当于乘以 2 的幂。
  • 有符号右移 (> >):右侧丢弃,左侧补符号位。相当于除以 2 的幂。
  • 无符号右移 (> > >):右侧丢弃,左侧补 0。始终返回非负数。
console.log(2 << 5);     // outputs 64 (2 * 2^5)
console.log(64 >> 5);    // outputs 2 (64 / 2^5)

// 无符号右移处理负数
var neg = -2;
console.log(neg >>> 1);  // outputs 2147483647
// 解释:-2 的补码右移后,符号位变为 0,成为极大的正整数

布尔运算符与短路求值

逻辑运算符不仅用于判断真假,还涉及具体的返回值确定,且具备“短路”特性。

第1步:使用逻辑 NOT (!) 强制布尔化

! 将操作数转换为布尔值并取反。记住以下真理表:

  • 对象 → false
  • 0、NaN、null、undefined → true
  • 非 0 数字 → false

第2步:应用逻辑 AND (&&) 实现短路保护

&& 只要第一个操作数为假(falsy),就停止计算并直接返回该值。

var bFalse = false;
var res = bFalse && someVar; // 不会触发 ReferenceError,res 为 false

var bTrue = true;
// var res2 = bTrue && someUndefinedVar; 
// 若启用此行,会抛出 ReferenceError

第3步:应用逻辑 OR (||) 提供默认值

|| 只要第一个操作数为真(truthy),就立即返回该值。

var bTrue = true;
var res = bTrue || riskyCalc(); // riskyCalc 不会被执行,返回 true

乘性与取模运算符的边界值

乘法 (*)、除法 (/) 和取模 (%) 在处理特殊数值时需格外注意。

  • Infinity 与 NaN:Infinity * 0 结果为 NaN;Infinity / Infinity 结果为 NaN。
  • 0 除以一个非无穷大数字:结果为 NaN(注:标准 JS 中 0/x = 0,x/0 = Infinity,此处原文可能有误,常规标准下 0/5=0, 5/0=Infinity。但若原文指代特定环境或旧规范需注意,一般遵循 IEEE 754:0.0/5.0 = 0.0, 5.0/0.0 = Infinity)。

上述关于 JavaScript 运算符的详细解析涵盖了从基础语法到底层原理的关键点。以上就是 JavaScript 运算符的核心知识,更多关于前端基础的知识请继续关注我们!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。