Google 的开源高性能 JavaScript 和 WebAssembly 引擎:V8简单入门,并通过mini-racer进行实践

看到一个python库,mini-racer ,它支持V8。那么问题来了:

什么是V8呢?

V8 是 Google 的开源高性能 JavaScript 和 WebAssembly 引擎,用 C++ 编写。它被用于 Chrome 和 Node.js 等。V8 使任何 C++ 应用程序能够将其自己的对象和函数公开给 JavaScript 代码。由您决定要公开给 JavaScript 的对象和函数。

V8文档:文档 · V8 引擎

以下是 V8 语法的一些关键点:

1. 支持的 ECMAScript 版本

  • V8 支持从 ECMAScript 2015 到当前的规范。
  • 支持的版本包括: ECMAScript 2015 (ES6), ECMAScript 2016 (ES7), ECMAScript 2018 (ES8), ECMAScript 2020 (ES9), ECMAScript 2021 (ES10), ECMAScript 2023 (ES11)。

2. 关键词

  • const: 用于声明常量。
    const pi = 3.14159;
    
  • let 和 var: 用于声明变量。
    let x = 10; // 全局变量
    var y = 20; // 局部变量
    
  • export/import: 用于模块化开发。
    export function greeting() {return "Hello, World!";
    }import greeting from './module.js';
    console.log(greeting()); // 输出: Hello, World!
    

3. 高级特性

  • 异步/ await:
    async function foo() {await new Promise(resolve => setTimeout(resolve, 1000));console.log('foo 完成');
    }
    
  • 光标 (Gist): V8 提供了光标语法,允许在代码块内编辑代码。
    const x = 10; // 常量
    const y = 20; // 常量({x, y} => {x = 30; // 光标操作
    })();
    

4. 

  • 使用 class 关键字定义类。

    class MyClass {constructor(value) {this.value = value;}// 方法increment() {this.value++;}
    }const obj = new MyClass(10);
    obj.value; // 输出: 10
    obj.increment();
    obj.value; // 输出: 11
    
  • 使用 new Target() 实例化 prototype 对象。

    new Target({a: 1}).valueOf(); // 输出: 1
    new Target({a: 1}, {b: 2}).valueOf(); // 输出: {b: 2}
    

5. 操作符

  • typeof: 判断变量类型。
    typeof 5; // 输出: 'number'
    typeof 'hello'; // 输出: 'string'
    
  • Infinity 和 NaN:
    console.log(Infinity + 1); // 输出: Infinity
    console.log(NaN); // 输出: NaN
    

6. 属性和对象

  • 特殊属性:
    let obj = {};
    obj[Infinity] = 100;
    obj[Infinity]; // 输出: 100
    
  • ** prototypical 索引**:
    const obj = { a: 1 };
    obj.b = 2; // 添加属性
    obj.prototype.a = 3; // 修改 prototypical 属性
    obj.a; // 输出: 3
    

7. 循环

  • for...of 循环:
    const arr = [1, 2, 3];
    for (const num of arr) {console.log(num);
    }
    
  • for...in 循环:
    const obj = { a: 1, b: 2 };
    for (const key in obj) {console.log(key);
    }
    

8. Target 和 with Computation

  • Target:
    const obj = { a: 1 };
    const newObj = new Target(obj, { b: 2 });
    newObj.a; // 输出: 1
    newObj.b; // 输出: 2
    
  • with Computation:
    const arr = [1, 2, 3];
    with(computation => {arr.push(4);computation;
    })();
    arr; // 输出: [1, 2, 3, 4]
    

9. 其他特性

  • 字符串索引和切片:
    const str = "Hello, World!";
    str[0]; // 输出: 'H'
    str[7]; // 输出: 'W'
    str.slice(0, 5); // 输出: 'Hello'
    
  • 正则表达式:
    const re = new RegExp('Hello');
    re.test('Hello World'); // 输出: true
    re.exec('Hello World'); // 输出: { offset: 0, match: 'Hello', index: 0 }
    

总结

V8 是一个功能强大的 JavaScript 引擎,支持现代 ECMAScript 特性,并且提供了丰富的语法和操作符。了解 V8 的语法可以让你更好地开发 web 应用程序,并利用其高性能和模块化特性。

实践

在python中,可以通过安装mini-racer包来支持V8:mini-racer-CSDN博客

安装mini-racer

pip install mini-racer

通过mini-racer实践V8语法 

进入python交互界面,然后执行

from py_mini_racer import MiniRacer
ctx = MiniRacer()
ctx.eval("1+1")

输出2

然后执行

ctx.eval("var x = {company: 'Sqreen'}; x.company")

输出 'Sqreen'
 

执行

print(ctx.eval("'❤'"))

输出:❤
 

执行

ctx.eval("var fun = () => ({ foo: 1 });")

输出:JSUndefined

具体更详细的语法,见V8文档。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/16827.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sql难点

一、 假设你有一个查询&#xff0c;需要根据 id 是否为 null 来动态生成 SQL 条件&#xff1a; xml复制 <select id"getResources" resultType"Resource">SELECT * FROM resources<where><if test"id ! null">and id <!…

2024年12月中国电子学会青少年软件编程(Python)等级考试试卷(六级)

青少年软件编程&#xff08;Python&#xff09;等级考试试卷&#xff08;六级&#xff09; 一、单选题(共25题&#xff0c;共50分) 1.下面代码的输出结果正确的是?(B) import json json_str [ "Alice", "girl", 17,"New York"] data json.loa…

Qwen2.5-Max:国内新一代 MoE 大模型的崛起!

通义千问 DeepSeek 才火没多久&#xff0c;国内又出现了一款可以比肩 DeepSeek 的 MoE 大模型——Qwen2.5-Max。这款大模型使用了超过 20 万亿 token 的预训练数据及精心设计的后训练方案进行训练&#xff0c;无疑开启了 AI 的新时代。 Qwen2.5-Max Qwen2.5-Max Qwen&#xff0…

把 DeepSeek1.5b 部署在显卡小于4G的电脑上

这里写自定义目录标题 介绍准备安装 Ollama查看CUDA需要版本安装CudaToolkit检查Cuda是否装好二、设置Ollama环境变量三、验证是否跑在GPU上ollama如何导入本地下载的模型安装及配置docker安装open-webui启动open-webui开始对话介绍 Deepseek1.5b能够运行在只用cpu和gpu内存小…

FPGA 28 ,基于 Vivado Verilog 的呼吸灯效果设计与实现( 使用 Vivado Verilog 实现呼吸灯效果 )

目录 前言 一. 设计流程 1.1 需求分析 1.2 方案设计 1.3 PWM解析 二. 实现流程 2.1 确定时间单位和精度 2.2 定义参数和寄存器 2.3 实现计数器逻辑 2.4 控制 LED 状态 三. 整体流程 3.1 全部代码 3.2 代码逻辑 1. 参数定义 2. 分级计数 3. 状态切换 4. LED 输…

日常知识点之面试后反思裸写string类

1&#xff1a;实现一个字符串类。 简单汇总 最简单的方案&#xff0c;使用一个字符串指针&#xff0c;以及实际字符串长度即可。 参考stl的实现&#xff0c;为了提升string的性能&#xff0c;实际上单纯的字符串指针和实际长度是不够了&#xff0c;如上&#xff0c;有优化方案…

用AI绘制CAD气温曲线图

此文章视频讲解地址 https://www.bilibili.com/video/BV1JtKjenEhF 需求 根据气温的JSON数据&#xff0c;用AI自动生成CAD格式的气温曲线DWG图 数据准备 用deepseek获取了北京市最近一个月的气温json数据 AI对话 首先进入唯杰地图云端管理平台 选择与唯杰地图AI对话 需求描…

Web应用项目开发 ——Spring Boot邮件发送

一.邮件发送介绍 邮件发送是一个非常常见的功能&#xff0c;注册时的身份认证、重要通知发送等都会用到邮件发送。在现代的Web应用程序中&#xff0c;邮件发送功能是非常常见且重要的一部分&#xff0c;Spring Boot框架提供了简单且强大的方式来实现邮件发送功能。Spring中提供…

【STM32】通过L496的HAL库Flash建立FatFS文件系统(CubeMX自动配置R0.12C版本)

【STM32】通过L496的HAL库Flash建立FatFS文件系统&#xff08;CubeMX自动配置R0.12C版本&#xff09; 文章目录 FlashFlash地址写Flash地址读 FatFS文件系统配置FatFS移植驱动函数时间戳函数 文件操作函数工作区缓存文件挂载和格式化测试文件读写测试其他文件操作函数 测试附录…

机械臂运动学笔记(一):正向运动学

正向运动学指的是通过相邻关节间的转动和移动坐标&#xff0c;将末端的坐标计算出来。 反向运动学指的是已知机械臂末端的坐标&#xff0c;反算每个关节可能的转动和移动参数。 参考资料&#xff1a;4.机械臂几何法与DH表示法_哔哩哔哩_bilibili 一.任意连杆连接的变量定义&a…

Leetcode - 周赛435

目录 一、3442. 奇偶频次间的最大差值 I二、3443. K 次修改后的最大曼哈顿距离三、3444. 使数组包含目标值倍数的最少增量四、3445. 奇偶频次间的最大差值 II 一、3442. 奇偶频次间的最大差值 I 题目链接 本题使用数组统计字符串 s s s 中每个字符的出现次数&#xff0c;然后…

鸿蒙HarmonyOS NEXT开发:优化用户界面性能——组件复用(@Reusable装饰器)

文章目录 一、概述二、原理介绍三、使用规则四、复用类型详解1、标准型2、有限变化型2.1、类型1和类型2布局不同&#xff0c;业务逻辑不同2.2、类型1和类型2布局不同&#xff0c;但是很多业务逻辑公用 3、组合型4、全局型5、嵌套型 一、概述 组件复用是优化用户界面性能&#…

pyrender 渲染报错解决

pyrender渲染后&#xff0c;出来的图样子不对&#xff1a; 正确的图&#xff1a; 解决方法&#xff1a; pip install numpy1.26 下面的不是必须的&#xff1a; pip install pyrender0.1.45 os.environ["PYOPENGL_PLATFORM"] "egl" os.environ[EGL_DEVI…

CCFCSP第34次认证第一题——矩阵重塑(其一)

第34次认证第一题——矩阵重塑&#xff08;其一&#xff09; 官网链接 时间限制&#xff1a; 1.0 秒 空间限制&#xff1a; 512 MiB 相关文件&#xff1a; 题目目录&#xff08;样例文件&#xff09; 题目背景 矩阵&#xff08;二维&#xff09;的重塑&#xff08;reshap…

Neurlps2024论文解读|BERTs are Generative In-Context Learners-water-merged

论文标题 BERTs are Generative In-Context Learners BERTs 是生成式上下文学习器 论文链接 BERTs are Generative In-Context Learners论文下载 论文作者 David Samuel 内容简介 本文探讨了掩码语言模型&#xff08;如DeBERTa&#xff09;在上下文学习中的生成能力&…

深入理解Java对接DeepSeek

其实&#xff0c;整个对接过程很简单&#xff0c;就四步&#xff0c;获取key&#xff0c;找到接口文档&#xff0c;接口测试&#xff0c;代码对接。 1.获取 KEY https://platform.deepseek.com/transactions 直接付款就是了&#xff08;现在官网暂停充值2025年2月7日&#xf…

OSPF高级特性(3):安全特效

引言 OSPF的基础我们已经结束学习了&#xff0c;接下来我们继续学习OSPF的高级特性。为了方便大家阅读&#xff0c;我会将高级特性的几篇链接放在末尾&#xff0c;所有链接都是站内的&#xff0c;大家点击即可阅读&#xff1a; OSPF基础&#xff08;1&#xff09;&#xff1a;工…

HCIA项目实践--静态路由的总结和简单配置

七、静态路由 7.1 路由器获取未知网段的路由信息&#xff1a; &#xff08;1&#xff09;静态路由&#xff1a;网络管理员手工配置的路由条目&#xff0c;它不依赖网络拓扑的变化进行自动更新&#xff0c;而是根据管理员预先设定的路径来转发数据包。其优点是配置简单、占用系…

3dtiles——Cesium ion for Autodesk Revit Add-In插件

一、说明&#xff1a; Cesium已经支持3dtiles的模型格式转换&#xff1b; 可以从Cesium官方Aesset中上传gltf等格式文件转换为3dtiles&#xff1b; 也可以下载插件&#xff08;例如revit-cesium插件&#xff09;转换并自动上传到Cesium官方Aseet中。 Revit转3dtiles插件使用…

HCIA项目实践---网络层次常见的三种模型

2.2 网络的层次 2.2.1 常见的三种网络层次划分 应用层 &#xff08;1&#xff09;OSI 七层模型 物理层&#xff1a;处于最底层&#xff0c;主要负责处理物理介质上的信号传输&#xff0c;如电缆、光纤、无线等。其作用是定义物理设备的接口标准、信号的编码方式、传输速率等&…