深入理解JavaScript系列(19):求值策略(Evaluation strategy)详解

当JavaScript引擎要执行一段代码时,它会将代码中的表达式转换成值,这个转换的过程被称为求值。在求值的过程中,JavaScript引擎采用了不同的求值策略。本文将详细介绍JavaScript中的求值策略及其相关的知识点。

一、JavaScript中的表达式

在JavaScript中,表达式是由运算符和操作数组成的。表达式主要分为以下几类:

  1. 原始表达式:包括字面量和变量名。

  2. 对象和数组初始化表达式:包括对象字面量和数组字面量,它们会创建一个新的对象或数组。

  3. 函数调用表达式:由一个函数调用和一组参数组成。

  4. 属性访问表达式:由一个对象和一个属性名称组成。

  5. 运算符表达式:由一个或多个操作数和一个运算符组成。

二、JavaScript中的求值策略

JavaScript中的求值策略主要分为两类:短路求值和完全求值。

1. 短路求值

短路求值是JavaScript中常见的求值策略。它主要用于逻辑运算符和条件运算符中。当逻辑运算符和条件运算符的左操作数就能确定整个表达式的值时,右操作数的求值过程就可以省略掉。具体而言,以下面代码为例:

var a = 2, b = 3;
if (a > 0 && b > 0) {
    console.log('Both a and b are positive numbers');
}

在上面的代码中,逻辑与运算符左侧的表达式a > 0的结果已经是true,因此整个逻辑与运算的结果就已经可以确认是true,右侧的表达式b > 0的求值就可以省略掉了。

再看下面这个例子:

var a = 0;
if (a === 5 || a === 6) {    
   console.log('a is either 5 or 6');
}

在上面的代码中,条件操作符左侧的表达式a === 5的结果是false,但是右侧的表达式a === 6的结果还不确定,因此整个条件操作符的结果也还不确定。这时JavaScript引擎会继续求解右侧的表达式,最终确定整个条件操作符的结果为false。

2. 完全求值

完全求值是另一种JavaScript中的求值策略。它主要用于数值运算和字符串运算中。在完全求值的过程中,表达式中的所有运算符和操作数都会被完全求值。

例如:

var a = 10;
var b = a + 2 * 3;
console.log(b);    // 16

在上面的代码中,变量b的值会完全求值,首先先要求解2 * 3,得到值6,然后再将这个值加上变量a的值10,最终得到变量b的值16。

三、示例说明

1. 逻辑运算符中的短路求值

在逻辑运算符中,如果左侧的表达式已经可以确定整个运算符的结果时,右侧的求值过程可以省略掉。

例如:

var a = 5, b = null, c = undefined, d = '';
var result = (a > 0) && (b && c && d);
console.log(result);    // false

在上面的代码中,变量result的值为false,这是由于逻辑与运算符左侧的表达式a > 0的结果为true,而逻辑与运算符右侧的b && c && d的求值过程就可以省略掉。因为对于逻辑与运算符,只有左右两侧都为true时,整个运算符才会返回true,否则返回false。

2. 数值运算中的完全求值

在数值运算中,表达式中的所有运算符和操作数都会被完全求值。

例如:

var a = 5, b = 10;
var result = a++ + --b * 2 + 3;
console.log(result);    // 21

在上面的代码中,变量result的值为21,它的求值过程如下:

  • a++的值为5,然后将变量a的值加1。
  • --b的值为9,然后将变量b的值减1。
  • --b * 2的值为18。
  • a++ + --b * 2的值为23。
  • a++ + --b * 2 + 3的值为21。

四、总结

在JavaScript中,求值是将表达式转换成值的过程。JavaScript引擎采用不同的求值策略来决定表达式中各个部分的求值先后顺序。本文主要介绍了JavaScript中的求值策略及其相关的知识点。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:深入理解JavaScript系列(19):求值策略(Evaluation strategy)详解 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • JavaScript字符串操作的四个实用技巧

    当涉及到JavaScript字符串操作时,有许多材料可供学习者研读。但是,当你想要张贴或处理字符串时,这里提供了四个实用技巧,使得你的编程更加高效简洁。 技巧1:字符串长度和切片 注意到JavaScript字符串本质上是字符数组,你可以使用JavaScript 来计算字符串的长度以及对它进行切片,如下所示: const stringVariable = ‘H…

    JavaScript 2023年5月18日
    00
  • ajax的两种提交方式(get/post)和两种版本

    让我给您讲一下关于”ajax的两种提交方式(get/post)和两种版本”的完整攻略。 ajax的两种提交方式 在使用ajax进行数据请求的时候,我们可以使用两种提交方式:GET和POST。 GET方式 优点:比较简单明了,url中直接可以看到请求参数。请求的是缓存数据时,请求速度较快。 缺点:传参长度有限制,不适合传输大块数据。因为参数卸载url后,传输的…

    JavaScript 2023年6月11日
    00
  • 如何通过vscode运行调试javascript代码

    下面是如何通过VSCode运行调试JavaScript代码的完整攻略: 步骤1:安装和配置VSCode 安装VSCode:打开VSCode官网,下载并安装最新的稳定版本。如果已经安装,请保持更新到最新版本。 安装Node.js:在Node.js官网下载并安装Node.js,这将使您可以在VSCode中运行和调试JavaScript代码。 安装VSCode的J…

    JavaScript 2023年5月27日
    00
  • JavaScript实现无限轮播效果

    JavaScript实现无限轮播效果攻略 1. 实现思路 实现无限轮播效果,主要思路是在轮播图的首尾各添加一张相同的图片,每次轮播到首尾两张相同的图片时,再次无缝链接到对面的一张同样的图片,就会呈现出无限轮播的效果。 具体步骤如下: 获取轮播图的元素和所有轮播项的元素 在轮播图的首尾各添加一张相同的图片 设置轮播图元素的宽度为一个轮播项的宽度 给轮播图元素添…

    JavaScript 2023年6月11日
    00
  • 一个cssQuery对象 javascript脚本实现代码

    讲解一个 CSS 查询对象 JavaScript 实现代码的攻略需要考虑以下几个方面:1. CSS 选择器语法的基础知识;2. JavaScript 对 DOM 操作的基础掌握;3. 将 CSS 选择器语法和 JavaScript DOM 操作结合起来。 下面是实现一个 CSS 查询对象的攻略: CSS 选择器语法基础 在 CSS 选择器语法中,我们可以使用…

    JavaScript 2023年5月27日
    00
  • js判断一个字符串是以某个字符串开头的简单实例

    下面是”js判断一个字符串是以某个字符串开头的简单实例”的完整攻略: 一、使用字符串的startsWith()函数进行判断 startsWith()函数是ES6引入的函数,用来判断一个字符串是否以另一个字符串开头。下面是一个简单的实例: var str = ‘Hello World!’; console.log(str.startsWith(‘Hello’)…

    JavaScript 2023年5月28日
    00
  • JavaScript文档碎片操作实例分析

    下面我将为您详细讲解“JavaScript文档碎片操作实例分析”的完整攻略。 什么是文档碎片? 文档碎片(DocumentFragment)是在DOM中经常使用的一个API,它代表一个没有父级节点的文档片段,可以包含多个子节点。它的主要功能是在内存中构建DOM节点,然后一次性地将它们添加到页面上,避免了频繁地操作DOM而导致的性能问题。 如何使用文档碎片? …

    JavaScript 2023年6月10日
    00
  • js简单判断移动端系统的方法

    判断移动端系统是JS中非常常见的一个需求,下面给出几种判断方式: 方法一:根据navigator.userAgent字符串进行判断 移动端设备的 UA(UserAgent)字符串中,都会包含操作系统的信息,因此我们可以通过解析 UA 字符串来判断设备使用的操作系统。其中一些常见的 UA(UserAgent)字符串包括: Android:/Android/i …

    JavaScript 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部