class
( class
是为高可复用组件设计的,所以应处在第一位)id
name
(id
更加具体且应该尽量少使用,所以将它放在第二位)data-\*
src
for
type
href
value
placeholder
title
alt
aria-\*
role
required
readonly
disabled
id
/ class
命名规则header
footer
col-main
blue-box
camel
1 命名法, e.g. main-title
可基于最近的父元素名称作为前缀col
nav
btn
etc. , 别给我自编.ad
ads
adv
banner
sponsor
gg
guangg
guanggao
etc.
<view class="header">
<image class="logo">image>
<view class="detail"> view>
view>
CSS
规范position
top
right
z-index
display
float
etc.)width
height
padding
margin
etc.)font
line-height
letter-spacing
color
text-align
ect.)background
border
etc.)animation
transition
etc.) /* Button */
button {
/* Positioning */
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
z-index: 100;
/* Box-model */
display: block;
float: right;
width: 100px;
height: 100px;
/* Typography */
font: normal 13px "Helvetica Neue", sans-serif;
line-height: 1.5;
color: #333;
text-align: center;
/* Visual */
background-color: #f5f5f5;
border: 1px solid #e5e5e5;
border-radius: 3px;
/* Misc */
opacity: 1;
}
/* End Button */
padding
margin
font
background
border
border-radius
etc.#fff
JS
规范let
关键字.不要再使用 var
// worst
let url = "pages/index/index?id=" + id + "&title=321GO"
//best
let url = `pages/index/index?id=${id}&title=321GO`
if (x) {
function zxm() {}
}
if (x) {
let foo = function() {}
}
forEach
forEach
是用来循环数组的 let zxmArray = [3,2,1,"GO"];
Array.prototype.sex = "男";
Array.prototype.address = function () {
let tempArr = this;
tempArr.push("Xtep")
return tempArr
};
//correct
zxmArray.forEach(function (value, index) {
console.log(value);//3 2 1 GO
});
//correct
for (var i = 0; i < zxmArray.length; i++) {
console.log(zxmArray[i]);//3 2 1 GO
}
//correct
let zxmMap = new Map();
zxmMap.set("a", 3);
zxmMap.set("b", 2);
zxmMap.set("c", 1);
zxmMap.set({
d: "address"
}, "GO");
zxmMap.forEach(function (value, key, mapObj) {
console.log(value);
console.log(key)
console.log(mapObj)
});
//Not recommended
for (var i in zxmArray) {
console.log(zxmArray[i]);//3 2 1 GO 男 f(){}
}
forEach
不支持 break
continue
let zxmArray = [3,2,1,"GO"];
zxmArray.forEach(function(value) {
console.log(value);
// 不能使用break
break;
//不能使用continue
continue;
});
forEach
过程中 arr.push()
arr.pop()
arr.shift()
arr.unshift()
arr.reverse()
arr.sort()
arr.concat()
都可以使用,但是arr.push()
不会改变输出顺序.map
map()
方法返回一个由原数组中的每个元素调用一个指定方法后的返回值组成的新数组 let zxmArray = [3,2,1,"GO"];
let tempArr = zxmArray.map((value,index)=>{
console.log(value, index);
return "zxm" + value
})
console.log(tempArr)// [ 'zxm3', 'zxm2', 'zxm1', 'zxmGO' ]
function add(num) {
return num + 10
}
let zxmAdd = [3,2,1];
let tempAdd = zxmAdd.map(add);
console.log(tempAdd)// [ 13, 12, 11 ]
for-in
for-in
循环实际是为循环 enumerable
2 对象而设计的configurable
3 writable
4 enumerable
5 value
6 let zxmObj = {
a: 3,
b: 2,
c: 1,
d: "GO"
};
Object.defineProperty(zxmObj, 'address', {
configurable: false,
writable: true,
enumerable: true,
value: 'Xtep'
})
Object.defineProperties(zxmObj, {
sex: {
value: '男',
enumerable: false
},
age: {
value: 23,
enumerable: false
}
})
for (var prop in zxmObj) {
console.log("zxmObj." + prop + " = " + zxmObj[prop]);//zxmObj.a = 3 zxmObj.b = 2 zxmObj.c = 1 zxmObj.d = GO zxmObj.address = Xtep
}
for–in
是用来循环带有字符串 key 的对象的方法for-of
墙裂推荐使用
for-of
既比传统的 for 循环简洁,同时弥补了forEach
和for-in
循环的缺点
for-of
循环数组 let zxmArray = [3,2,1,"GO"];
for (var value of zxmArray) {
console.log(value);// 3 2 1 GO
}
for-of
循环字符串 let zxmString = "321GO";
for (let value of zxmString) {
console.log(value);// 3 2 1 G O
}
for-of
循环类型化的数组 let zxmArray = new Uint8Array([0x00, 0xff]);
for (let value of zxmArray) {
console.log(value);// 0 255
}
for-of
循环 Map
let zxmMap = new Map();
zxmMap.set("a", 3);
zxmMap.set("b", 2);
zxmMap.set("c", 1);
zxmMap.set({
d: "address"
}, "GO");
for (let [key, value] of zxmMap) {
console.log(value);// 1 2 3 GO
}
for (let entry of zxmMap) {
console.log(entry);// ["a", 1] ["b", 2] ["c", 1] [{d:"address"}, "GO"]
}
for-of
循环 set
let zxmSet = new Set([1, 1, 2, 2, 3, 3]);
for (let value of zxmSet) {
console.log(value);
}
for-of
循环拥有 enumerable
属性的对象,但是并不能直接使用在普通的对象上,如果我们按对象所拥有的属性进行循环,可使用内置的 Object.keys()
7 方法 let zxmObj = {
a: 3,
b: 2,
c: 1,
d: "GO"
};
Object.defineProperty(zxmObj, 'address', {
configurable: false,
writable: true,
enumerable: true,
value: 'Xtep'
})
for (var prop of Object.keys(zxmObj)) {
console.log("zxmObj." + prop + " = " + zxmObj[prop]);//zxmObj.a = 3 zxmObj.b = 2 zxmObj.c = 1 zxmObj.d = GO zxmObj.address = Xtep
}
for-of
循环生成器 ( generators ) 然鹅微信小程序并不支持 async
await
也不支持 function* fibonacci() { // a generator function
let [prev, curr] = [0, 1];
while (true) {
[prev, curr] = [curr, prev + curr];
yield curr;
}
}
for (let n of fibonacci()) {
console.log(n);
// truncate the sequence at 1000
if (n >= 1000) {
break;
}
}
camel
命名法camel
命名法camel
命名法camel
命名法pascal
8 命名法pascal
命名法camel
命名法
- 变量名应当使用名词
- boolean 类型的应当使用
is
has
等起头,表示其类型- 函数名应当用动宾短语 e.g. DrawBox()
- 点击事件命名方式为
tap
+ 事件名 e.g. onClick()- 类名应当用名词
var
let
关键字声明函数中要使用的局部变量Promise
函数,回调成功的参数统一为 res,错误参数为 err let callback = new Promise((resolve, reject) => {
if (/* 异步操作成功 */){
resolve(value);
} else {
reject(err);
}
});
callback.then((res) => {
console.log('成功回调!', res);
}).catch((err) => {
console.log('失败回调!', err);
});
Pages({
data:{
},
onLoad:function(event){
},
_self:function(){
}
})
data
中初始化.禁止在不定义的情况下直接 setData
,或者出现 undefined
data
中,页面内传递的写在 page
中 function zxm(name = 'zxm'){
console.log(name)
}
slot
的组件除外 <x-component-tag-name bind:myevent="onMyEvent" />
x-class-{name}
x-
开头JS
中一致使用反引号 ` 或单引号 ‘’ , 不使用双引号WXML
CSS
JSON
中均应使用双引号。TODO: + 说明:
如果代码中有该标识,说明在标识处有功能代码待编写,待实现的功能在说明中会简略说明。
FIXME: + 说明:
如果代码中有该标识,说明标识处代码需要修正,甚至代码是错误的,不能工作,需要修复,如何修正会在说明中简略说明。
XXX: + 说明:
如果代码中有该标识,说明标识处代码虽然实现了功能,但是实现的方法有待商榷,希望将来能改进,要改进的地方会在说明中简略说明。
HACK:+ 说明:
如果代码中有该标识,说明标识处代码我们需要根据自己的需求去调整程序代码。
UNDONE: + 说明:
如果代码中有该标识,说明在标识处有功能代码未写完,未写完的功能在说明中会简略说明。
NOTE: + 说明:
如果代码中有该标识,用来解释说明这个功能的作用。
BUG: + 说明:
如果代码中有该标识,用来标识此处代码有一个问题,问题会简略说明。
骆驼式命名法( Camel-Case )又称驼峰式命名法,是电脑程式编写时的一套命名规则(惯例).正如它的名称 CamelCase
所表示的那样,是指混合使用大小写字母来构成变量和函数的名字. ↩︎
可枚举性 enumerable
用来控制所描述的属性,是否将被包括在 for…in 循环之中.如果一个属性的 enumerable
为 false
, for-in
Object.keys
JSON.stringify
将不会取到该属性. ↩︎
表示能否通过 delete
删除此属性,能否修改属性的特性,或能否修改把属性修改为访问器属性,如果直接使用字面量定义对象,默认值为 true ↩︎
表示该属性是否可枚举,即是否通过 for-in
循环或 Object.keys()
返回属性,如果直接使用字面量定义对象,默认值为 true ↩︎
能否修改属性的值,如果直接使用字面量定义对象,默认值为 true ↩︎
该属性对应的值,默认为 undefined
↩︎
返回一个所有元素为字符串的数组,其元素来自于从给定的 object
上面可直接枚举的属性.这些属性的顺序与手动遍历该对象属性时的一致 ↩︎
单字之间不以空格断开或连接号或下划线连结,第一个单字首字母采用大写字母,后续单字的首字母亦用大写字母.例如: FirstName
LastName
↩︎