JAVASCRIPT企业项目开发规范(总结)_V1.0
JavaScript_开发规范
JavaScript 开发规范一、注释规范(2009-07-18)1.版权信息:放在每个文件头部,格式如下2.方法信息:格式如下3.细节提示信息:这种类型的注释既可以放在某一行代码之后,也可放在几行代码之间,用双斜杠注释,格式如下4.失效代码:当一段代码不再有效,但这段代码对于阅读者理解程序有重大意义,可以将其注释掉,格式如下5.以下几点需要注意:1)不可滥用注释,在程序中的任何一行代码和注释都必须是有意义的,对程序没有意义的任何语句和注释都必须摒弃,如:2)不要在不合适的地方注释,例如不要在分行的字符串间加上注释3)设计核心算法或机密的代码发布时请清除注释4)常犯的错误:二、命名规范(2009-07-18)1.尽量采用匈牙利命名法:类型+变量命名前缀+对象描述如:var nCount = 1;var sEmail = “javascript@”;var fnAdd = function()……;2.每个页面的命名以“该页面的Nameplace_自定义名称“命名,如:AddNewDetailInfo_nCount,私有变量加“_”下划线前缀,可以不加Nameplace,如:function AddNewDetailInfo_fnAdd (nNum1, nNum2){var _nSum = nNum1 + nNum2;return _nSum;}place命名采用Pascal命名法,可以有三种变形形式:如:Nameplace 为AddNewDetailInfo公共:AddNewDetailInfo 局部:addNewDetailInfo 私有:_addNewDetailInfoID等命名使用“局部“.。
javascript的基本规范
javascript的基本规范对于很多刚到公司做前端的人来说,很多基本的规范可能都不知道。
在项目开发维护等工作中,我们不只要做得自己看得懂,还要别人也看得懂。
而在js里也是如此。
下面就由小编给大家分享下,js的一些基本规范吧。
本篇主要介绍JS的命名规范、注释规范以及框架开发的一些问题。
目录1. 命名规范:介绍变量、函数、常量、构造函数、类的成员等等的命名规范2. 注释规范:介绍单行注释、多行注释以及函数注释3. 框架开发:介绍全局变量冲突、单全局变量以及命名空间1. 命名规范驼峰式命名法介绍:驼峰式命名法由小(大)写字母开始,后续每个单词首字母都大写。
按照第一个字母是否大写,分为:① Pascal Case 大驼峰式命名法:首字母大写。
eg:StudentInfo、UserInfo、ProductInfo② Camel Case 小驼峰式命名法:首字母小写。
eg:studentInfo、userInfo、productInfo1.1 变量命名方法:小驼峰式命名法。
命名规范:前缀应当是名词。
(函数的名字前缀为动词,以此区分变量和函数)命名建议:尽量在变量名字中体现所属类型,如:length、count 等表示数字类型;而包含name、title表示为字符串类型。
示例:// 好的命名方式var maxCount = 10;var tableTitle = 'LoginTable';// 不好的命名方式var setCount = 10;var getTitle = 'LoginTable';1.2 函数命名方法:小驼峰式命名法。
命名规范:前缀应当为动词。
命名建议:可使用常见动词约定动词含义返回值can 判断是否可执行某个动作(权限) 函数返回一个布尔值。
true:可执行;false:不可执行has 判断是否含有某个值函数返回一个布尔值。
true:含有此值;false:不含有此值is 判断是否为某个值函数返回一个布尔值。
JS开发规范
J S开发规范(总7页) -CAL-FENGHAI.-(YICAI)-Company One1-CAL-本页仅作为文档封面,使用请直接删除信息技术中心网站技术部JavaScript开发规范目录文件命名............................................ 错误!未定义书签。
代码外观............................................ 错误!未定义书签。
注释规范............................................ 错误!未定义书签。
命名规范............................................ 错误!未定义书签。
语句规范............................................ 错误!未定义书签。
注意事项............................................ 错误!未定义书签。
参考资料文件命名JavaScript程序应该作为一个.js文件存储和发布。
文件名全小写,标记版本号和特性说明,扩展名小写,例如。
JavaScript代码尽量不要嵌入在HTML中文件开始包含类似以下注释说明/********************************************、 (和[,都应该使用一个空格来和操作数隔开。
for语句控制部分的;应该在后面跟一个空格。
括号左括号( 不要紧靠关键字,中间用一个空格隔开。
左括号( 与方法名之间不要添加任何空格。
没有必要的话,不要在return语句中使用()。
花括号左花括号{ 放于关键字或方法名的同一行末尾。
通常右花括号}独立成行,不与任何语句并列一行。
If、for、while、do等语句后必须使用{},即使{}号中为空或只有一条语句。
右花括号}后加注释说明语句块结束。
JAVASCRIPT开发规范
JAVASCRIPT开发规范∙JavaScript 是一种客户端脚本语言, Google 的许多开源工程中都有用到它. 这份指南列出了编写JavaScript 时需要遵守的规则.∙Alipay 前端JavaScript 以些规范为准,局部有所修改注:/svn/trunk/javascriptguide.xml∙声明变量必须加上var 关键字.∙Decision: 当你没有写var , 变量就会暴露在全局上下文中, 这样很可能会和现有变量冲突. 另外, 如果没有加上, 很难明确该变量的作用域是什么, 变量也很可能像在局部作用域中, 很轻易地泄漏到Document 或者Window 中, 所以务必用var 去声明变量.∙常量的形式如: NAMES_LIKE_THIS , 即使用大写字符, 并用下划线分隔. 你也可用@const 标记来指明它是一个常量. 但请永远不要使用const 关键词.∙Decision:(1) 对于基本类型的常量, 只需转换命名./*** The number of seconds in a minute.* @type {number}*/goog.example.SECONDS_IN_A_MINUTE = 60;(2) 对于非基本类型, 使用@const 标记./*** The number of seconds in each of the given units.* @type {Object.<number>}* @const*/goog.example.SECONDS_TABLE = {minute: 60,hour: 60 * 60,day: 60 * 60 * 24}这标记告诉编译器它是常量.至于关键词const , 因为IE 不能识别, 所以不要使用.∙总是使用分号.∙如果仅依靠语句间的隐式分隔, 有时会很麻烦. 你自己更能清楚哪里是语句的起止.∙而且有些情况下, 漏掉分号会很危险:// 1.MyClass.prototype.myMethod = function() {return 42;} // No semicolon here.(function() {// Some initialization code wrapped in a function to create a scope for locals.})();var x = {'i': 1,'j': 2} // No semicolon here.// 2. Trying to do one thing on Internet Explorer and another on Firefox.// I know you'd never write code like this, but throw me a bone.[normalVersion, ffVersion][isIE]();var THINGS_TO_EAT = [apples, oysters, sprayOnCheese] // No semicolon here.// 3. conditional execution a la bash-1 == resultOfOperation() || die();这段代码会发生些什么诡异事呢?1.报JavaScript 错误- 例子1上的语句会解释成, 一个函数带一匿名函数作为参数而被调用, 返回42后, 又一次被"调用", 这就导致了错误.2.例子2中, 你很可能会在运行时遇到'no such property in undefined' 错误, 原因是代码试图这样x[ffVersion][isIE]() 执行.3.当resultOfOperation() 返回非NaN 时, 就会调用die , 其结果也会赋给THINGS_TO_EAT .为什么?∙JavaScript 的语句以分号作为结束符, 除非可以非常准确推断某结束位置才会省略分号. 上面的几个例子产出错误, 均是在语句中声明了函数/对象/数组直接量, 但闭括号('}'或']')并不足以表示该语句的结束. 在JavaScript 中, 只有当语句后的下一个符号是后缀或括号运算符时, 才会认为该语句的结束.∙遗漏分号有时会出现很奇怪的结果, 所以确保语句以分号结束.∙可以使用∙嵌套函数很有用, 比如,减少重复代码, 隐藏帮助函数, 等. 没什么其他需要注意的地方, 随意使用.∙不要在块内声明一个函数,不要写成:if (x) {function foo() {}}∙虽然很多JS 引擎都支持块内声明函数, 但它不属于ECMAScript 规范(见ECMA-262, 第13和14条). 各个浏览器糟糕的实现相互不兼容, 有些也与未来ECMAScript 草案相违背. ECMAScript 只允许在脚本的根语句或函数中声明函数. 如果确实需要在块中定义函数, 建议使用函数表达式来初始化变量:if (x) {var foo = function() {}}∙可以∙你在写一个比较复杂的应用时, 不可能完全避免不会发生任何异常. 大胆去用吧.∙可以∙有时发生异常了, 但返回的错误信息比较奇怪, 也不易读. 虽然可以将含错误信息的引用对象或者可能产生错误的完整对象传递过来, 但这样做都不是很好, 最好还是自定义异常类, 其实这些基本上都是最原始的异常处理技巧. 所以在适当的时候使用自定义异常.∙总是优于非标准特性.∙最大化可移植性和兼容性, 尽量使用标准方法而不是用非标准方法, (比如, 优先用string.charAt(3) 而不用string[3] , 通过DOM 原生函数访问元素, 而不是使用应用封装好的快速接口.∙不要∙没有任何理由去封装基本类型, 另外还存在一些风险: var x = new Boolean(false);if (x) {alert('hi'); // Shows 'hi'.}∙除非明确用于类型转换, 其他情况请千万不要这样做!var x = Boolean(0);if (x) {alert('hi'); // This will never be alerted.}typeof Boolean(0) == 'boolean';typeof new Boolean(0) == 'object';∙有时用作number , string 或boolean 时, 类型的转换会非常实用.∙不是首选∙多级原型结构是指JavaScript 中的继承关系. 当你自定义一个D类, 且把B类作为其原型, 那么这就获得了一个多级原型结构. 这些原型结构会变得越来越复杂!∙使用Arale 中的inherits 或其他类似的用于继承的函数, 会是更好的选择. function MyClass() {doSomeThing()}arale.inherits(MyClass, Parent);MyClass.prototype.method = function() {...};有很多方法可以给构造器添加方法或成员, 我们更倾向于使用如下的形式: Foo.prototype.bar = function() {/* ... */};∙可以, 但小心使用.∙闭包也许是JS 中最有用的特性了. 有一份比较好的介绍闭包原理的文档.∙有一点需要牢记, 闭包保留了一个指向它封闭作用域的指针, 所以, 在给DOM 元素附加闭包时, 很可能会产生循环引用, 进一步导致内存泄漏. 比如下面的代码: functionfoo(element, a, b) {element.onclick = function() { /* uses a and b */ };}∙这里, 即使没有使用element , 闭包也保留了element , a 和b 的引用, . 由于element 也保留了对闭包的引用, 这就产生了循环引用, 这就不能被GC 回收. 这种情况下, 可将代码重构为:function foo(element, a, b) {element.onclick = bar(a, b);}function bar(a, b) {return function() { /* uses a and b */ }}∙只用于解析序列化串(如: 解析RPC 响应)∙eval() 会让程序执行的比较混乱, 当eval() 里面包含用户输入的话就更加危险. 可以用其他更佳的, 更清晰, 更安全的方式写你的代码, 所以一般情况下请不要使用eval().当碰到一些需要解析序列化串的情况下(如, 计算RPC 响应), 使用eval 很容易实现.∙解析序列化串是指将字节流转换成内存中的数据结构. 比如, 你可能会将一个对象输出成文件形式: users = [{name: 'Eric',id: 37824,email: 'jellyvore@'},{name: 'xtof',id: 31337,email: 'b4d455h4x0r@'},...];∙很简单地调用eval 后, 把表示成文件的数据读取回内存中.∙类似的, eval() 对RPC 响应值进行解码. 例如, 你在使用XMLHttpRequest 发出一个RPC 请求后, 通过eval () 将服务端的响应文本转成JavaScript 对象:var userOnline = false;var user = 'nusrat';var xmlhttp = new XMLHttpRequest();xmlhttp.open('GET', '/isUserOnline?user=' + user, false);xmlhttp.send('');// Server returns:// userOnline = true;if (xmlhttp.status == 200) {eval(xmlhttp.responseText);}// userOnline is now true.∙不要使用∙使用with 让你的代码在语义上变得不清晰. 因为with 的对象, 可能会与局部变量产生冲突, 从而改变你程序原本的用义. 下面的代码是干嘛的? with (foo) {var x = 3;return x;}∙答案: 任何事. 局部变量x 可能被foo 的属性覆盖, 当它定义一个setter 时, 在赋值3 后会执行很多其他代码. 所以不要使用with 语句.∙仅在对象构造器, 方法, 闭包中使用.∙this 的语义很特别. 有时它引用一个全局对象(大多数情况下), 调用者的作用域(使用eval 时), DOM 树中的节点(添加事件处理函数时), 新创建的对象(使用一个构造器), 或者其他对象(如果函数被call() 或apply() ).∙使用时很容易出错, 所以只有在下面两个情况时才能使用:∙在构造器中对象的方法(包括创建的闭包)中∙只用于object/map/hash 的遍历∙对Array 用for-in 循环有时会出错. 因为它并不是从0 到length - 1 进行遍历, 而是所有出现在对象及其原型链的键值. 下面就是一些失败的使用案例: functionprintArray(arr) {for (var key in arr) {print(arr[key]);}}printArray([0,1,2,3]); // This works.var a = new Array(10);printArray(a); // This is wrong.a = document.getElementsByTagName('*');printArray(a); // This is wrong.a = [0,1,2,3];a.buhu = 'wine';printArray(a); // This is wrong again.a = new Array;a[3] = 3;printArray(a); // This is wrong again.∙而遍历数组通常用最普通的for 循环.function printArray(arr) {var l = arr.length;for (var i = 0; i < l; i++) {print(arr[i]);}}∙永远不要使用Array 作为map/hash/associative 数组.∙数组中不允许使用非整型作为索引值, 所以也就不允许用关联数组. 而取代它使用Object 来表示map/hash 对象. Array 仅仅是扩展自Object (类似于其他JS 中的对象, 就像Date , RegExp 和String )一样来使用.∙不要使用∙不要这样写长字符串: var myString = 'A rather long string of English text, an error message \actually that just keeps going and going -- an error \message to make the Energizer bunny blush (right through \those Schwarzenegger shades)! Where was I? Oh yes, \you\'ve got an error and all the extraneous whitespace is \just gravy. Have a nice day.';在编译时, 不能忽略行起始位置的空白字符; "\" 后的空白字符会产生奇怪的错误; 虽然大多数脚本引擎支持这种写法, 但它不是ECMAScript 的标准规范.∙使用∙使用Array 和Object 语法, 而不使用Array 和Object 构造器.∙使用Array 构造器很容易因为传参不恰当导致错误.// Length is 3.var a1 = new Array(x1, x2, x3);// Length is 2.var a2 = new Array(x1, x2);// If x1 is a number and it is a natural number the length will be x1.// If x1 is a number but not a natural number this will throw an exception.// Otherwise the array will have one element with x1 as its value.var a3 = new Array(x1);// Length is 0.var a4 = new Array();∙如果传入一个参数而不是2个参数, 数组的长度很有可能就不是你期望的数值了. 为了避免这些歧义,我们应该使用更易读的直接量来声明.var a = [x1, x2, x3];var a2 = [x1, x2];var a3 = [x1];var a4 = [];∙虽然Object 构造器没有上述类似的问题, 但鉴于可读性和一致性考虑, 最好还是在字面上更清晰地指明.var o = new Object();var o2 = new Object();o2.a = 0;o2.b = 1;o2.c = 2;o2['strange key'] = 3;应该写成:var o = {};var o2 = {a: 0,b: 1,c: 2,'strange key': 3};∙不要∙千万不要修改内置对象, 如Object.prototype 和Array.prototype 的原型. 而修改内置对象, 如Function.prototype 的原型, 虽然少危险些, 但仍会导致调试时的诡异现象.所以也要避免修改其原型.∙不要使用∙不要这样子写:var f = function () {/@cc_on if (@_jscript) { return 2* @/ 3; /@ } @/};条件注释妨碍自动化工具的执行, 因为在运行时, 它们会改变JavaScript 语法树.通常, 使用functionNamesLikeThis , variableNamesLikeThis , ClassNamesLikeThis , EnumNamesLikeThis , methodNamesLikeThis , 和SYMBOLIC_CONSTANTS_LIKE_THIS .A. 属性和方法∙文件或类中的私有属性, 变量和方法名应该以下划线"_" 开头.∙保护属性, 变量和方法名不需要下划线开头, 和公共变量名一样.更多有关私有和保护的信息见, visibility.B.方法和函数参数可选参数以opt_ 开头.∙函数的参数个数不固定时, 应该添加最后一个参数var_args 为参数的个数. 你也可以不设置var_args 而取代使用arguments .∙可选和可变参数应该在@param 标记中说明清楚. 虽然这两个规定对编译器没有任何影响, 但还是请尽量遵守C. Getters 和SettersGetters 和setters 并不是必要的. 但只要使用它们了, 就请将getters 命名成getFoo() 形式, 将setters 命名成setFoo(value) 形式. (对于布尔类型的getters, 使用isFoo() 也可.)D. 命名空间∙JavaScript 不支持包和命名空间.∙不容易发现和调试全局命名的冲突, 多个系统集成时还可能因为命名冲突导致很严重的问题. 为了提高JavaScript 代码复用率, 我们遵循下面的约定以避免冲突.∙为全局代码使用命名空间∙在全局作用域上, 使用一个唯一的, 与工程/库相关的名字作为前缀标识. 比如, 你的工程是"Project Sloth", 那么命名空间前缀可取为sloth.* .var sloth = {};sloth.sleep = function() {...};∙许多JavaScript 库, 包括the Closure Library and Dojo toolkit为你提供了声明你自己的命名空间的函数. 比如:goog.provide('sloth');sloth.sleep = function() {...};∙明确命名空间所有权∙当选择了一个子命名空间, 请确保父命名空间的负责人知道你在用哪个子命名空间, 比如说, 你为工程'sloths' 创建一个'hats' 子命名空间, 那确保Sloth团队人员知道你在使用sloth.hats .外部代码和内部代码使用不同的命名空间"外部代码" 是指来自于你代码体系的外部, 可以独立编译. 内外部命名应该严格保持独立. 如果你使用了外部库, 他的所有对象都在foo.hats.* 下, 那么你自己的代码不能在foo.hats.* 下命名, 因为很有可能其他团队也在其中命名.foo.require('foo.hats');/*** WRONG -- Do NOT do this.* @constructor* @extend {foo.hats.RoundHat}*/foo.hats.BowlerHat = function() {};∙如果你需要在外部命名空间中定义新的API, 那么你应该直接导出一份外部库,然后在这份代码中修改. 在你的内部代码中, 应该通过他们的内部名字来调用内部API , 这样保持一致性可让编译器更好的优化你的代码.foo.provide('googleyhats.BowlerHat');foo.require('foo.hats');/*** @constructor* @extend {foo.hats.RoundHat}*/googleyhats.BowlerHat = function() {...}; goog.exportSymbol('foo.hats.BowlerHat', googleyhats.BowlerHat);∙重命名那些名字很长的变量, 提高可读性主要是为了提高可读性. 局部空间中的变量别名只需要取原名字的最后部分./*** @constructor*/space.MyClass = function() {};/*** @param {space.MyClass} a*/space.MyClass.staticHelper = function(a) {...};myapp.main = function() {var MyClass = space.MyClass;var staticHelper = space.MyClass.staticHelper;staticHelper(new MyClass());};∙不要对命名空间创建别名.myapp.main = function() {var namespace = space;namespace.MyClass.staticHelper(new namespace.MyClass());};∙除非是枚举类型, 不然不要访问别名变量的属性./** @enum {string} */space.Fruit = {APPLE: 'a',BANANA: 'b'};myapp.main = function() {var Fruit = space.Fruit;switch (fruit) {case Fruit.APPLE:...case Fruit.BANANA:... }}; myapp.main = function() {var MyClass = space.MyClass;MyClass.staticHelper(null);};∙不要在全局范围内创建别名, 而仅在函数块作用域中使用.E. 文件名文件名应该使用小写字符, 以避免在有些系统平台上不识别大小写的命名方式. 文件名以 .js 结尾, 不要包含除- 和_ 外的标点符号(使用- 优于_ ).F. JS 钩子JS 钩子一律使用“J-” 前缀,如:#J-ui-repeater∙应该总是成功调用且不要抛异常.∙可自定义toString() 方法, 但确保你的实现方法满足:∙1.总是成功2.没有其他负面影响. 如果不满足这两个条件, 那么可能会导致严重的问题, 比如, 如果toString() 调用了包含assert 的函数, assert 输出导致失败的对象,这在toString() 也会被调用.∙可以∙没必要在每次声明变量时就将其初始化.∙任何时候都需要∙任何时候都要明确作用域- 提高可移植性和清晰度. 例如, 不要依赖于作用域链中的window 对象. 可能在其他应用中, 你函数中的window 不是指之前的那个窗口对象.主要依照C++ 格式规范(中文版), 针对JavaScript, 还有下面一些附加说明.A. 大括号分号会被隐式插入到代码中, 所以你务必在同一行上插入大括号. 例如:if (something) {// ...} else {// ...}B. 数组和对象的初始化∙如果初始值不是很长, 就保持写在单行上:var arr = [1, 2, 3]; // No space after [ or before ].var obj = {a: 1, b: 2, c: 3}; // No space after { or before }.∙初始值占用多行时, 缩进2个空格.// Object initializer.var inset = {top: 10,right: 20,bottom: 15,left: 12 };// Array initializer.this.rows_ = ['"Slartibartfast" <fjordmaster@>','"Zaphod Beeblebrox" <theprez@>','"Ford Prefect" <ford@>','"Arthur Dent" <has.no.tea@>','"Marvin the Paranoid Android" <marv@>','the.mice@' ];// Used in a method call.goog.dom.createDom(goog.dom.TagName.DIV, {id: 'foo',className: 'some-css-class',style: 'display:none'}, 'Hello, world!');∙比较长的标识符或者数值, 不要为了让代码好看些而手工对齐. 如: CORRECT_Object.prototype = {a: 0,b: 1,lengthyName: 2};∙不要这样做:WRONG_Object.prototype = {a : 0,b : 1,lengthyName: 2};C. 函数参数∙尽量让函数参数在同一行上. 如果一行超过80 字符, 每个参数独占一行, 并以4个空格缩进, 或者与括号对齐, 以提高可读性. 尽可能不要让每行超过80个字符. 比如下面这样:// Four-space, wrap at 80. Works with very long function names, survives// renaming without reindenting, low on space.goog.foo.bar.doThingThatIsVeryDifficultToExplain = function(veryDescriptiveArgumentNumberOne, veryDescriptiveArgumentTwo,tableModelEventHandlerProxy, artichokeDescriptorAdapterIterator) {// ...};// Four-space, one argument per line. Works with long function names,// survives renaming, and emphasizes each argument.goog.foo.bar.doThingThatIsVeryDifficultToExplain = function(veryDescriptiveArgumentNumberOne,veryDescriptiveArgumentTwo,tableModelEventHandlerProxy,artichokeDescriptorAdapterIterator) {// ...};// Parenthesis-aligned indentation, wrap at 80. Visually groups arguments,// low on space.function foo(veryDescriptiveArgumentNumberOne, veryDescriptiveArgumentTwo,tableModelEventHandlerProxy, artichokeDescriptorAdapterIterator) {// ...}// Parenthesis-aligned, one argument per line. Visually groups and// emphasizes each individual argument.function bar(veryDescriptiveArgumentNumberOne,veryDescriptiveArgumentTwo,tableModelEventHandlerProxy,artichokeDescriptorAdapterIterator) {// ...}D. 传递匿名函数如果参数中有匿名函数, 函数体从调用该函数的左边开始缩进2个空格, 而不是从function 这个关键字开始. 这让匿名函数更加易读(不要增加很多没必要的缩进让函数体显示在屏幕的右侧). var names = items.map(function(item) {return ;});prefix.something.reallyLongFunctionName('whatever', function(a1, a2) {if (a1.equals(a2)) {someOtherLongFunctionName(a1);} else {andNowForSomethingCompletelyDifferent(a2.parrot);}});E. 更多的缩进事实上, 除了初始化数组和对象, 和传递匿名函数外, 所有被拆开的多行文本要么选择与之前的表达式左对齐, 要么以4个(而不是2个)空格作为一缩进层次.someWonderfulHtml = '' +getEvenMoreHtml(someReallyInterestingValues, moreValues,evenMoreParams, 'a duck', true, 72,slightlyMoreMonkeys(0xfff)) +'';thisIsAVeryLongVariableName = hereIsAnEvenLongerOtherFunctionNameThatWillNotFitOnPrevLine();thisIsAVeryLongVariableName = 'expressionPartOne' + someMethodThatIsLong() + thisIsAnEvenLongerOtherFunctionNameThatCannotBeIndentedMore();someValue = this.foo(shortArg,'Some really long string arg - this is a pretty common case, actually.',shorty2,this.bar());if (searchableCollection(allYourStuff).contains(theStuffYouWant) &&!ambientNotification.isActive() && (client.isAmbientSupported() ||client.alwaysTryAmbientAnyways()) {ambientNotification.activate();}F. 空行使用空行来划分一组逻辑上相关联的代码片段.doSomethingTo(x);doSomethingElseTo(x);andThen(x);nowDoSomethingWith(y);andNowWith(z);G. 二元和三元操作符操作符始终跟随着前行, 这样就不用顾虑分号的隐式插入问题. 如果一行实在放不下, 还是按照上述的缩进风格来换行. var x = a ? b : c; // All on one line if it will fit.// Indentation +4 is OK.var y = a ?longButSimpleOperandB : longButSimpleOperandC;// Indenting to the line position of the first operand is also OK.var z = a ?moreComplicatedB :moreComplicatedC;∙只在需要的时候使用∙不要滥用括号, 只在必要的时候使用它.∙对于一元操作符(如delete , typeof 和void ), 或是在某些关键词(如return , throw , case , new )之后, 不要使用括号.∙使用' 优于"∙单引号(') 优于双引号("). 当你创建一个包含HTML 代码的字符串时就知道它的好处了.∙var msg = 'This is some HTML';∙推荐使用JSDoc 中的两个标记: @private 和@protected∙JSDoc 的两个标记@private 和@protected 用来指明类, 函数, 属性的可见性域. ∙标记为@private 的全局变量和函数, 表示它们只能在当前文件中访问.∙标记为@private 的构造器, 表示该类只能在当前文件或是其静态/普通成员中实例化;私有构造器的公共静态属性在当前文件的任何地方都可访问, 通过instanceof 操作符也可.∙永远不要为全局变量, 函数, 构造器加@protected 标记. // File 1.// AA_PrivateClass_ and AA_init_ are accessible because they are global// and in the same file./*** @private* @constructor*/AA_PrivateClass_ = function() {};/** @private */function AA_init_() {return new AA_PrivateClass_();}AA_init_();∙标记为@private 的属性, 在当前文件中可访问它; 如果是类属性私有, "拥有"该属性的类的所有静态/普通成员也可访问, 但它们不能被不同文件中的子类访问或覆盖.∙标记为@protected 的属性, 在当前文件中可访问它, 如果是类属性保护, 那么"拥有"该属性的类及其子类中的所有静态/普通成员也可访问.∙注意: 这与C+, Java 中的私有和保护不同, 它们是在当前文件中, 检查是否具有访问私有/保护属性的权限, 有权限即可访问, 而不是只能在同一个类或类层次上. 而C+ 中的私有属性不能被子类覆盖. (C++/Java 中的私有/保护是指作用域上的可访问性, 在可访问性上的限制. JS 中是在限制在作用域上. PS: 可见性是与作用域对应)// File 1./** @constructor */AA_PublicClass = function() {};/** @private */AA_PublicClass.staticPrivateProp_ = 1;/** @private */AA_PublicClass.prototype.privateProp_ = 2;/** @protected */AA_PublicClass.staticProtectedProp = 31;/** @protected */AA_PublicClass.prototype.protectedProp = 4;// File 2./*** @return {number} The number of ducks we've arranged in a row. */AA_PublicClass.prototype.method = function() {// Legal accesses of these two properties.return this.privateProp_ + AA_PublicClass.staticPrivateProp_; };// File 3./*** @constructor* @extends {AA_PublicClass}*/AA_SubClass = function() {// Legal access of a protected static property.AA_PublicClass.staticProtectedProp = this.method();};goog.inherits(AA_SubClass, AA_PublicClass);/*** @return {number} The number of ducks we've arranged in a row. */AA_SubClass.prototype.method = function() {// Legal access of a protected instance property.return this.protectedProp; };∙强烈建议你去使用编译器.∙如果使用JSDoc, 那么尽量具体地, 准确地根据它的规则来书写类型说明. 目前支持两种JS2和JS1.x 类型规范.∙JavaScript 类型语言*/function MyClass(value) {/*** Some value.* @type {Object}* @private*/this.myValue_ = value;}告诉编译器myValue_ 属性为一对象或null. 如果myValue_ 永远都不会为null, 就应该如下声明:/*** Some class, initialized with a non-null value.* @param {!Object} value Some value.* @constructor*/function MyClass(value) {/*** Some value.* @type {!Object}* @private*/this.myValue_ = value;}这样, 当编译器在代码中碰到MyClass 为null 时, 就会给出警告.函数的可选参数可能在运行时没有定义, 所以如果他们又被赋给类属性, 需要声明成:/*** Some class, initialized with an optional value.* @param {Object=} opt_value Some value (optional).* @constructor*/function MyClass(opt_value) {/*** Some value.* @type {Object|undefined}* @private*/this.myValue_ = opt_value;}这告诉编译器myValue_ 可能是一个对象, 或null, 或undefined.注意: 可选参数opt_value 被声明成{Object=} , 而不是{Object|undefined} . 这是因为可选参数可能是undefined. 虽然直接写undefined 也并无害处, 但鉴于可阅读性还是写成上述的样子.最后, 属性的非空和可选并不矛盾, 属性既可是非空, 也可是可选的. 下面的四种声明各不相同: /*** Takes four arguments, two of which are nullable, and two of which are* optional.* @param {!Object} nonNull Mandatory (must not be undefined), must not be null.* @param {Object} mayBeNull Mandatory (must not be undefined), may be null.* @param {!Object=} opt_nonNull Optional (may be undefined), but if present,* must not be null!* @param {Object=} opt_mayBeNull Optional (may be undefined), may be null.*/function strangeButTrue(nonNull, mayBeNull, opt_nonNull, opt_mayBeNull) {// ...};A. 使用JSDoc我们使用JSDoc中的注释风格. 行内注释使用// 变量的形式. 另外, 我们也遵循C++ 代码注释风格 . 这也就是说你需要:∙版权和著作权的信息,∙文件注释中应该写明该文件的基本信息(如, 这段代码的功能摘要, 如何使用, 与哪些东西相关), 来告诉那些不熟悉代码的读者.∙类, 函数, 变量和必要的注释,∙期望在哪些浏览器中执行,∙正确的大小写, 标点和拼写.为了避免出现句子片段, 请以合适的大/小写单词开头, 并以合适的标点符号结束这个句子.现在假设维护这段代码的是一位初学者. 这可能正好是这样的! 目前很多编译器可从JSDoc 中提取类型信息, 来对代码进行验证, 删除和压缩. 因此, 你很有必要去熟悉正确完整的JSDoc .B. 顶层/文件注释顶层注释用于告诉不熟悉这段代码的读者这个文件中包含哪些东西. 应该提供文件的大体内容, 它的作者, 依赖关系和兼容性信息. 如下:// Copyright 2009 Google Inc. All Rights Reserved.* @fileoverview Description of file, its uses and information* about its dependencies.* @author user@ (Firstname Lastname)*/C. 类注释∙每个类的定义都要附带一份注释, 描述类的功能和用法. 也需要说明构造器参数. 如果该类继承自其它类, 应该使用@extends 标记. 如果该类是对接口的实现, 应该使用@implements 标记./*** Class making something fun and easy.* @param {string} arg1 An argument that makes this more interesting.* @param {Array.<number>} arg2 List of numbers to be processed.* @constructor* @extends {goog.Disposable}*/project.MyClass = function(arg1, arg2) {// ...};goog.inherits(project.MyClass, goog.Disposable);∙方法与函数的注释. 提供参数的说明. 使用完整的句子, 并用第三人称来书写方法说明./*** Converts text to some completely different text.* @param {string} arg1 An argument that makes this more interesting.* @return {string} Some return value.*/project.MyClass.prototype.someMethod = function(arg1) {// ...};/*** Operates on an instance of MyClass and returns something.* @param {project.MyClass} obj Instance of MyClass which leads to a long* comment that needs to be wrapped to two lines.* @return {boolean} Whether something occured.*/function PR_someMethod(obj) {// ...}∙对于一些简单的, 不带参数的getters, 说明可以忽略./*** @return {Element} The element for the component.*/ponent.prototype.getElement = function() {return this.element_;};D. 属性注释需要对属性进行注释./*** Maximum number of things per pane.* @type {number}*/project.MyClass.prototype.someProperty = 4;E. 类型转换的注释有时, 类型检查不能很准确地推断出表达式的类型, 所以应该给它添加类型标记注释来明确之, 并且必须在表达式和类型标签外面包裹括号./** @type {number} */ (x)(/** @type {number} */ x)F. JSDoc 缩进∙如果你在@param , @return , @supported , @this 或@deprecated 中断行, 需要像在代码中一样, 使用4个空格作为一个缩进层次./*** Illustrates line wrapping for long param/return descriptions.* @param {string} foo This is a param with a description too long to fit in* one line.* @return {number} This returns something that has a description too long to* fit in one line.*/project.MyClass.prototype.method = function(foo) {return 5;};∙不要在@fileoverview 标记中进行缩进.∙虽然不建议, 但也可对说明文字进行适当的排版对齐. 不过, 这样带来一些负面影响, 就是当你每次修改变量名时, 都得重新排版说明文字以保持和变量名对齐. /*** This is NOT the preferred indentation method.* @param {string} foo This is a param with a description too long to fit in* one line.* @return {number} This returns something that has a description too long to * fit in one line.*/project.MyClass.prototype.method = function(foo) {return 5;};枚举/*** Enum for tri-state values.* @enum {number}*/project.TriState = {TRUE: 1,FALSE: -1,MAYBE: 0};注意一下, 枚举也具有有效类型, 所以可以当成参数类型来用./*** Sets project state.* @param {project.TriState} state New project state.*/project.setState = function(state) {// ...};G. Typedefs有时类型会很复杂. 比如下面的函数, 接收Element 参数:/*** @param {string} tagName* @param {(string|Element|Text|Array.<Element>|Array.<Text>)} contents* @return {Element}*/goog.createElement = function(tagName, contents) {...};你可以使用@typedef 标记来定义个常用的类型表达式./** @typedef {(string|Element|Text|Array.<Element>|Array.<Text>)} */goog.ElementContent;/*** @param {string} tagName* @param {goog.ElementContent} contents* @return {Element}*/goog.createElement = function(tagName, contents) { ...};H. JSDoc 标记表/** @lends {Button.prototype} */ { isButton: function() { return true; } 表示把对象的键看成是其他对象的属性. 该标记只能出现在对象语法中. 注意, 括号中的名称和其他标记中的类型名称不一样, 它是一个对象名, 以"借过来"的属性名命名.如, @type {Foo} 表示"Foo 的一个实例",but @lends {Foo} 表示"Foo 构造器". 更多有关此标记的内容见JSDoc Toolkit docs.会检查在第三方代码中, 你还会见到其他一些JSDoc 标记. 这些标记在JSDoc Toolkit Tag Reference都有介绍到, 但在Google 的代码中, 目前不推荐使用. 你可以认为这些是将来会用到的"保留" 名. 它们包含:∙@augments∙@argument∙@borrows∙@class∙@constant∙@constructs∙@default∙@event∙@example∙@field∙@function∙@ignore∙@inner∙@link∙@memberOf∙@name∙@namespace∙@property∙@public∙@requires∙@returns∙@since∙@static∙@versionI. JSDoc 中的HTML类似于JavaDoc, JSDoc 支持许多HTML 标签, 如<code>, <pre>, <tt>, <strong>, <ul>, <ol>, <li>, <a>, 等等. 这就是说JSDoc 不会完全依照纯文本中书写的格式. 所以, 不要在JSDoc 中, 使用空白字符来做格式化:/*** Computes weight based on three factors:* items sent* items received* last timestamp*/上面的注释, 出来的结果是:Computes weight based on three factors: items sent items received items received应该这样写:/*** Computes weight based on three factors:* <ul>* <li>items sent* <li>items received* <li>last timestamp* </ul>*/另外, 也不要包含任何HTML 或类HTML 标签, 除非你就想让它们解析成HTML 标签./*** Changes <b> tags to <span> tags.*/出来的结果是:Changes tags to tags.另外, 也应该在源代码文件中让其他人更可读, 所以不要过于使用HTML 标签:/*** Changes <b> tags to <span> tags.*/上面的代码中, 其他人就很难知道你想干嘛, 直接改成下面的样子就清楚多了:/*** Changes 'b' tags to 'span' tags.*/推荐使用建议您去使用JS 编译器, 如Closure Compiler.A. JavaScript 小技巧(1) True 和False 布尔表达式下面的布尔表达式都返回false:∙null∙undefined∙'' 空字符串∙0 数字0但小心下面的, 可都返回true:∙'0' 字符串0∙[] 空数组∙{} 空对象下面段比较糟糕的代码:while (x != null) {你可以直接写成下面的形式(只要你希望x 不是0 和空字符串, 和false): while (x) {如果你想检查字符串是否为null 或空:if (y != null && y != '') {但这样会更好:if (y) {注意: 还有很多需要注意的地方, 如:∙Boolean('0') == true'0' != true∙0 != null0 == []0 == false∙Boolean(null) == falsenull != truenull != false∙Boolean(undefined) == falseundefined != trueundefined != false∙Boolean([]) == true[] != true[] == false∙Boolean({}) == true{} != true{} != false(2) 条件(三元)操作符(?:)三元操作符用于替代下面的代码:if (val != 0) {return foo();} else {return bar();}你可以写成:return val ? foo() : bar();在生成HTML 代码时也是很有用的:var html = '<input type="checkbox"' +(isChecked ? ' checked' : '') +(isEnabled ? '' : ' disabled') +' name="foo">';(3) && 和||二元布尔操作符是可短路的, 只有在必要时才会计算到最后一项. "||" 被称作为'default' 操作符, 因为可以这样:/* @param {=} opt_win */function foo(opt_win) {var win;if (opt_win) {win = opt_win;} else {win = window;} // ...}。
javascript规范
javascript规范JavaScript是一种广泛用于Web开发的编程语言,因其灵活性和易学性而成为了开发者的首选。
为了使代码清晰、易读、易于维护,制定了一些JavaScript规范。
本文将介绍一些常见的JavaScript规范,以帮助开发者写出更好的代码。
1. 变量和函数命名变量和函数的命名应该具有描述性,并且尽量避免使用简写。
同时,应使用驼峰命名法,即首字母小写,后续每个单词的首字母大写。
2. 缩进代码应该使用四个空格进行缩进。
可以在代码编辑器中设置自动缩进功能。
3. 空格在运算符(如=、+、-等)周围使用空格,例如:var x = y + z。
在逗号前不加空格,逗号后加一个空格。
4. 分号每行代码的末尾应添加分号。
这有助于提高代码的可读性,并防止一些意外的错误。
5. 注释对于代码中关键部分的注释是很重要的。
对于复杂的逻辑,应该用注释解释每个步骤的目的。
另外,注释也可以用来标明代码的作者、日期和版本号。
6. 变量声明变量应该在使用前首次声明,并且应该使用let或const关键字进行声明。
尽量避免使用var关键字。
7. 字符串应该使用单引号或反引号而不是双引号来定义字符串。
如果字符串中包含变量或表达式,应使用反引号。
例如:`Hello, ${name}!`8. 对象和数组对象和数组的定义应在一行内写完,而不是换行。
每个属性或元素在下一行单独缩进一次。
9. 条件语句条件语句的代码块应该使用花括号括起来,即使代码块只有一行。
这样可以提高代码的可读性和可维护性。
10. 函数函数应该有明确的输入和输出,并且每个函数只完成一个特定的任务。
函数的代码块应该缩进,并且最好在函数的开始处添加注释,解释函数的作用和参数的含义。
11. 模块化JavaScript中的模块化有助于将代码拆分成更小的、可重用的部分。
应该使用ES6的模块化语法,即使用import和export 关键字来导入和导出模块。
12. 错误处理对可能发生错误的代码应进行适当的错误处理。
JS规范文档范文
JS规范文档范文JavaScript(简称JS)是一种广泛应用于Web开发的脚本语言。
为了提高代码的可读性、维护性和可扩展性,JavaScript社区制定了一系列代码规范。
本文将介绍一些常见的JavaScript规范,并提供一些编码建议和最佳实践。
一、命名规范1. 变量和函数名使用驼峰命名法(camelCase),即首字母小写,后面每个单词的首字母大写。
2. 类名使用帕斯卡命名法(PascalCase),即每个单词的首字母大写。
3.常量使用全大写字母,多个单词用下划线分隔。
4.避免使用单个字符或者全称不清晰的缩写命名。
二、缩进和空格1.使用4个空格进行缩进,不使用制表符。
2.在每个逻辑块之前添加空行,提高代码的可读性。
3.运算符两侧添加空格,增加代码的可读性。
三、注释规范1.使用行注释(//)或者块注释(/**/)对代码进行注释。
2.注释应该清楚地描述代码的功能和用途。
3.代码的重要或复杂部分应该进行详细的注释,帮助他人理解代码。
四、函数规范1.函数应该完成一个具体的任务,保持简洁和可复用。
2.函数的命名应该清晰表达其功能。
3.函数的参数应该明确,避免使用过多的参数,可以使用对象作为参数。
4.函数应该有明确的返回值,避免使用全局变量。
五、条件语句和循环1.使用大括号({})包裹条件语句和循环体,即使只有一行代码。
2.在条件语句中始终使用严格等于(===)运算符,避免隐式类型转换。
3.避免在条件判断中使用赋值操作符(=),使用比较操作符(==或者===)。
六、模块化和文件结构1. 将JavaScript代码分为多个模块,每个模块负责一个功能。
2. 使用ES6的模块化语法(import和export)进行模块化开发。
3.将不同功能的文件组织到不同的文件夹中,提高代码的可维护性。
七、错误处理1.避免使用全局异常处理,应该在代码内部进行错误处理。
2. 使用try-catch语句捕获和处理可能的异常。
3.使用适当的错误消息和错误类型,方便调试和定位问题。
JavaScript开发标准规范
JavaScript开发标准规范文件编号:起草部门:开发三部审核人:签发人:批准日期:版本标识:内部保密文件仅限内部使用文件修改控制 .......................................................................................................................................................... - 4 -1引言 ................................................................................................................................................................. - 5 -1.1简介.. (5)1.2目的 (5)1.3参考资料 (5)2源文件 ............................................................................................................................................................. - 5 -2.1源文件命名.. (5)2.2供发布的文件 (6)2.3版本信息和版权声明 (6)3命名规范.......................................................................................................................................................... - 6 -3.1组件和的命名. (6)3.2变量命名 (7)3.3全局变量命名 (7)3.4函数命名 (7)4空白的使用...................................................................................................................................................... - 8 -4.1空行.. (8)4.2空格 (9)4.3缩进 (9)5注释 ................................................................................................................................................................. - 9 -5.1版权信息注释.. (10)5.2组件注释 (10)5.3变量注释 (10)5.4函数注释 (10)5.5其他注释 (11)5.5.1代码修改的注释 .................................................................................................................................. - 11 -5.5.2冗余代码的注释 .................................................................................................................................. - 11 -6语句 ................................................................................................................................................................- 11 -6.1简单语句. (11)6.1.1赋值和表达式 ...................................................................................................................................... - 11 -6.1.2变量声明 .............................................................................................................................................. - 12 -6.1.3return语句 ............................................................................................................................................... - 12 -6.2复合语句 (12)6.2.1括号的格式 .......................................................................................................................................... - 12 -6.2.2IF语句....................................................................................................................................................... - 12 -6.2.3FOR语句................................................................................................................................................... - 13 -6.2.4WHILE语句............................................................................................................................................... - 13 -6.2.5DO-WHILE语句......................................................................................................................................... - 13 -6.2.6SWITCH语句............................................................................................................................................. - 13 -6.2.7TRY-CATCH语句 ........................................................................................................................................ - 14 -7附录 ................................................................................................................................................................- 14 -7.1缩写列表. (14)7.2JS优化常识 (14)7.2.1循环 ...................................................................................................................................................... - 14 -7.2.2局部变量和全局变量 .......................................................................................................................... - 15 -7.2.3不使用Eval .......................................................................................................................................... - 15 -7.2.4减少对象查找 ...................................................................................................................................... - 15 -7.2.5字符串连接 .......................................................................................................................................... - 15 -7.2.6类型转换 .............................................................................................................................................. - 16 -7.2.7使用直接量 .......................................................................................................................................... - 16 -7.2.8字符串遍历操作 .................................................................................................................................. - 17 -7.2.9高级对象 .............................................................................................................................................. - 17 -7.3DOM相关 .. (17)7.3.1插入HTML............................................................................................................................................ - 17 -7.3.2对象查询 .............................................................................................................................................. - 17 -7.3.3创建DOM节点.................................................................................................................................... - 17 -7.3.4定时器 .................................................................................................................................................. - 18 -7.4其他 (18)7.4.1脚本引擎 .............................................................................................................................................. - 18 -7.4.2文件优化 .............................................................................................................................................. - 18 -文件修改控制1 引言1.1 简介所有的程序开发手册都包含了各种规则。
JavaScript的代码规范
JavaScript的代码规范作为一门常用且灵活的编程语言,JavaScript能够为网页开发带来很多便利。
然而,由于其灵活性,JavaScript代码往往容易出现混乱和难以维护的问题。
为了提高代码的可读性和可维护性,制定并遵守一套良好的JavaScript代码规范是至关重要的。
一、命名规范1. 变量名、函数名和方法名应该使用驼峰命名法,即首字母小写,后续单词首字母大写。
例如:firstName。
2. 常量名应该全部大写,多个单词之间用下划线(_)分隔。
例如:MAX_COUNT。
3. 类名应该使用帕斯卡命名法,即首字母大写,后续单词首字母大写。
例如:Person。
二、缩进和空格1. 使用两个空格进行缩进,并确保在代码块之间的一致性。
2. 操作符前后应该加上空格,例如:var x = y + z;。
3. 在大括号({})前使用一个空格,例如:if (x > 0) {。
4. 在逗号(,)后面使用一个空格,例如:var fruits = ['apple', 'banana', 'orange'];。
三、注释规范1. 使用注释来解释代码的意图和功能,提高代码的可读性。
2. 使用单行注释(//)或多行注释(/* */)来注释代码。
3. 在函数、类和方法的上方使用多行注释来说明其功能和输入输出。
四、代码格式1. 所有语句结尾都应该加上分号(;),即使在可选的情况下也应该如此。
2. 在逻辑行结束后换行,不要过长的一行代码。
3. 在操作符之间使用空格,但在逗号后不需要加上空格。
4. 使用合理的缩进,保持代码块的整洁和可读性。
五、变量和常量声明1. 使用var来声明变量,避免使用全局变量。
2. 在函数或代码块的顶部声明变量,避免变量声明的提升带来的问题。
3. 声明变量时给其赋初值,避免出现undefined的情况。
4. 使用const或let来声明常量或块级作用域的变量,以提高代码的可维护性。
JavaScript 代码规范总结
JavaScript 代码规范目录1、常见代码规范 (2)2、空格与运算符 (2)3、变量名 (2)4、代码缩进 (2)5、语句规则 (3)6、对象规则 (3)7、每行代码字符小于 80 (4)8、命名规则 (4)9、使用 JavaScript 访问 HTML 元素 (5)10、HTML 载入外部 JavaScript 文件 (5)11、文件扩展名 (5)12、使用小写文件名 (5)1、常见代码规范代码规范通常包括以下几个方面:1.1变量和函数的命名规则1.2空格,缩进,注释的使用规则。
规范的代码可以更易于阅读与维护。
代码规范一般在开发前规定,可以跟你的团队成员来协商设置。
2、空格与运算符通常运算符 ( = + - * / ) 前后需要添加空格:3、变量名变量名推荐使用驼峰法来命名(camelCase):4、代码缩进通常使用 4 个空格符号来缩进代码块:不推荐使用 TAB 键来缩进,因为不同编辑器 TAB 键的解析不一样。
5、语句规则简单语句的通用规则:• 5.1一条语句通常以分号作为结束符。
复杂语句的通用规则:• 5.1将左花括号放在第一行的结尾。
• 5.2左花括号前添加一空格。
• 5.3将右花括号独立放在一行。
• 5.4不要以分号结束一个复杂的声明。
6、对象规则对象定义的规则:6.1将左花括号与类名放在同一行。
6.2冒号与属性值间有个空格。
6.3字符串使用双引号,数字不需要。
6.4最后一个属性-值对后面不要添加逗号。
6.5将右花括号独立放在一行,并以分号作为结束符号。
7、每行代码字符小于 80为了便于阅读每行字符建议小于数 80 个。
如果一个 JavaScript 语句超过了 80 个字符,建议在运算符或者逗号后换行。
8、命名规则一般很多代码语言的命名规则都是类似的,例如:8.1变量和函数为小驼峰法标识, 即除第一个单词之外,其他单词首字母大写(lowerCamelCase)8.2全局变量为大写 (UPPERCASE )8.3常量 (如 PI) 为大写 (UPPERCASE )9、使用 JavaScript 访问 HTML 元素一个糟糕的 HTML 格式可能会导致 JavaScript 执行错误。
js开发规范
js开发规范JavaScript开发规范(1000字)1. 缩进和空格:- 请使用四个空格作为一个缩进层级。
- 在函数、条件语句和循环语句内部,请使用换行符并且适当缩进,以提高代码的可读性。
2. 命名规范:- 变量和函数名请用小驼峰命名法(camelCase)。
- 类名请用大驼峰命名法(PascalCase)。
- 常量名请使用全大写字母和下划线分隔(UPPER_CASE)。
3. 代码注释:- 对于复杂的代码逻辑,请添加适当的注释以解释代码的意图和功能。
- 注释应该清晰、简洁,并使用正确的英语语法和拼写。
- 对于一些核心功能的注释,请务必详细解释其中的算法和思路。
4. 函数定义和调用:- 函数定义时请适当添加参数的类型信息。
- 调用函数时请确保函数名和参数之间有空格。
- 如果一个函数有多个参数,请按照从左到右的顺序依次列出参数。
5. 条件语句和循环语句:- 条件语句的括号内部请加上空格,例如:if (condition)。
- 在if语句的块状部分请使用大括号{},即使只有一行代码。
- 循环语句的条件部分请加上空格,例如:for (let i = 0; i < 10; i++)。
6. 异常处理:- 对于可能抛出异常的代码,请使用try-catch语句进行包裹并进行相应的处理。
- 在catch语句中,请尽量使用具体的异常类型进行异常处理,并提供相应的错误信息。
7. 类和对象定义:- 类的属性请定义在类的构造函数内部,并使用this关键字进行引用。
- 类的方法请定义在类的原型对象上。
- 对象的属性和方法请使用点号(.)进行引用。
8. 引用和依赖:- 对于外部库和模块的引用,请使用明确的路径,并确保路径信息的正确性。
- 尽量避免在全局作用域下直接引用外部库和模块,而是将其封装在函数内部,以避免命名冲突。
9. 内存管理:- 在函数内部使用完变量后,请适时释放其占用的内存,以提高性能。
- 对于大型数组和对象,请在使用完成后及时将其置为null,以释放内存空间。
Java开发规范(公司规范)
Java开发规范第1章序言本规范的目的在于:建立一个可行可操作的编程标准、约定和指南,以规范公司java代码研发工作。
2013年为公司的质量年,为了提高公司研发能力,该规范的制定是为了规范java代码开发,提高java开发质量,从代码的层面规范并提高java项目的研发水平。
该规范由运营中心技术小组制定,运营中心技术小组将结合PMD检查工具以及相应的检查工具,组织技术监控人员对重点项目以及新的java项目定期检查,对代码质量进行评估,对代码质量较差限期整改,并报运营中心备案作为项目考核依据。
本规范适用于2013年公司java代码研发规范。
本规范的内容包括两个方面:java开发一般规范,以及java代码开发安全性规范。
Java代码开发一般规范主要从java基本语法,代码格式,耦合性以及设计方面,以及代码质量因子等进行描述;java代码开发安全性规范主要从sql注入,资源注入,跨站脚步,安全边界违例,系统信息泄露进行描述。
为了方便并配合PMD检查工具等相应检查工具,方便开发者针对违规代码进行调整,本规范中java一般开发规范描述形式将结合PMD,并提供示例代码,其形式如下:⏹规范描述:⏹PMD规则名称:⏹PMD级别(注1):⏹违规示例代码:⏹合法示例代码:本规范中java安全开发规范部分将结合具体项目,对出现安全隐患的代码进行分析,以及相应的解决办法和思路上进行分析,其具体格式如下:⏹风险及危害:⏹应对措施:⏹非安全代码示例⏹安全代码示例本规范解释权归运营中心技术小组,属于运营中心为了提供公司研发水平以及质量的一系列措施中的一部分,在后续的版本中将根据具体需要进行修改以及调整。
技术小组审核后给出相应的整改意见,对于有争议的问题,可直接与运营中心技术小组领导成员沟通。
第2章要求气象局项目组的所有java开发人员,编写的代码必须满足第三章的所有规范(每个标题为一个规范)。
项目组成员之间每周或每月互相检查对方编写的代码,若发现问题,要求对方及时更正。
javascript编写规范.docx
v1.0可编辑可修改JavaScript文件JavaScript 程序应独立保存在后缀名为.js的文件中。
JavaScript 代码不应该被包含在HTML文件中 , 除非这是段特定只属于此部分的代码。
在HTML 中的 JavaScript代码会明显增加文件大小, 而且也不能对其进行缓存和压缩。
>应尽量放到body 的后面。
这样可以减少因为载入script而造成其他页面内容载入也被延迟的问题。
也没有必要使用language 或者 type 属性。
MIME类型是由服务器而非scripttag来决定的。
缩进缩进的单位为四个空格。
避免使用Tab 键来缩进 ( 即使现在已经是21 世纪了 ), 也始终没有个统一的Tab 长短标准。
虽然使用空格会增加文件的大小, 但在局域网中几乎可以忽略, 且在最小化过程中也可被消除掉。
每行长度避免每行超过80 个字符。
当一条语句一行写不下时, 请考虑折行。
在运算符号, 最好是逗号后换行。
在运算符后换行可以减少因为复制粘贴产生的错误被分号掩盖的几率。
下一行应该缩进 8 个空格。
注释不要吝啬注释。
给以后需要理解你的代码的人们( 或许就是你自己) 留下信息是非常有用的。
注释应该和它们所注释的代码一样是书写良好且清晰明了。
偶尔的小幽默就更不错了。
记得要避免冗长或者情绪化。
及时地更新注释也很重要。
错误的注释会让程序更加难以阅读和理解。
让注释有意义。
重点在解释那些不容易立即明白的逻辑上。
不要把读者的时间浪费在阅读类似于 :i = 0; / If any of them match the requested name, then append the node to theset of results.if(c){a= (' ');for(i =0;i <;i +=1) {if (a[i]===className) {(node); break;}}}});return results;}如果函数是匿名函数, 则在 function和(( 左括号 ) 之间应有一个空格。
项目开发规范
项目开发规范1引言1.1概述本项目编码规范主要针对目前主流的DotNet和JAVA开发管理应用系统中编码提供参考和依据,该规范结合本人在项目中的实践经验同时参考一些软件行业编码规则编写而成,以此作为项目开发标准,规范。
本编码规范不但从代码组织,外观,注释,命名,语句等方面制定规范,而且还考虑通过编码保证和提升系统的性能。
1.2编写目的◆使编写的代码在整个项目中具有规范、标准,统一的风格。
◆编码规范是公司软件系统质量控制的重要内容,标准、规范的代码可以保证和提高软件系统性能。
◆方便代码的交流,提高编码的效率,符合大众习惯。
◆使代码更美观、逻辑清晰,可读性强(便于阅读和理解),可移植性强,便于系统后期维护。
1.3读者对象◆公司项目决策管理层◆项目负责人及项目管理人员◆系统分析,设计人员◆程序开发人员及测试人员◆软件质量管理人员1.4背景在项目开发中的编码规范是软件开发基本必须的工作,同时也是软件质量的重要保证,做为项管理和开发人员具有良好、规范的编码习惯是基本要求。
但编码规范在软件开发过程中经常不被重视,经常见到的是没有编码规范,有编码规范但没有真正很好地按编码规范进行控制。
针对该问题我们出此规范,作为我们开发过程标准规范。
1.5适应范围◆适用于企业所有基于.NET平台的软件采用C#开发的软件系统。
◆JAVA语言及平台开的软件产品。
◆ORACLE数据库PL/SQL语句。
◆程序中JavaScript代码。
1.6定义1.6.1P ascal 命名约定将标识符的首字母和后面连接的每个单词的首字母都大写即每个单词的首字母大写。
例如:BackColor。
1.6.2C amel 命名约定标识符的首字母小写,而每个后面连接的单词的首字母都大写。
例如:backColor。
1.7参考资料暂无。
1.8文档标志◆编写者:张洪波◆参与人员:张洪波◆编写时间:2010-05-13◆版本:Ver1.0.01.9文档总体说明这里针对一些编码中大的原则及公共的地方在这里统一进行描述和说明:◆Pascal和Camel规则在C#,JAVA,JS中应用➢涉及到公共接口部分如:接口,类中方法均采用Pascal规则。
上海岳城科技JavaScript-总结常用代码书写规范
javascript 代码规范代码规范我们应该遵循古老的原则:“能做并不意味着应该做”。
全局命名空间污染总是将代码包裹在一个立即的函数表达式里面,形成一个独立的模块。
不推荐 1 2 3 var x = 10,y = 100;console.log(window.x + ' '+ window.y);推荐 12 3 4 5 6 ;(function (window){'use strict';var x = 10,y = 100;console.log(window.x + ' '+ window.y);}(window));立即执行函数在立即执行函数里面,如果有用到全局变量应该通过变量传递的方式,让立即执行函数的函数体在调用时,能以局部变量的形式调用,在一定程度上提升程序性能。
并且应该在立即执行函数的形参里加上undefined ,在最后一个位置,这是因为ES3里undefined 是可以读写的,如果在全局位置更改undefined 的值,你的代码可能得不到逾期的结果。
另外推荐在立即执行函数开始跟结尾都添加上分号,避免在合并时因为别人的代码不规范而影响到我们自己的代码不推荐 1 2 3 4 5 6 7 8 9 10 11 12 13 14 (function (){'use strict';var x = 10,y = 100,c,elem=$('body');console.log(window.x + ' '+ window.y);$(document).on('click',function (){});if (typeof c==='undefined'){//你的代码}}());推荐 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ;(function ($,window,document,undefined){'use strict';var x = 10,y = 100,c,elem=$('body');console.log(window.x + ' '+ window.y);$(document).on('click',function (){});if (typeof c==='undefined'){//你的代码}}(jQuery,window,document));严格模式ECMAScript 5 严格模式可在整个脚本或独个方法内被激活。
JavaScript开发规范及经验总结
一、页面调用规则1.原则上整个网站都用到的JS代码,放到配置文件里,统一命名为commons.js / aisncommons.js 等等。
2.原则上只有某个Channel用到的JS文件,放在该Channel里的layout上引用,用Channel名来命名。
不要放到全网站(比如minisite, join flow等等)3.原则上只有当前单个页面用到的JS,就写在页面里,不要单独新建JS文件。
如果该JS影响到SEO,则新建JS文件。
4.原则上JS不输出内容,仅控制页面行为。
(例如JS可进行check box的select all操作,但是不允许输出check box的内容)二、兼容性规则:提倡开发人员以兼容所有浏览器为荣,在确实无法实现的情况下,再考虑以下兼容表(以下说的 "x%的浏览器" 指有x%的PV由该浏览器产生),该数据每三月取一次,定期更新。
兼容度浏览器备注。
完全兼容IE 6、 FF1.5 IE7必须支持主功能,查看重要信息,允许辅助功能不可用。
FF 1.0、Safari例如必须保证search、feed back、注册、post product等主要功能可用,但是如My Recent History等允许不可用。
可查看网站重要信息1%以下, 或客户端禁用JS、设置高安全级别等不做兼容调试三、命名规则(以工程师手册为基准):①一般原则:1.简单明确,见名知意,统一规范。
使用较短的英文单词全称,不使用首字母或则缩写,除非缩写被广泛应用,如HTML、URL。
2.使用正确的英文单词和语法。
3.即使是随机访问者也能明白其用意。
②变量、方法(类)名:1.采用每个内部单词首字母大写,其余字母小写的格式。
例如:strUserName2.临时数字变量i j k m n ,字符串变量c d e3.常量以及全局变量名必须全部使用大写字母。
4.变量名必须使用其类型的所写字符串开始。
各种类型的所写字符串如下:5.数字变量:i //js不允许显式声明int, 数字以Number这个对象来管理, 因此所有数字都用i做前缀6.对象引用变量:o //object7.HTML DOM 变量:d //document8.字符串变量:s //string9.数组变量:a //array10.Date类型变量:dtm11.变量名必须采用有意义的单词命名,如:sUserName、iUserAge12.如果变量名过长可以使用单词缩写,除了被广泛了解的单词缩写以外,所有使用单词所写的变量名必须在定义时给出注释,如:var sAdName //用于表示Administrator帐户的名称var sAdminName //不用给出注释,Admin被广泛了解③变量使用规范1.变量使用前必须定义。
JavaScript模块化开发与使用规范
JavaScript模块化开发与使用规范在现代的Web开发领域中,JavaScript已经成为了一种不可或缺的编程语言。
然而,由于JavaScript的灵活性和动态特性,在开发大型应用时往往容易导致代码的混乱和难以维护。
为了解决这个问题,模块化开发和使用规范应运而生。
一、模块化开发的意义模块化开发的核心思想是将复杂的系统拆分成小的、独立的模块,每个模块负责完成特定的功能。
通过这种方式,可以将大型应用分解成可管理的小块,提高代码的可读性和可维护性。
此外,模块化开发还可以提供代码的重用性,减少重复的劳动,提高开发效率。
二、CommonJS和AMD规范在JavaScript模块化发展的过程中,出现了两种主要的规范:CommonJS和AMD。
CommonJS规范主要用于后端开发,并基于同步加载的方式,使用require 和module.exports来导入和导出模块。
相比之下,AMD规范主要用于前端开发,并基于异步加载的方式,使用define和require来导入和导出模块。
三、ES6模块化随着ES6标准的推出,JavaScript原生支持了模块化开发。
ES6模块化使用import和export语法来导入和导出模块。
相比于CommonJS和AMD,ES6模块化具有更好的性能表现和更简洁的语法,逐渐成为了主流的模块化开发方式。
四、模块化开发的实践在实际项目中,可以使用现有的构建工具如Webpack或者Parcel来实现模块化开发。
通过配置这些工具,可以实现将多个模块打包成单个文件,减少网络请求并提高页面加载速度。
在入口文件中,使用import语句导入其他模块,通过export 语句将需要暴露给外界的函数、变量等导出。
五、模块化开发的经验总结1. 模块化开发需要遵循单一职责原则。
每个模块应该只负责完成一个功能,避免模块之间的耦合。
2. 合理划分模块的层次结构。
大型应用可以根据功能的不同划分为多个子模块,形成层次结构,提高代码的可读性和维护性。
Java项目开发平台开发规范
Java项目开发平台开发规范__________北京东方国信电子有限公司CRM事业部时间:2003-8-27目录Java项目开发平台开发规范 ____________________________________________ 1一、开发平台概述_______________________________________________________ 3二、技术综述___________________________________________________________ 51、Struts框架技术_____________________________________________________________ 52、Hibernate数据持久化技术 _____________________________________________________ 83、动态bean技术 _____________________________________________________________ 14三、在BONC-JONE平台上进行开发_______________________________________ 181、BONC-JONE平台目录说明___________________________________________________ 182、如何使用BONC-JONE运行起来 ______________________________________________ 183、开发有关规范性要求及典型步骤_____________________________________________ 18四、主要函数及使用技术方法说明________________________________________ 41如何使用自定义标签库?______________________________________________________ 41如何使用日志类写日志?______________________________________________________ 44如何进行资源注册?__________________________________________________________ 46如何进行登陆权限验证?______________________________________________________ 46如何进行字符转换?__________________________________________________________ 46如何对资源文件进行字符转换?________________________________________________ 46如何配置、读取应用配置信息?________________________________________________ 46如何打包boncpersistenceobj.jar文件? _______________________________________________ 46数据操作方法的原理是怎样的?________________________________________________ 46如何将任意文件上传到数据库中,又如何下载? __________________________________ 46如何保证在页面清空的字段能正确提交到数据库? ________________________________ 46如何使用日期控件?__________________________________________________________ 47如何使用DBQuery类进行数据查询?____________________________________________ 47如何自动生成Hibernate持久化beans及map文件?___________________________________ 47如何使用分页技术?__________________________________________________________ 49附录:________________________________________________________________ 52附A:Struts学习精要参考 _____________________________________________________ 52附B:Hibernate学习精要参考___________________________________________________ 52附C:技术备忘 ______________________________________________________________ 52一、开发平台概述BONC-JONE开发平台是北京东方国信电子技术有限公司遵循“简单、有效、先进、可扩”的原则,通过整合Struts 1.1与Hibernate 2.1等优秀的开源技术设计并实现的一个J2EE 开发平台。
JS开发规范
JS开发规范(版本V1.0)目录1. 引言 (3)1.1. 目的 (3)1.2. 内容 (3)1.3. 修订审批记录 (3)2. 变量类型 (3)2.1. 原始变量类型(Primitives) (3)2.2. 复杂变量类型(Complex) (4)3. 变量操作相关 (4)3.1.1. 赋值 (4)3.1.2. 2.2 对象 (5)3.1.3. 2.3 数组 (6)3.1.4. 解构 (7)3.1.5. 字符串 (8)3.1.6. 函数 (9)3.1.7. 箭头函数 (11)3.1.8. 类与构造器 (12)3.1.9. 模块 (12)3.1.10. 属性 (13)3.1.11. 比较 (13)4. 代码结构 (14)4.1. 代码块 (14)4.2. 注释 (15)4.3. 空格 (16)4.4. 逗号 (17)4.5. 分号 (17)4.6. 命名 (18)4.7. 构造函数 (18)1.引言1.1.目的为规范项目组的应用开发、解决开发中的代码规范问题和命名规范问题、促进开发工作顺利有序地进行,特制定本开发规范手册。
本文档适用对象为项目开发人员、编码人员、模版编写人员、系统测试人员等。
1.2.内容本文主要描述JS编程的相关约定,包含:变量类型、变量命名、控制类型、代码结构等。
1.3.修订审批记录表1.2 文档修订记录表表1.3 文档审批记录表2.变量类型2.1.原始变量类型(Primitives)●String●number●boolean●null●undefined2.2.复杂变量类型(Complex)●object●array●function3.变量操作相关3.1.赋值●避免使用 varvar 声明变量是函数级作用域过度使用 var 来声明变量会导致bug以及代码无法被他人理解●使用 let 与 const 替换 varlet const 都是块级作用域•用const声明常量•声明一个常量用一个const•const放一起,let放一起•不要使用链接变量分配•不要使用一元自增自减运算符(++, --)可能会导致应用程序中的值递增或递减的无声错误3.2.对象•no-new-object 规则为了更多使用对象中的构造方法而不是使用对象文字语法,所以在创建对象时不使用new Object()•使用扩展运算符扩展与复制对象用对象的扩展运算符去拿到一个带有真是属性的新对象而不是对象的引用3.2.1.数组•no-array-constructor 规则为了更多使用对象中的构造方法而不是使用对象文字语法,所以在创建对象时不使用new Array()•使用 push 方法向数组中添加新值•用数组的解构赋值 ... 去赋值数组•在数组方法的回调函数中使用renturn语句。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.2 插件 js,有些页面单独使用的插件 js 会比较大,应该按需引入。 1.3 页面中的 js 文件最好不要多余引入。 2. 尽量使用 JavaScript 提供的标准方法和属性。 2.1 Array 对象:
2.2 Function 对象: 2.3 Object 对象:
2.4 RegExp 对象:
4. 命名规范。
推荐: 4.1 userName 4.2 user_name 4.3 动+名词组合:getUserName 4.4 构造器函数首字母大写:function Person() {...} 4.5 常量全用大写字母:var PI = 3.1415926; 4.6 私有函数用下划线开头: var person = { _setSext: function () { // ... }, _setName: function () {
8. 细节
8.1 自动插入分号: 8.1.1 javascript 有一个自动修复机制,它试图通过自动插入分号来修正有缺损的
程序。但是,千万不要指望它,它可能会掩盖更加严重的错误。 8.1.2 例如: return { status: true }; 和
return{ status: true
}; 的返回值是不一样的,第一个会返回 undefined。
8.4 parselnt
8.4.1 parselnt 是把一个字符串转换为整数的函数。它在遇到非数字时会停止解析, 所以 parselnt(“16”)和 parselnt(“16 tons”)产生相同的结果。但是,它并不会提示用户出现额外 的文本。
8.4.2 如果该字符串第一个字符是 0,则该字符串会基于八进制而不是十进制来求 值,所以 parselnt(“08”)和 parselnt(“09”)都产生 0 作为结果。
9.1 “==”、”!=” 和 ”===”、”!==”; 9.1.1 前者会提前进行隐式的类型转换,后者是严格判断;
9.2 with 语句: 9.2.1 本意是用来快捷地访问对象的属性,但是,它所带来的结果往往是不可预料
的。 9.2.2 with 严重影响了 javascript 处理器的速度,因为它阻断了变量名的词法作用
// ... }
}; 4.7 更细致的命名(前缀规范):
4.7.1 s:表示字符串。例如:sName,sHtml; 4.7.2 n:表示数字。例如:nPage,nTotal; 4.7.3 b:表示逻辑。例如:bChecked,bHasLogin; 4.7.4 a:表示数组。例如:aList,aGroup; 4.7.5 r:表示正则表达式。例如:rDomain,rEmail;; 4.7.6 f:表示函数。例如:fGetHtml,fInit; 4.7.7 o:表示以上未涉及到的其他对象,例如:oButton,oDate;
基于以上的几点,对项目开发过程中 JavaScript 语言的编写做一些规范,无论是为了今 后代码的维护、修改或者拓展,以及代码的精简和复用,都是有一些好处存在的。下面的规 范可能没办法做到全面,但是也希望能够给项目的开发带来一些帮助,同时,也希望大家能 随时补充,并指正错误,十分感谢。
二、具体
1. js 文件引入 1.1 Common.js 文件:提取一个公共的 js 文件,用于存放通用的 js 函数代码,并引入
度复杂。 5.2.5 在程序中使用全局变量降低了程序的可靠性。 5.2.6 难以调试。
5.3 变量最好都在函数里用 var 进行定义,当函数执行完之后,系统会自动销毁这些 变量。
5.4 对于一个脚本应用或工具库。只使用唯一的一个全局变量。每个对象都有它自己的 命名空间,将很容易使用对象去管理代码。进而使用闭包提供进一步的信息隐藏,增强 自己模块的健壮性。
9.6.4 更好的方法就是根本不去使用。创建新对象、数组时,可用{ }和[ ]代替。
10. 方法共用
10.1 方法通用性。---- Common.js 文件的必要性,支持通用方法的撰写,避免“单干”。
10.2 建议 : 直接把事件写在 DOM 节点. 例如:
8.8 hasOwnProperty: 8.8.1 hasOwnProperty 是一个方法,而不是一个运算符,所以,在任何对象中,
它都可能会被一个不同的函数甚至一个非函数的值所替换。
8.9 对象: 8.9.1 javascript 的对象永远不会是真的空对象,因为它们可以从原型链中取得成
员属性。
9. 避免:
JavaScript 代码经常被直接发布。它应该始终具备发布质量,干净利落。通过在一个清 晰且始终统一的风格下编写,代码的阅读会变得更加的简单。
所以,并不是写出别人都看不懂的代码,才显得自己技术实力精湛。
因为,当程序可读性强的时候,它正常运行的可能性,以及是否准确按照我们的意图去 工作的可能性也会显著增强。它还决定了软件在其生命周期中是否进行扩展。如果我们能阅 读并且理解程序,那么就有希望去修改和完善它。
JavaScript 的弱类型和过度的容错性,导致程序质量无法再编译时获得保证,所以,为 了弥补之歌缺陷,我们应该按照严格的规范进行编码。
JavaScript 自身也包含大量脆弱的、问题缠身的特性,它们会妨碍我们写出优秀的程序, 显然,在程序开发过程中,避免掉这些糟糕的特性,能让我们的代码更优秀。
对于一个组织机构来说,软件的长远价值和代码库的质量成正比。在程序的生命周期里, 会经历很多人的测试、使用和修改。如果一个程序能很清楚地传达它的结构和特性,那么, 当它在将来被修改的时候,它被破坏的可能性就小很多。
8.4.3 parselnt 可以接收两个参数。例如: parselnt(“08” , 10)
8.5 浮点数: 二进制的浮点数不能正确的处理十进制的小数,因此:0.1 + 0.2 不等于 0.3.
8.6 NaN: 8.6.1 NaN 表示的不是一个数字,但是: typeof NaN === ‘number’ ; // true
//这个函数可能对环境有一些影响,但不会引入新的全局变量。 var hidden_variable; } ( ) );
6.2 一个代码块(括在一对花括号中的一组语句)会创造一个作用域,代码块中声明 的变量在其外部是不可见的。
6.3 在函数开头部分声明所需的所有变量(推荐)。
7. 使用对象去管理代码。
2.5 String 对象:
3. 代码风格:
3.1 缩进、空行。
3.2 注释:
3.2.1 3.2.2 3.2.3 3.2.4
可采用类似 JAVA 的注释方式(块注释 + 必要行注释); 有利于在方法调用处看到方法的具体传参提示; 方便日后代码维护; 例如:
/** * 交换数组两个值 * @param {Array} array 操作原数组对象 * @param {Number} formIndex 第一个值 * @param {Number} toIndex 第二个值 * @return { Array } 新数组 */
域绑定。
9. 3 eval 函数:避免使用。
9.4 缺少块的语句: 9.4.1 if、while、do、for 语句都可以接受一个括在花括号里中的代码块(推荐),
也可以接受单行语句(不推荐)。
9.5 位运算符:避免使用,慢
9.6 new:
9.6.1 javascript 的 new 运算符创建一个继承于其运算数的原型的新对象,然后调 用该运算数,把心创建的对象绑定给 this。这给运算数一个机会在返回给请求者前自定义新 创建的对象。
一、概要
Jaபைடு நூலகம்aScript 规范
程序通常是由很多部分组成,表现为函数、语句和表达式,它们必须准确无误地按照顺 序排列。
但是,在软件的产品生命周期中,程序通常都会被修改。优秀的程序拥有一个前瞻性的 结构,他能遇见在未来才可能需要的修改(拓展性),但不会让其成为过度的负担。优秀的 程序还具备一种清晰的表达方式。在多人开发的项目中,如果一个程序被表达得很好,开发 人员就能更加容易地去理解它,以便成功地改造和修补它(代码风格)。
5.5 定义全局变量的三种方式: 5.5.1 在任何函数之外防止一个 var 语句。 5.5.2 直接给全局对象添加一个属性:window.foo = value ; 5.5.3 在函数中未声明的变量(隐式的全局变量):foo = value ;
6. 作用域。
6.1 防止变量污染:
( function ( ) {
return short static super switch synchronized this throw throws transient true try typeof var void volatile while with
8.3 typeof
8.3.1 typeof null 返回 object 8.3.2 对正则表达式的类型识别上,实现不太一致。
5. 唯一一个全局变量
5.1 javascript 使用 function 来管理自己的作用域,一个定义在函数内的变量对外是不可 见的。
5.2 过多的全局变量导致的后果: 5.2.1 定义的变量被其他人定义的同名变量覆盖掉。 5.2.2 未来定义的变量把你过去定义的同名变量也覆盖掉。 5.2.3 过多的全局变量放在执行堆栈里还会造成内存的浪费。 5.2.4 全局变量可以被程序的任何部分在任意时间修改,它们使得程序的行为变得极
return typeof value === ‘number’ && isFinite( value ); }
8.6.6 NaN 和 undifined 并不是常量,他们是全局变量,你可以改变他们的值,但 是,千万不要这么做。
8.7 伪数组: 8.7.1 javascript 没有真正的数组。