JavaScript 第十六章(表达式深度解析)

在JavaScript的世界里,表达式是构建应用的基础,它们像乐高积木一样,可以组合出无限可能。今天,我们来深入探讨JavaScript中的各种表达式,理解它们的用法和特性。

主表达式

主表达式是最基本的单位,不依赖于其他表达式。

// 数值字面量
let age = 30;

// 字符串字面量
let greeting = "Hello, World!";

// 正则表达式字面量
let regex = /ab+c/;

// 关键字
let isValid = true;
let nothing = null;

// 变量引用
let result = age * 2;

// this关键字(在一个对象的方法中使用)
let person = {
  name: "Alice",
  greet() {
    return `My name is ${this.name}`;
  }
};
console.log(person.greet()); // 输出: My name is Alice

主表达式包括常量、关键字以及变量引用。例如,数字、字符串、正则表达式字面量,以及特殊的关键字如truefalsenullthis都属于主表达式。this关键字在面向对象编程中尤为重要,它指向方法调用的当前对象。

对象和数组的初始化表达式

对象和数组的初始化表达式允许我们创建并填充对象或数组。

// 对象初始化表达式
let book = {
  title: "JavaScript: The Definitive Guide",
  author: "David Flanagan",
  published: 2020
};

// 数组初始化表达式
let primes = [2, 3, 5, 7, 11];

// 嵌套数组
let matrix = [
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9]
];

对象初始化表达式使用花括号{},而数组初始化表达式使用方括号[]。这些表达式内部可以包含子表达式,用以定义属性值或数组元素。

函数定义表达式

函数定义表达式则可以是匿名的,也可以具有名称,由关键字function、一组参数以及函数体组成。ES6及以后的版本还引入了箭头函数,提供了更简洁的函数定义方式。

// 匿名函数定义表达式
let square = function(x) {
  return x * x;
};

// 箭头函数定义表达式
let add = (a, b) => a + b;

console.log(square(5)); // 输出: 25
console.log(add(3, 4)); // 输出: 7

属性访问表达式

属性访问表达式允许我们获取对象属性或数组元素的值。
有两种语法:点语法和方括号语法。点语法简洁但只适用于合法的标识符名称,而方括号语法更为通用,可以用于动态属性名或包含特殊字符的属性名。

// 点语法
console.log(book.title); // 输出: JavaScript: The Definitive Guide

// 方括号语法
let property = "author";
console.log(book[property]); // 输出: David Flanagan

// 方括号语法访问数组元素
console.log(primes[2]); // 输出: 5

ES2020引入了条件式属性访问,通过?.?.[]操作符,我们可以安全地访问可能为nullundefined的属性,避免抛出错误。

// 使用?.避免TypeError
let user = {
  profile: {
    name: "John Doe"
  }
};

console.log(user.profile?.name); // 输出: John Doe
console.log(user.location?.city); // 输出: undefined(不会抛出错误)

调用表达式是执行函数的方式

调用表达式是执行函数的方式,由函数表达式和一对圆括号组成,圆括号内可以包含参数表达式。如果调用的是方法,即属性访问后跟圆括号,那么该方法的this值将指向属性访问的对象。ES2020同样为调用表达式带来了新特性,即条件式调用。使用?.()可以在不确定函数是否存在或不是函数的情况下安全地进行调用。

// 函数调用
console.log(square(10)); // 输出: 100

// 方法调用
let user = {
  name: "John",
  greet() {
    return `Hello, ${this.name}!`;
  }
};
console.log(user.greet()); // 输出: Hello, John!

// 条件式调用
let multiply = null;
console.log(multiply?.(2, 4)); // 输出: undefined(不会抛出错误)
  • 20
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

辰火流光

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值