ECharts 源码代码规范

代码规范 - Apache EChartsApache ECharts,一款基于JavaScript的数据可视化图表库,提供直观,生动,可交互,可个性化定制的数据可视化图表。icon-default.png?t=N7T8https://echarts.apache.org/zh/coding-standard.html

源文件

[强制] JavaScript源文件必须以无BOM的UTF-8编码。

缩进

[强制] 必须采用4个空格缩进,不允许以Tab制表符或2个空格代替。

[强制] switch 中的 case 和 default 必须保持缩进。

// 正例
switch (variable) {case '1':// do...break;case '2':// do...break;default:// do...
}// 反例
switch (variable) {
case '1':// do...break;
case '2':// do...break;
default:// do...
}

空格

[强制] 二元运算符两个操作数之间必须使用空格,但一元运算符与其操作数间不能有空格。

let a = !arr.length;
a++;
a = b + c;

[强制] 在 { 前必须有1个空格。

// 正例if (condition) {
}set('attr', {some: 'xxx',any: 'yyy'
});function funcName() {
}// 反例if (condition){
}set('attr',{some: 'xxx',any: 'yyy'
});function funcName(){
}

[强制] if / else / for / while / function / switch / do / try / catch / finally 等关键字与括号之间都必须加一个空格。

// 正例if (condition) {
}while (condition) {
}(function () {
})();// 反例if(condition) {
}while(condition) {
}(function() {
})();

[强制] 在创建对象的语句中,: 后必须加一个空格,: 前不能有空格。

// 正例
const obj = {a: 1,b: 2,c: 3
};// 反例
const obj = {a : 1,b:2,c :3
};

[强制] 在函数声明、命名函数表达式和函数调用时,函数名称和 ( 间不能有空格。

// 正例function funcName() {
}const funcName = function funcName() {
};funcName();// 反例function funcName () {
}const funcName = function funcName () {
};funcName ();

[强制] , 和 ; 前不能有空格。

// 正例
callFunc(a, b);// 反例
callFunc(a , b) ;

[强制] ( 和 [ 之后、 ) 和 ] 之前不能有空格。

// 正例callFunc(param1, param2, param3);save(this.list[this.indexes[i]]);needIncream && (variable += increament);if (num > list.length) {
}while (len--) {
}// 反例callFunc( param1, param2, param3 );save( this.list[ this.indexes[ i ] ] );needIncreament && ( variable += increament );if ( num > list.length ) {
}while ( len-- ) {
}// 正例
const arr1 = [];
const arr2 = [1, 2, 3];
const obj1 = {};
const obj2 = {name: 'obj'};
const obj3 = {name: 'obj',age: 20,sex: 1
};// 反例
const arr1 = [ ];
const arr2 = [ 1, 2, 3 ];
const obj1 = { };
const obj2 = { name: 'obj' };
const obj3 = {name: 'obj', age: 20, sex: 1};

[强制] 每行代码后不能有尾随空格。

换行

[强制] 必须在语句的结尾换行。

[强制] 单行字符数不能超过120个,超出则需要换行。

[强制] 如果需要换行,运算符必须放在新行的开头。

// 正例
if (user.isAuthenticated()&& user.isInRole('admin')&& user.hasAuthority('add-admin')|| user.hasAuthority('delete-admin')
) {// Code
}const result = number1 + number2 + number3+ number4 + number5;// 反例
if (user.isAuthenticated() &&user.isInRole('admin') &&user.hasAuthority('add-admin') ||user.hasAuthority('delete-admin')) {// Code
}const result = number1 + number2 + number3 +number4 + number5;

[强制] 如果括号中的内容有多行,必须为 )、 ]、 } 另开一个新行,并使新行与 (、 [、 { 所在行的缩进相对应。

// 正例
if (product) {product.load();if (user.isAuthenticated()&& user.isInRole('admin')&& user.hasAuthority('add-admin')) {sendProduct(user, product);}
}
const arr = ['candy', 'sugar'
];// 反例
if (product) {product.load();if (user.isAuthenticated()&& user.isInRole('admin')&& user.hasAuthority('add-admin')) {sendProduct(user, product);}
}
const arr = ['candy', 'sugar'];

[强制] , 或 ; 前不能有换行。

// 正例
const obj = {a: 1,b: 2,c: 3
};foo(aVeryVeryLongArgument,anotherVeryLongArgument,callback
);// 反例
const obj = {a: 1, b: 2, c: 3
};foo(aVeryVeryLongArgument, anotherVeryLongArgument, callback
);

[推荐] 建议换行和缩进遵循如下风格:

if (user.isAuthenticated()&& user.isInRole('admin')&& user.hasAuthority('add-admin')
) {// Code
}foo(aVeryVeryLongArgument,anotherVeryLongArgument,callback
);baidu.format(dateFormatTemplate,year, month, date, hour, minute, second
);$('#items').find('.selected').highlight().end();const result = thisIsAVeryVeryLongCondition? resultA : resultB;const res = condition? thisIsAVeryVeryLongResult: resultB;

[强制] 如果使用多行代码块,else 和 catch 必须另开一个新行。

// 正例if (condition) {// some statements;
}
else {// some statements;
}try {// some statements;
}
catch (ex) {// some statements;
}// 反例if (condition) {// some statements;
} else {// some statements;
}try {// some statements;
} catch (ex) {// some statements;
}

语句

[强制] 语句必须以 ; 结尾。

[强制] 如果只有一行,{} 不能被省略。

// 正例
if (condition) {callFunc();
}// 反例
if (condition) callFunc();
if (condition)callFunc();

[强制] 函数定义的末尾不能有分号 ;

// 正例
function funcName() {
}// 反例
function funcName() {
};// 对于函数表达式,不能忽略分号
const funcName = function () {
};

[强制] 对象和数组的声明中不能有尾随逗号。

// 正例const obj = {attr1: 'xxx',attr2: 'yyy'
};const arr = ['xxx','yyy'
];// 反例const obj = {attr1: 'xxx',attr2: 'yyy',
};const arr = ['xxx','yyy',
];

命名规约

[强制] 变量名、属性名及函数名的命名必须遵循 lowerCamelCase(小骆驼拼写法)。

const loadingModules = {};
function loadProduct() {
}

[强制] class类的命名必须遵循 UpperCamelCase (Pascal),即大骆驼拼写法(帕斯卡拼写法)。

function Element(options) {
}

[推荐] 缩略词的所有字符应当一并大写或一并小写。

function parseSVG() {
}
const svgParser;

语法特性

兼容性

语法特性可以通过一些工具方法进行弥补,但不能通过修改内置JavaScript对象的原型来实现。

// 正例import * as zrUtil from 'zrender/src/core/util';zrUtil.each(array, function (val, index) {sum += val;
});const result = zrUtil.map(array, function (val) {return parse(val);
});const pos = zrUtil.indexOf(array, val);const obj2 = zrUtil.extend({}, obj1);function Element() {// ...
}// 反例array.forEach(function (val, index) {sum += val;
});let result = array.map(function (val) {return parse(val);
});const pos = array.indexOf(val);const obj2 = Object.assign({}, obj1);class Element {// ...
}String.prototype.trim = function () {
};

变量

[强制] 优先使用const声明变量,且一行不能同时声明多个变量。

// 正例
const name = 'MyName';
const hangModules = [];
const missModules = [];
const visited = {};// 反例
name = 'MyName';
const hangModules = [],missModules = [],visited = {};

条件判断

[强制] 对于相等运算符,== 只能用于检查是否为 null 或者 undefined,其余情况必须使用 ===

// 正例
if (age === 30) {// ...
}
if (type == null) {// ...
}// 反例
if (age == 30) {// ......
}

[推荐] 建议使用 xxx == null 来判断 null 或 undefined

[推荐] 尽量让 null 和 undefined 的含义相同。也就是说,不要让用户或开发者去区分变量是 null 还是 undefined

[推荐] 函数表达式或者函数声明不应该放在循环体中。

// 正例
function clicker() {// ......
}for (let i = 0, len = elements.length; i < len; i++) {const element = elements[i];addListener(element, 'click', clicker);
}// 反例
for (let i = 0, len = elements.length; i < len; i++) {const element = elements[i];addListener(element, 'click', function () {});
}

类型转换

[推荐] 建议使用 + '' 将值转为字符串。

// 正例
num + '';// 反例
new String(num);
num.toString();
String(num);

[推荐] 建议使用 + 将值转为数值。

// 正例
+str;// 反例
Number(str);

[强制] 在使用 parseInt 时,必须传入第二个参数。

// 正例
parseInt(str, 10);// 反例
parseInt(str);

字符串,对象,数组

[强制] 必须使用 ' 而不是 " 定义字符串。

[强制] 必须使用对象字面量 {} 来创建简单对象。

// 正例
const obj = {};// 反例
const obj = new Object();

[强制] 如果一个对象字面量的所有属性都不需要引号,引号必须省略。如果需要加引号,须使用 ' 而不是 "

// 正例
const info = {name: 'someone',age: 28
};// 反例
const info = {'name': 'someone','age': 28
};
const info2 = {"age": 40
};

[强制] 禁止修改内置对象的原型。

// 禁止
String.prototype.trim = function () {
};

[推荐] 尽可能使用 . 而不是 [] 访问对象的属性。

[推荐] 使用 for ... in ... 时,应当注意使用 hasOwnProperty 以防 Object 的原型在某些运行时环境中被添加一些额外属性的情况。

const newInfo = {};
for (const key in info) {if (info.hasOwnProperty(key)) {newInfo[key] = info[key];}
}

[强制] 除非需要创建指定长度的数组,否则必须使用数组字面量 [] 创建数组。

// 正例
const arr = [];
const arr2 = new Array(1e4);// 反例
const arr = new Array();

[强制] 不要使用 for in 语句对数组进行遍历。

其他

[强制] 不要使用 eval 和 with。允许使用new Function

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

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

相关文章

STM32-hal库学习(4)--usart/uart通信 (同时显示在oled)

前言&#xff1a; 关于usart详解&#xff1a; stm32-USART通信-CSDN博客 因为在oled上显示&#xff0c;我们直接在上一个工程进行修改&#xff1a; STM32_hal库学习&#xff08;3&#xff09;-OLED显示-CSDN博客 其他配置与oled显示工程保持不变&#xff0c;打开oled文件的…

并发编程工具集——Lock和Condition(上)(十二)

简述&#xff1a;Java SDK 并发包通过 Lock 和 Condition 两个接口来实现管程&#xff0c;其中 Lock 用于解决互斥问题&#xff0c;Condition 用于解决同步问题。 再造管程的理由和期望 理由&#xff1a;synchronized 没有办法解决“破坏不可抢占条件方案”。 原因是synchroniz…

Linux kernel 与 设备树

Linux kernel 与 设备树 1 介绍1.1 概述1.2 发展历程1.3 各版本发布时间及特色1.4 Linux 单内核1.5 Linux 内核网址1.6 NXP 官方镜像与 野火 鲁班猫镜像的区别 2 Linux 内核组成2.1 进程管理2.2 内存管理2.3 文件系统2.4 设备管理2.5 网络功能 3 Linux 内核编译3.1 编译 Kernel…

小程序发布必须进行软件测试吗?测试内容有哪些?

在如今移动互联网时代&#xff0c;小程序已成为许多企业广泛采用的一种营销手段&#xff0c;然而&#xff0c;发布小程序之前进行充分的软件测试是至关重要的&#xff0c;因为它不仅可以确保小程序的质量&#xff0c;还可以避免潜在的风险和损失。 在进行小程序发布前进行软件…

可逆质子陶瓷电化学电池(R-PCEC)作为新型能量存储与转换装置开发应用价值大

可逆质子陶瓷电化学电池&#xff08;R-PCEC&#xff09;作为新型能量存储与转换装置开发应用价值大 可逆质子陶瓷电化学电池&#xff08;R-PCEC&#xff09;&#xff0c;同时具有燃料电池与电解槽功能&#xff0c;能够实现电能、化学能相互转化&#xff0c;是最具有发展前景的能…

「51媒体」政企活动媒体宣发如何做?

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 媒体宣传加速季&#xff0c;100万补贴享不停&#xff0c;一手媒体资源&#xff0c;全国100城线下落地执行。详情请联系胡老师。 政企活动媒体宣发是一个系统性的过程&#xff0c;需要明确…

餐饮冷库安全守护神:可燃气体报警器检定的科学性与有效性

随着餐饮业的快速发展&#xff0c;冷库成为储存食材、保证食品质量的重要场所。 然而&#xff0c;由于冷库环境的特殊性&#xff0c;如密封性强、温度低、湿度大等&#xff0c;一旦冷库内发生可燃气体泄露&#xff0c;后果将不堪设想。因此&#xff0c;在餐饮冷库中安装并合理…

SpringBoot集成道历(实现道历日期查询)

官网地址&#xff1a;官网地址https://6tail.cn/calendar/api.html 1、导入依赖 <dependency><groupId>cn.6tail</groupId><artifactId>lunar</artifactId><version>1.3.9</version></dependency><dependency><group…

MQTT遗嘱信息(2)

接前一篇文章&#xff1a;MQTT遗嘱信息&#xff08;1&#xff09; 本文内容参考&#xff1a; 什么是MQTT遗嘱消息&#xff1f;如何配置和处理遗嘱消息&#xff1f;_mqtt last will-CSDN博客 MQTT 协议学习&#xff1a;Retained&#xff08;保留消息&#xff09; 与 LWT&#x…

shark云原生-日志管理体系-filebeat

文章目录 1. deploy 文件1.1 RBAC1.2. DaemonSet1.2.1. Elasticsearch 连接信息1.2.2. Volume 1.3. ConfigMap1.3.1. 日志收集路径1.3.2. 日志事件输出目标 2. 在控制平面节点上运行Filebeat3. 查看输出3.1. 关于处理器 processors 4. 日志收集配置4.1. 手动指定日志收集路径4.…

基于SpringBoot前后端分离旅游出行管理系统设计和实现(源码+LW+调试文档+讲解等)

&#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者&#xff0c;博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f31f;文末获取源码数据库&#x1f31f;感兴趣的可以先收藏起来&#xff0c;还…

聚观早报 | iPhone 16核心硬件曝光;三星Galaxy全球新品发布会

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 6月28日消息 iPhone 16核心硬件曝光 三星Galaxy全球新品发布会 苹果正多方下注布局AI商店 黄仁勋2024年薪酬3400…

Zynq7000系列FPGA中的DMA控制器简介(一)

DMA控制器&#xff08;DMAC&#xff09;使用64位AXI主接口来执行与系统存储器和PL外围设备之间的DMA数据传输&#xff0c;操作频率同CPU_2x的时钟速率。传输由DMA指令执行引擎控制。DMA引擎运行在一个小指令集上&#xff0c;该指令集提供了一种灵活的指定DMA传输的方法。这种方…

【电路笔记】-MOSFET放大器

MOSFET放大器 文章目录 MOSFET放大器1、概述2、电路图3、电气特性3.1 ** I D = F ( V G S ) I_D=F(V_{GS}) ID​=F(VGS​)**特性3.2 I D = F ( V D S ) I_D=F(V_{DS}) ID​=F(VDS​)特性4、MOSFET放大器5、输入和输出电压6、电压增益7、总结1、概述 在前面的文章中,我们已经…

基本的 Spring Boot 配置步骤和常见的配置项【创建,配置,日志,数据库,安全,MVC】

基本的 Spring Boot 配置步骤和常见的配置项【创建&#xff0c;配置&#xff0c;日志&#xff0c;数据库&#xff0c;安全&#xff0c;MVC】 学习总结 1、掌握 JAVA入门到进阶知识(持续写作中……&#xff09; 2、学会Oracle数据库入门到入土用法(创作中……&#xff09; 3、…

EAK高压电阻器-引线高压电阻器-厚膜高压电阻器

描述 EAK高压电阻器是扁平高压电阻器&#xff0c;完全满足低感、稳定和精密无源元件的所有要求。 扁平高压电阻器最适合作为组装在 PCB 上的有线元件&#xff0c;但也可以用作 SMD 元件。 我们提供 HVR、HPR、HVI、HVD 和 HVS 系列的扁平高压电阻器&#xff0c;这些电阻器具…

AI+零信任 | 易安联亮相首届“矩阵杯”网络安全大赛

6月26日&#xff0c; 首届“矩阵杯”网络安全大赛 在青岛国际会议中心举行。大赛由360数字安全、华云安主办&#xff0c;赛宁网安、永信至诚、红客社区协办&#xff0c;致力于推动提升全民网络安全意识、发现顶尖安全人才、鼓励技术创新发展&#xff0c;推动安全行业共建共享…

Cambrian-1:探索以视觉为中心的多模态LLM新纪元

一、摘要 论文&#xff1a;Cambrian-1: A Fully Open, Vision-Centric Exploration of Multimodal LLMs&#xff0c;https://arxiv.org/abs/2406.16860 主页&#xff1a;https://cambrian-mllm.github.io/ 代码&#xff1a;https://github.com/cambrian-mllm/cambrian 本文研发…

堆栈与堆内存 - C#

探索 C# 编程中内存管理的细微差别&#xff0c;区分值类型和引用类型&#xff0c;理解动态和静态内存分配&#xff0c;评估访问效率… 背景 以下是 C# 中堆栈和堆内存之间的主要区别列表。这适用于初学者和专业的 C# 开发人员。 C# 中栈和堆内存的区别 概括 现在&#xff0c…

主流电商平台API接口(天猫获得淘宝商品详情,获得淘宝app商品详情原数据 ,获得淘口令真实url API,按图搜索淘宝商品(拍立淘) API )

主流电商平台商品接口在电商企业中具有重要应用价值。通过商品接口&#xff0c;电商企业可以实现商品同步功能&#xff1a; 商品信息同步&#xff1a;通过接口可以实时同步主流电商平台上的商品信息&#xff0c;包括商品标题、价格、库存、销量等数据&#xff0c;确保企业在自…