JavaScript表达式与运算符详解
本文系统讲解JavaScript中的表达式分类与各类运算符。内容涵盖原始表达式、复合表达式、初始化表达式、函数表达式及调用表达式等核心概念,并深入解析一元、二元、三元运算符,以及赋值、比较、算术、位运算、逻辑运算和字符串拼接。重点剖析delete、in、instanceof、typeof、new、this和void等特殊运算符的行为机制与注意事项,帮助开发者准确理解JS语法结构。
JavaScript表达式详解
一、JavaScript表达式
定义:表达式指任何能计算出值的程序单元。——维基百科
表达式是JavaScript中的一种短语,用于由解释器产生一个值。——《JavaScript权威指南》
1. 原始表达式。
常量/直接量:如 3.14 或 "test" 等
关键字:如 null、this、true、false 等
变量:如 i、k、j 等
复合表达式:原始表达式通过运算符连接组成复合表达式。
例如:10 * 20 即为一个复合表达式
2.(数组、对象的)初始化表达式。
例如:
[1,2] 等价于 new Array(1,2);
[1,,,2] 等价于 new Array(1,undefined,undefined,2);
{x:1,y:2} 等价于 var obj = new Object();
obj.x = 1;obj.y = 2;
3.函数表达式。
var fn = function(){};
或者:
(function(){ console.log("hello") })();
若不理解函数表达式,后续将有对应介绍。
4.属性访问表达式。
var obj = {x:1}
通过 obj.x 或 obj["x"]访问属性,此类称为属性访问表达式。
5.调用表达式。
func();调用函数,此类称为调用表达式。
6.对象创建表达式。
例如:
new Func(1,2);可传参,无参数时 new Object() 创建空对象亦合法。
JavaScript运算符分类与用法
二、JavaScript运算符(一般用于表达式间运算)。
1. 按操作数数量区分:
一元运算符:+num
二元运算符:a + b
三元运算符:c?a:b
2. 按功能区分:
赋值:x += 1(或-=,=等)
比较:a == b
算数:a - b
位:a | b
逻辑:exp1 && exp2(与或非)
字符串:“a” + “b”
特殊:delete obj.x
特殊运算符解析
下面对特殊运算符展开讲解:
条件运算符:var c = true?1:2 //c=1
逗号运算符:var val = (1,2,3) // val = 3 从左到右计算取最后值
delete运算符:用于删除对象上的属性。
--例如:
var obj = {x:1}
obj.x //1
delete obj.x
obj.x //undefined
从IE9起,对象可设置configurable标签,仅当configurable:true时属性方可被delete。
例:
var obj = {}
Object.defineProperty(obj, 'x', {
configurable:false,
value:1
});
delete obj.x
obj.x //1
3. in 运算符。
例:window.x = 1; 判断window是否有x,可用 in
”x“ in window; // true
4. instanceof 和 typeof 上一章已详述,遗忘可查阅。
5. new运算符
如创建函数构造器:function Foo(){}
Foo.prototype.x = 1;
可用new运算符创建对象obj
var obj = new Foo();
这样obj.x; //1 可从构造器的prototype属性获取 1
通过 obj.hasOwnProperty("x"); //false 判断属性属于对象还是原型
obj._proto_获取原型,obj._proto_.hasOwnProperty("x"); //true 说明属原型
6.this 运算符。
this; //window(浏览器)
var obj = {
func:function(){
return this;
}
}
obj.func(); // obj
this运算符较特殊,后续将详细讲解。
7.void运算符。
void 0 //undefined
void (0) //undefined
void无论后续操作数为何,均返回undefined。
8.运算符优先级,建议查阅以助于读懂复杂表达式。
以上就是本文全部内容,希望内容对大家的学习或工作有帮助,同时也希望多多支持本站!
JS语法错误会阻止加载吗?区分SyntaxError与资源加载失败
2026-11-05 16:08:46
JavaScript常见SyntaxError语法错误排查与修复方法
2026-11-05 13:58:44
JS中slice、substring和substr截取字符串的区别
2026-11-05 13:43:47
JS 转 TS 手动迁移最佳实践:从配置 tsconfig 到消除 any 类型
2026-11-05 11:53:32
为什么JS数组push后得到的是数字而不是数组?
2026-11-05 09:59:18
