一.什么是JavaScript 表达式
1.定义
在 JavaScript 中,表达式(Expression)是一个代码片段,它被计算(或求值)后能够返回一个值。表达式可以是任何能够生成值的代码结构。
JavaScript 表达式表达式有一些基本特征:
-
返回值:表达式执行后会有一个结果值,这个值可以是任何数据类型,如字符串、数字、布尔值、对象、数组等。
-
可读性:表达式通常用于计算或定义值,它们可以出现在需要值的地方,如赋值语句的右侧、函数调用参数等。
-
简洁性:表达式往往比较短小,它们可以是一个单独的变量名、字面量、运算符等。
2.常见的 JavaScript 表达式示例
-
字面量:数字、字符串、布尔值、对象、数组等都是表达式,因为它们可以直接表示一个值。
42; // 数字表达式 "Hello, World!"; // 字符串表达式 true; // 布尔表达式 { name: "Alice" }; // 对象表达式 [1, 2, 3]; // 数组表达式
-
变量:变量名本身就是一个表达式,它的值是变量所存储的值。
let x = 10; x; // 变量表达式,返回变量 x 的值
-
运算符:使用运算符组合的代码片段也是表达式。
1 + 2; // 算术表达式,返回 3 "a" + "b"; // 字符串表达式,返回 "ab" x > 5; // 比较表达式,返回一个布尔值
-
函数调用:函数调用表达式会执行函数并返回结果。
Math.sqrt(16); // 函数调用表达式,返回 4
-
成员访问:访问对象属性或数组元素的表达式。
let obj = { x: 10 }; obj.x; // 成员访问表达式,返回 10 let arr = [1, 2, 3]; arr[0]; // 成员访问表达式,返回 1
3.表达式与语句的区别
与表达式不同,JavaScript 语句(Statement)是一系列操作的指令,它可能包含一个或多个表达式,但本身不会返回一个值。例如,if
语句、for
循环、变量声明等都是语句。
以下是一个语句的例子:
if (x > 10) {
console.log('x is greater than 10');
} // 这是一个语句,它不返回值
在这个例子中,x > 10
是一个表达式,它被用于 if
语句的条件判断部分,但整个 if
结构是一个语句。
二.常见的 JavaScript 表达式及其详细说明
1.字面量表达式
-
字符串字面量:由单引号、双引号或反引号包围的文本。
"Hello, World!"; 'Hello, World!'; `Hello, ${name}!`; // 模板字符串
-
数字字面量:表示数值的文本。
42; 3.14; 0xff; // 十六进制 0o10; // 八进制 (ES6) 0b1010; // 二进制 (ES6)
-
数组字面量:表示数组的文本。
[1, 2, 3]; ['a', 'b', 'c'];
-
对象字面量:表示对象的文本。
{ name: 'Alice', age: 30 };
-
函数表达式:表示函数的文本。
function() { return 'Hello!'; };
2.运算符表达式
-
算术运算符:执行数学运算。
1 + 1; // 加法 5 - 3; // 减法 2 * 2; // 乘法 8 / 4; // 除法 9 % 2; // 取模
-
比较运算符:比较两个值,并返回一个布尔值。
3 > 2; // 大于 2 < 3; // 小于 3 >= 3; // 大于或等于 3 <= 3; // 小于或等于 3 == '3'; // 等于(类型不敏感) 3 === '3'; // 严格等于(类型敏感) 3 != '3'; // 不等于 3 !== '3'; // 严格不等于
-
逻辑运算符:用于组合多个表达式。
true && false; // 逻辑与 true || false; // 逻辑或 !true; // 逻辑非
-
赋值运算符:将值赋给变量。
let x = 10; x += 5; // 相当于 x = x + 5; x -= 5; // 相当于 x = x - 5; x *= 5; // 相当于 x = x * 5; x /= 5; // 相当于 x = x / 5;
-
条件(三元)运算符:根据条件返回两个表达式中的一个。
let age = 18; let message = (age >= 18) ? 'Adult' : 'Minor';
3.函数调用表达式
调用函数时,函数名后跟括号内的参数列表就是一个表达式。
console.log('Hello!'); // 调用 console.log 函数
4.成员访问表达式
访问对象的属性或数组的元素。
let obj = { a: 1 };
obj.a; // 访问对象属性
let arr = [1, 2, 3];
arr[0]; // 访问数组元素
5.new 表达式
创建一个对象实例,这个实例继承自构造函数的原型(prototype)。
let date = new Date();
6.delete 表达式
删除对象的属性。
let obj = { x: 1 };
delete obj.x; // 返回 true 如果删除成功
7.in 表达式
检查属性是否在对象中。
let obj = { x: 1 };
'x' in obj; // 返回 true
8.typeof 表达式
检查变量的类型。
typeof 'Hello'; // 返回 "string"
typeof 42; // 返回 "number"
typeof true; // 返回 "boolean"
typeof undefined; // 返回 "undefined"
typeof {}; // 返回 "object"
typeof []; // 返回 "object" (注意:数组也是对象)
typeof null; // 返回 "object" (这是一个历史错误)
9.instanceof 表达式
检查一个对象是否是另一个对象的实例。
let arr = [];
arr instanceof Array; // 返回 true
结束!