From 2072e3d37a5cc659d41f948922131cb73e29faf9 Mon Sep 17 00:00:00 2001 From: Sylvenas Date: Wed, 11 Jan 2017 19:30:15 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E8=A7=84=E8=8C=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...43\347\240\201\350\247\204\350\214\203.md" | 93 +++++++++++++++++++ package.json | 7 +- tests/test.js | 10 +- 3 files changed, 106 insertions(+), 4 deletions(-) create mode 100644 "docs/dev/js\344\273\243\347\240\201\350\247\204\350\214\203.md" diff --git "a/docs/dev/js\344\273\243\347\240\201\350\247\204\350\214\203.md" "b/docs/dev/js\344\273\243\347\240\201\350\247\204\350\214\203.md" new file mode 100644 index 0000000..994c50c --- /dev/null +++ "b/docs/dev/js\344\273\243\347\240\201\350\247\204\350\214\203.md" @@ -0,0 +1,93 @@ +#js代码规范 +--- +###1.最小全局变量 +为了避免和第三方的javascript库,别的开发人员代码产生命名冲突,在项目中应当尽量少的使用全局变量,在本项目中,只有三个全局变量可以使用,第一是全局的lrmap对象,由于整个项目中几乎每个方法都会使用到lrmap对象, +所以把lrmap添加位全局对象,第二和第三分别是初始化地图的参数和图层的地址,这样做是为了使运维人员能够在配置文件里面自由的修改地图的配置。在声明变量中应该注意的问题 +####1.始终使用var声明变量 +bad: +```js +function sum(x, y) { + result = x + y; + return result; +} +``` +good: +```js +function sum(x, y) { + var result = x + y; + return result; +} +``` +####2.避免使用任务链声明变量 +bad: +```js +function foo() { + var a = b = 0; +} +``` +其中b会成为全局变量,因为从右到左赋值的过程中,首先赋值表达式b=0,此时b是未声明的,则b为全局变量 +bad: +```js +function foo() { + var a = 0, + b = 0; +} +``` +###2.for循环 +bad: +for (var i = 0; i < arr.length; i++) { + +} +good: +for (var i = 0, len = arr.length; i < len; i++) { + +} + +###3.尽量不要扩展内置原型 +增加内置的构造函数原型(如:Object(),Array(),Function()),会让代码变得越来越难维护,会让其他的开发人员不知所措 + +###4.避免隐式类型转换 +javascript在变量比较的时候会进行隐式类型转换。例如:false==0,''==0,会返回true,在比较值和表达式类型的时候始终使用===和!== + +###5.避免使用eval() +eval()方法接受任意的字符串,并当作javascript代码来执行 +bad: +```js +var propetry = 'name'; +alert(eval('obj.' + propetry)) +``` +good: +```js +var propetry = 'name'; +alert(obj[propetry]); +``` +bad: +```js +setTimeout("myFunc()", 1000); +setTimeout("myFunc(1, 2, 3)", 1000); +``` +good: +```js +setTimeout(myFunc, 1000); +setTimeout(function () { + myFunc(1, 2, 3); +}, 1000); +``` +###6.花括号{} +在for循环和if else语句中,一定要使用{ } + +###7.以大写字母来命名构造函数 +bad: +```js +function myFunction() { } +``` +good: +```js +function MyConstructor() { } +``` +###8.注释 +在写每个类和方法的同时必须写注释. + + + + diff --git a/package.json b/package.json index fd20ef9..8427338 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,7 @@ "babel-preset-stage-0": "^6.16.0", "css-loader": "^0.25.0", "extract-text-webpack-plugin": "^1.0.1", + "file-loader": "^0.9.0", "html-webpack-plugin": "^2.7.2", "react-hot-loader": "^1.3.0", "style-loader": "^0.13.1", @@ -31,9 +32,9 @@ "leaflet": "^1.0.2", "leaflet-draw": "^0.4.4", "material-ui": "^0.15.0", - "react": "^15.0.1", - "react-addons-css-transition-group": "^15.4.0", - "react-dom": "^15.0.1", + "react": "15.0.1", + "react-addons-css-transition-group": "15.0.1", + "react-dom": "15.0.1", "react-redux": "^4.4.5", "react-router": "^3.0.0", "react-tap-event-plugin": "^1.0.0", diff --git a/tests/test.js b/tests/test.js index 51fb5e0..230517f 100644 --- a/tests/test.js +++ b/tests/test.js @@ -31,4 +31,12 @@ function arrToString(arr) { } } return geo; -} \ No newline at end of file +} + +// 反面示例 +setTimeout("myFunc()", 1000); +setTimeout("myFunc(1, 2, 3)", 1000); + +// 更好的 +function MyConstructor() { } +function myFunction() { } \ No newline at end of file