1. Javascript code should comply with Douban-JSLint inspection standards
1-1. Statements must end with semicolon, except for, function, if, switch, try, while
1-2 . Only long statements can be considered for line breaks, such as:
TEMPL_SONGLIST.replace('{TABLE}', da['results'])
.replace('{PREV_NUM}', prev)
.replace('{NEXT_NUM}', next)
.replace('{CURRENT_NUM}', current)
.replace('{TOTAL_NUM}', da.page_total);
To avoid It conflicts with JSLint's verification mechanism. Operators such as "." or "+" are placed at the end of the line. The above code should be changed to:
TEMPL_SONGLIST.replace('{TABLE}', da['results' ]).
replace('{PREV_NUM}', prev).
replace('{NEXT_NUM}', next).
replace('{CURRENT_NUM}', current).
replace( '{TOTAL_NUM}', da.page_total);
1-3. Avoid extra commas. For example: var arr = [1,2,3,];
1-4. All loop bodies and judgment bodies need to be enclosed in "{}". For example:
Wrong:
if (condition)
statement;
or
if (condition) statement;
Correct:
if (condition) {
statement; or
if (condition) { statement; }
1-5. The hasOwnProperty method must be used in the for-in loop body to check whether the member is for its own members. Avoid contamination from the prototype chain.
1-6. Variable declaration. Variable declarations should be placed at the top of the function. Avoid using undeclared variables.
Incorrect:
if (n > 0) {
var isvalid = true;
Correct:
var isvalid;
if (n > 0) {
isvalid = true;
}
1-7. Do not use with, void, evil.
1-8. Use strict conditional operators. Use === instead of == and !== instead of !=.
1-9. The following types of objects are not recommended to be constructed with new: new Number, new String, new Boolean, new Object (replace with {}), new Array (replace with []).
1-10. Use obj.prop1 instead of obj[“prop1”] to reference object members, unless the property name is a variable.
Note: Douban-JSLint is a customized JSLint
Note: If you use other global variables in the module code and want to skip the JSLint check, you can add a statement to the file, such as:
2. Javascript naming rules
2-1. Capitalize the first letter of the constructor. For example:
function Dialog (config) {
statement;
} var dlg = new Dialog({...});
2-2. Object properties or Method names are in lower camel-case, such as "init", "bindEvent", "updatePosition":
Dialog.prototype = {
init: function () {},
bindEvent: function () {},
updatePosition: function () {} };
2-3. Private variable names start with an underscore. For example: "_current", "_defaultConfig"
2-4. Constant names should be in all capital letters, and words should be separated by underscores.For example: "CSS_BTN_CLOSE", "TXT_LOADING"
2-5. Prefix of variable name:
Prefix
Element
Example
integer
nVariableName
i,j,k,m,n, etc. *
integer as counter/iterator
(for i=0 ; i
string
sVariableName
object
oObjectName
is, can, has
boolean
[Boolean name]ConditionName
event method
event attachment
[event type]_MethodName
accessor method
getMethodName
accessor method
setMethodName
Note: Only a counter/iterator should use a single-letter designation.
3. Code formatting requirements
3-1. Necessary spaces and indentation in statements
3-1-1. Spaces need to be followed before and after "()" used to include statements , such as: if / for / while / switch ( statements ) { … } etc.
3-1-2. "=" needs to be followed by spaces
3-1-3. Array members The "," in between needs to be followed by a space
Not good:
for (t in selected) { if (!hash[t]) deselect(t) }
Good:
for ( t in selected ) {
if ( !hash[t] ) {
deselect(t); }
3-2. Use line breaks for long statements :
Bad:
TEMPL_SONGLIST.replace('{TABLE}', da['results']).replace('{PREV_NUM}', prev).replace('{NEXT_NUM }', next).replace('{CURRENT_NUM}', current).replace('{TOTAL_NUM}', da.page_total);
Good:
TEMPL_SONGLIST.replace('{ TABLE}', da['results']).
replace('{PREV_NUM}', prev).
replace('{NEXT_NUM}', next).
replace('{CURRENT_NUM}' , current).
replace('{TOTAL_NUM}', da.page_total);
3-3. Format object parameters:
Bad:
embedSWF(id, { url: '/swf/player30792.swf?url=' el.href, width: 261, height: 30, params: { wmode:'transparent' }, attributes: { id: "player-sample" i, name: "player-sample" i }});
Good: