jshint

用'===', '!=='代替'==', '!=';

for-in里一定要有hasOwnProperty的判断;

不要在内置对象的原型上添加方法,如Array, Date;

不要在内层作用域的代码里声明了变量,之后却访问到了外层作用域的同名变量;

变量不要先使用后声明;

不要在一句代码中单单使用构造函数,记得将其赋值给某个变量;

不要在同个作用域下声明同名变量;

不要在一些不需要的地方加括号,例:delete(a.b);

不要使用未声明的变量(全局变量需要加到.jshintrc文件的globals属性里面);

不要声明了变量却不使用;

不要在应该做比较的地方做赋值;

debugger不要出现在提交的代码里;

数组中不要存在空元素;

不要在循环内部声明函数;

不要像这样使用构造函数,例:new function () { … }, new Object

  1. // not good
  2. if (a == 1) {
  3. a++;
  4. }
  5. // good
  6. if (a === 1) {
  7. a++;
  8. }
  9. // good
  10. for (key in obj) {
  11. if (obj.hasOwnProperty(key)) {
  12. // be sure that obj[key] belongs to the object and was not inherited
  13. console.log(obj[key]);
  14. }
  15. }
  16. // not good
  17. Array.prototype.count = function(value) {
  18. return 4;
  19. };
  20. // not good
  21. var x = 1;
  22. function test() {
  23. if (true) {
  24. var x = 0;
  25. }
  26. x += 1;
  27. }
  28. // not good
  29. function test() {
  30. console.log(x);
  31. var x = 1;
  32. }
  33. // not good
  34. new Person();
  35. // good
  36. var person = new Person();
  37. // not good
  38. delete(obj.attr);
  39. // good
  40. delete obj.attr;
  41. // not good
  42. if (a = 10) {
  43. a++;
  44. }
  45. // not good
  46. var a = [1, , , 2, 3];
  47. // not good
  48. var nums = [];
  49. for (var i = 0; i < 10; i++) {
  50. (function(i) {
  51. nums[i] = function(j) {
  52. return i + j;
  53. };
  54. }(i));
  55. }
  56. // not good
  57. var singleton = new function() {
  58. var privateVar;
  59. this.publicMethod = function() {
  60. privateVar = 1;
  61. };
  62. this.publicMethod2 = function() {
  63. privateVar = 2;
  64. };
  65. };