Hướng dẫn javascript isdigit - javascript isdigit

var isIntegerTest = /^\d+$/;
var isDigitArray = [!0, !0, !0, !0, !0, !0, !0, !0, !0, !0];

function hasLeading0s(s) {
  return !(typeof s !== 'string' ||
    s.length < 2 ||
    s[0] !== '0' ||
    !isDigitArray[s[1]] ||
    isIntegerTest.test(s));
}
var isWhiteSpaceTest = /\s/;

function fIsNaN(n) {
  return !(n <= 0) && !(n > 0);
}

function isNumber(s) {
  var t = typeof s;
  if (t === 'number') {
    return (s <= 0) || (s > 0);
  } else if (t === 'string') {
    var n = +s;
    return !(fIsNaN(n) || hasLeading0s(s) || !(n !== 0 || !(s === '' || isWhiteSpaceTest.test(s))));
  } else if (t === 'object') {
    return !(!(s instanceof Number) || fIsNaN(+s));
  }
  return false;
}

function testRunner(IsNumeric) {
  var total = 0;
  var passed = 0;
  var failedTests = [];

  function test(value, result) {
    total++;
    if (IsNumeric(value) === result) {
      passed++;
    } else {
      failedTests.push({
        value: value,
        expected: result
      });
    }
  }
  // true
  test(0, true);
  test(1, true);
  test(-1, true);
  test(Infinity, true);
  test('Infinity', true);
  test(-Infinity, true);
  test('-Infinity', true);
  test(1.1, true);
  test(-0.12e-34, true);
  test(8e5, true);
  test('1', true);
  test('0', true);
  test('-1', true);
  test('1.1', true);
  test('11.112', true);
  test('.1', true);
  test('.12e34', true);
  test('-.12e34', true);
  test('.12e-34', true);
  test('-.12e-34', true);
  test('8e5', true);
  test('0x89f', true);
  test('00', true);
  test('01', true);
  test('10', true);
  test('0e1', true);
  test('0e01', true);
  test('.0', true);
  test('0.', true);
  test('.0e1', true);
  test('0.e1', true);
  test('0.e00', true);
  test('0xf', true);
  test('0Xf', true);
  test(Date.now(), true);
  test(new Number(0), true);
  test(new Number(1e3), true);
  test(new Number(0.1234), true);
  test(new Number(Infinity), true);
  test(new Number(-Infinity), true);
  // false
  test('', false);
  test(' ', false);
  test(false, false);
  test('false', false);
  test(true, false);
  test('true', false);
  test('99,999', false);
  test('#abcdef', false);
  test('1.2.3', false);
  test('blah', false);
  test('\t\t', false);
  test('\n\r', false);
  test('\r', false);
  test(NaN, false);
  test('NaN', false);
  test(null, false);
  test('null', false);
  test(new Date(), false);
  test({}, false);
  test([], false);
  test(new Int8Array(), false);
  test(new Uint8Array(), false);
  test(new Uint8ClampedArray(), false);
  test(new Int16Array(), false);
  test(new Uint16Array(), false);
  test(new Int32Array(), false);
  test(new Uint32Array(), false);
  test(new BigInt64Array(), false);
  test(new BigUint64Array(), false);
  test(new Float32Array(), false);
  test(new Float64Array(), false);
  test('.e0', false);
  test('.', false);
  test('00e1', false);
  test('01e1', false);
  test('00.0', false);
  test('01.05', false);
  test('00x0', false);
  test(new Number(NaN), false);
  test(new Number('abc'), false);
  console.log('Passed ' + passed + ' of ' + total + ' tests.');
  if (failedTests.length > 0) console.log({
    failedTests: failedTests
  });
}
testRunner(isNumber)

Show

Bình thường khi kết nối Websocket đã được xác nhận, server sẽ đặt một thời gian hết hạn kết nối cho kết nối đó trong khoảng 30s nếu nó không hoạt động. Firewall của server cũng sẽ đặt thời gian timeout sau một quãng thời gian không hoạt động.

Để thay đổi thời gian timeout của server, trong trường hợp bạn không có tương tác gì, sau một thời gian hãy gửi thêm message trống lên server.

Hướng dẫn javascript isdigit - javascript isdigit

Để làm được điều này, thêm 2 hàm sau vào trong code của bạn: một để giữ kết nối, một để hủy kết nối vừa gửi. Nếu sử dụng trick này, bạn có thể kiểm soát thời gian timeout.

Hướng dẫn javascript isdigit - javascript isdigit

Thêm

function generateRandomAlphaNum(len) {
    var rdmString = "";
    for( ; rdmString.length < len; rdmString  += Math.random().toString(36).substr(2));
    return  rdmString.substr(0, len);
}
generateRandomAlphaNum(9)
// => "3rjzsgpmq"

8...

Hàm

function generateRandomAlphaNum(len) {
    var rdmString = "";
    for( ; rdmString.length < len; rdmString  += Math.random().toString(36).substr(2));
    return  rdmString.substr(0, len);
}
generateRandomAlphaNum(9)
// => "3rjzsgpmq"

9 cần được thêm vào cuối của hàm
var numbers = [5, 458 , 120 , -215 , 228 , 400 , 122205, -85411];
numbers = numbers.sort(function(){ return Math.random() - 0.5});
/* mảng đã được trộn, kết quả: [120, 5, 228, -215, 400, 458, -85411, 122205]  */
0 của kết nối websocket, và chèn hàm
var numbers = [5, 458 , 120 , -215 , 228 , 400 , 122205, -85411];
numbers = numbers.sort(function(){ return Math.random() - 0.5});
/* mảng đã được trộn, kết quả: [120, 5, 228, -215, 400, 458, -85411, 122205]  */
1 vào cuối cùng của hàm
var numbers = [5, 458 , 120 , -215 , 228 , 400 , 122205, -85411];
numbers = numbers.sort(function(){ return Math.random() - 0.5});
/* mảng đã được trộn, kết quả: [120, 5, 228, -215, 400, 458, -85411, 122205]  */
2.

42. Hãy luôn nhớ rằng toán tử nguyên thủy của Javascript có thể nhanh hơn việc gọi hàm.

Hãy sử dụng VanillaJS

Ví dụ: Thay vì dùng:

var items = [12, 548 , 'a' , 2 , 5478 , 'foo' , 8852, , 'Doe' , 2145 , 119];

var  randomItem = items[Math.floor(Math.random() * items.length)];
0

[10] === 10    // false
[10]  == 10    // true
'10' == 10     // true
'10' === 10    // false
 [] == 0     // true
 [] === 0     // false
 '' == false   // => true nhưng true == "a" => false
 '' === false // false 

43. Hãy code chuẩn convention hơn. Minify nó khi deploy

Hãy sử dụng JSLint và minifier nó(ví dụ JSMin...) trước khi chạy code trên môi trường production. Hãy tập code chuẩn convention, tuân theo một convention code nào đó, có thể bây giờ bạn cảm thấy khó chịu khi phải tuân thủ convention nhưng một ngày nào đó việc xem lại mình đã code gì hay debug trên nó cũng trở nên dễ chịu hơn. Code được minify sẽ giảm bớt dung lượng và trở nên nhẹ hơn.

Bài viết được tổng hợp lại từ https://modernweb.com/45-useful-javascript-tips-tricks-and-best-practices/ - Tác giả: Saad Mousliki tại trang web (http://modernweb.com)

Sử dụng dấu

var items = [12, 548 , 'a' , 2 , 5478 , 'foo' , 8852, , 'Doe' , 2145 , 119];

var  randomItem = items[Math.floor(Math.random() * items.length)];
4 cuối mỗi dòng lệnh là một điều cần làm, bạn sẽ không bị cảnh báo gì khi bạn không dùng nó, tuy vậy thì nó sẽ được thêm bởi các trình soạn thảo nếu bạn cài thêm tiện ích cho Javascript. Nếu muốn tìm hiểu thêm vì sao, bạn có thể tham khảo tại link sau: http://davidwalsh.name/javascript-semicolons

5. Khởi tạo constructor cho đối tượng.

function Person(firstName, lastName){
    this.firstName =  firstName;
    this.lastName = lastName;        
}  

var Saad = new Person("Saad", "Mousliki");

6. Cẩn thận mỗi khi sử dụng var items = [12, 548 , 'a' , 2 , 5478 , 'foo' , 8852, , 'Doe' , 2145 , 119]; var randomItem = items[Math.floor(Math.random() * items.length)]; 6, var items = [12, 548 , 'a' , 2 , 5478 , 'foo' , 8852, , 'Doe' , 2145 , 119]; var randomItem = items[Math.floor(Math.random() * items.length)]; 7 và var items = [12, 548 , 'a' , 2 , 5478 , 'foo' , 8852, , 'Doe' , 2145 , 119]; var randomItem = items[Math.floor(Math.random() * items.length)]; 8

  • var items = [12, 548 , 'a' , 2 , 5478 , 'foo' , 8852, , 'Doe' , 2145 , 119];
    
    var  randomItem = items[Math.floor(Math.random() * items.length)];
    
    6: là một toán tử Javascript được sử dụng để trả về một chuỗi là tên kiểu nguyên thủy của một biến, đừng quên là typeof(null) sẽ trả về đối tượng, và đối với phần lớn các kiểu đối tượng khác (Array, Date, ...) cũng sẽ trả về là "object".
  • var items = [12, 548 , 'a' , 2 , 5478 , 'foo' , 8852, , 'Doe' , 2145 , 119];
    
    var  randomItem = items[Math.floor(Math.random() * items.length)];
    
    8: là thuộc tính của prototype bên trong, nó cũng có thể bị ghi đè.
  • var items = [12, 548 , 'a' , 2 , 5478 , 'foo' , 8852, , 'Doe' , 2145 , 119];
    
    var  randomItem = items[Math.floor(Math.random() * items.length)];
    
    7: là một toán tử Javascript khác, nó kiểm tra tất cả prototypes, trả về true nếu hàm tạo nó được tìm thấy và trả về false nếu không tìm được.

Cùng xem ví dụ sau:

var arr = ["a", "b", "c"];
typeof arr;   // "object" 
arr instanceof Array; // true
arr.constructor();  //[]

7. Tạo một Self-calling Function (Một hàm gọi chính nó).

Hàm này cũng được gọi là Self-Invoked Anonymous Function hay Immediately Invoked Function Expression (IIFE). Nó là một hàm thực hiện tự động khi bạn tạo nó:

(function(){
    // code mà bạn muốn chạy tự động
})();
// Ví dụ:
(function(a,b){
    var result = a+b;
    return result;
})(10,20)

8. Lấy giá trị ngẫu nhiên từ một mảng

var items = [12, 548 , 'a' , 2 , 5478 , 'foo' , 8852, , 'Doe' , 2145 , 119];

var  randomItem = items[Math.floor(Math.random() * items.length)];

9. Lấy một số ngẫu nhiên từ một dải số cho trước

var x = Math.floor(Math.random() * (max - min + 1)) + min;

10. Tạo một mảng bởi các số từ 0 đến max

var numbersArray = [] , max = 100;

for( var i=1; numbersArray.push(i++) < max;);  // numbersArray = [1,2,3 ... 100] 

11. Tạo một bộ ngẫu nhiên các ký tự chữ và số

function generateRandomAlphaNum(len) {
    var rdmString = "";
    for( ; rdmString.length < len; rdmString  += Math.random().toString(36).substr(2));
    return  rdmString.substr(0, len);
}
generateRandomAlphaNum(9)
// => "3rjzsgpmq"

12. Trộn một mảng các số

var numbers = [5, 458 , 120 , -215 , 228 , 400 , 122205, -85411];
numbers = numbers.sort(function(){ return Math.random() - 0.5});
/* mảng đã được trộn, kết quả: [120, 5, 228, -215, 400, 458, -85411, 122205]  */

Có thể bạn chưa biết hàm sort trong JS có thể sắp xếp theo 2 chiều - ASC hay DESC.

  • ASC:
[10] === 10    // false
[10]  == 10    // true
'10' == 10     // true
'10' === 10    // false
 [] == 0     // true
 [] === 0     // false
 '' == false   // => true nhưng true == "a" => false
 '' === false // false 
0
  • DESC:
[10] === 10    // false
[10]  == 10    // true
'10' == 10     // true
'10' === 10    // false
 [] == 0     // true
 [] === 0     // false
 '' == false   // => true nhưng true == "a" => false
 '' === false // false 
1

Còn trường hợp bạn muốn random thì lựa chọn đơn giản đó là dùng hàm

var x = Math.floor(Math.random() * (max - min + 1)) + min;

2(hàm trả về random một số trong khoảng 0->1) và trừ đi 0.5 để có thể trả về số âm hay dương, vì thế mảng được sort cũng sẽ random. Có một lựa chọn thay thế tốt hơn là triển khai sắp xếp ngẫu nhiên theo mã(ví dụ: mã Fish-Yates), hơn là dùng hàm sắp xếp gốc bởi Javascript. Bạn có thể xem thêm thảo luận ở đây hoặc bài viết này.

13. Chèn một mảng vào mảng khác

[10] === 10    // false
[10]  == 10    // true
'10' == 10     // true
'10' === 10    // false
 [] == 0     // true
 [] === 0     // false
 '' == false   // => true nhưng true == "a" => false
 '' === false // false 
2

14. Chuyển đổi một tham số thành một mảng

[10] === 10    // false
[10]  == 10    // true
'10' == 10     // true
'10' === 10    // false
 [] == 0     // true
 [] === 0     // false
 '' == false   // => true nhưng true == "a" => false
 '' === false // false 
3

vi dụ:

[10] === 10    // false
[10]  == 10    // true
'10' == 10     // true
'10' === 10    // false
 [] == 0     // true
 [] === 0     // false
 '' == false   // => true nhưng true == "a" => false
 '' === false // false 
4

15. Xác định một tham số truyền vào là một số?

[10] === 10    // false
[10]  == 10    // true
'10' == 10     // true
'10' === 10    // false
 [] == 0     // true
 [] === 0     // false
 '' == false   // => true nhưng true == "a" => false
 '' === false // false 
5

16. Xác định một đối số truyền vào là một mảng

[10] === 10    // false
[10]  == 10    // true
'10' == 10     // true
'10' === 10    // false
 [] == 0     // true
 [] === 0     // false
 '' == false   // => true nhưng true == "a" => false
 '' === false // false 
6

Lưu ý rằng nếu hàm toString() đã bị override, chúng ta không thể trả về đúng kết quả nếu dùng hàm này.

Hoặc dùng:

[10] === 10    // false
[10]  == 10    // true
'10' == 10     // true
'10' === 10    // false
 [] == 0     // true
 [] === 0     // false
 '' == false   // => true nhưng true == "a" => false
 '' === false // false 
7

Bạn cũng có thể dùng

var items = [12, 548 , 'a' , 2 , 5478 , 'foo' , 8852, , 'Doe' , 2145 , 119];

var  randomItem = items[Math.floor(Math.random() * items.length)];
7 nếu bạn không làm việc với nhiều ngữ cảnh. Truy nhiên nếu bạn làm việc với nhiều ngữ cảnh khác nhau, bạn sẽ nhận được kết quả sai. Cùng xem ví dụ sau:

[10] === 10    // false
[10]  == 10    // true
'10' == 10     // true
'10' === 10    // false
 [] == 0     // true
 [] === 0     // false
 '' == false   // => true nhưng true == "a" => false
 '' === false // false 
8

17. Lấy các giá trị nhỏ nhất hay lớn nhất trong một mảng các số

[10] === 10    // false
[10]  == 10    // true
'10' == 10     // true
'10' === 10    // false
 [] == 0     // true
 [] === 0     // false
 '' == false   // => true nhưng true == "a" => false
 '' === false // false 
9

18. Làm rỗng một mảng

function Person(firstName, lastName){
    this.firstName =  firstName;
    this.lastName = lastName;        
}  

var Saad = new Person("Saad", "Mousliki");
0

19. Đừng sử dụng delete để xóa một thành phần khỏi mảng

Hãy sử dụng

var x = Math.floor(Math.random() * (max - min + 1)) + min;

4 thay vì
var x = Math.floor(Math.random() * (max - min + 1)) + min;

5 để xóa một item khỏi mảng. Sử dụng
var x = Math.floor(Math.random() * (max - min + 1)) + min;

5 sẽ thay thế item bằng
var x = Math.floor(Math.random() * (max - min + 1)) + min;

7/
var x = Math.floor(Math.random() * (max - min + 1)) + min;

8 thay vì xóa nó khỏi mảng. Thay vì dùng:

function Person(firstName, lastName){
    this.firstName =  firstName;
    this.lastName = lastName;        
}  

var Saad = new Person("Saad", "Mousliki");
1

Hãy dùng:

function Person(firstName, lastName){
    this.firstName =  firstName;
    this.lastName = lastName;        
}  

var Saad = new Person("Saad", "Mousliki");
2

Hàm

var x = Math.floor(Math.random() * (max - min + 1)) + min;

5 nên được dùng để xóa một thuộc tính của một đối tượng.

20. Cắt bớt mảng sử dụng length

Cũng như ví dụ trước, làm rỗng mảng, chúng ta cũng có thể dùng

var numbersArray = [] , max = 100;

for( var i=1; numbersArray.push(i++) < max;);  // numbersArray = [1,2,3 ... 100] 

0 để xén bớt một mảng.

function Person(firstName, lastName){
    this.firstName =  firstName;
    this.lastName = lastName;        
}  

var Saad = new Person("Saad", "Mousliki");
3

Trường hợp bạn sử dụng length với giá trị lớn hơn độ dài mảng này thì các item

var x = Math.floor(Math.random() * (max - min + 1)) + min;

7 sẽ được thêm vào. Độ dài của mảng trong Javascript không phải là một thuộc tính chỉ đọc.Độ dài của mảng trong Javascript không phải là một thuộc tính chỉ đọc.

21. Sử dụng AND/OR cho biểu thức điều kiện.

function Person(firstName, lastName){
    this.firstName =  firstName;
    this.lastName = lastName;        
}  

var Saad = new Person("Saad", "Mousliki");
4

Logic OR cũng nên được sử dụng để đặt giá trị mặc định cho tham số truyền vào của hàm.

function Person(firstName, lastName){
    this.firstName =  firstName;
    this.lastName = lastName;        
}  

var Saad = new Person("Saad", "Mousliki");
5

22. Sử dụng phương thức var numbersArray = [] , max = 100; for( var i=1; numbersArray.push(i++) < max;); // numbersArray = [1,2,3 ... 100] 2 cho vòng lặp của một mảng

function Person(firstName, lastName){
    this.firstName =  firstName;
    this.lastName = lastName;        
}  

var Saad = new Person("Saad", "Mousliki");
6

23. Làm tròn số

function Person(firstName, lastName){
    this.firstName =  firstName;
    this.lastName = lastName;        
}  

var Saad = new Person("Saad", "Mousliki");
7

Lưu ý rằng hàm toFixed() trả về một chuỗi string, không phải là một số. Bạn cần parse nó nếu muốn nhận giá trị mới là một số.

24. Vấn đề dấu chấm động

function Person(firstName, lastName){
    this.firstName =  firstName;
    this.lastName = lastName;        
}  

var Saad = new Person("Saad", "Mousliki");
8

Tại sao lại

var numbersArray = [] , max = 100;

for( var i=1; numbersArray.push(i++) < max;);  // numbersArray = [1,2,3 ... 100] 

3? 0.1 + 0.2 bằng 0.30000000000000004. Những gì bạn cần biết là tất cả các bộ số trong Javascript là các số thực dấu chấm động được biểu diễn theo bộ nhị phân 64 bit, chuẩn IEEE 754. Bạn có thể tìm hiểu thêm ở link

Bạn có thể dùng

var numbersArray = [] , max = 100;

for( var i=1; numbersArray.push(i++) < max;);  // numbersArray = [1,2,3 ... 100] 

4 và
var numbersArray = [] , max = 100;

for( var i=1; numbersArray.push(i++) < max;);  // numbersArray = [1,2,3 ... 100] 

5 để giải quyết vấn đề trên.

25. Kiểm tra thuộc tính của một đối tượng khi sử dụng vòng lặp for-in

Đoạn mã sau sẽ hữu ích khi bạn muốn tránh lặp qua các thuộc tính từ prototype của đối tượng.

function Person(firstName, lastName){
    this.firstName =  firstName;
    this.lastName = lastName;        
}  

var Saad = new Person("Saad", "Mousliki");
9

26. Toán tử comma(dấu var numbersArray = [] , max = 100; for( var i=1; numbersArray.push(i++) < max;); // numbersArray = [1,2,3 ... 100] 6)

Trong Javascript, toán tử comma cũng tương tự trong C++, nó dùng gộp các phép toán lại với nhau, theo thứ tự phân cách bởi dấu

var numbersArray = [] , max = 100;

for( var i=1; numbersArray.push(i++) < max;);  // numbersArray = [1,2,3 ... 100] 

6

var arr = ["a", "b", "c"];
typeof arr;   // "object" 
arr instanceof Array; // true
arr.constructor();  //[]
0

27. Lưu các biến cần tính toán hay cần truy vấn

Trong khi sử dụng Jquery selector, chúng ta nên tạo biến lưu các thành phần DOM.

var arr = ["a", "b", "c"];
typeof arr;   // "object" 
arr instanceof Array; // true
arr.constructor();  //[]
1

28. Hãy xác định cụ thể tham số nào đó trước khi cho nó vào hàm var numbersArray = [] , max = 100; for( var i=1; numbersArray.push(i++) < max;); // numbersArray = [1,2,3 ... 100] 8

Hãy xem ví dụ sau để xem các giá trị trả vể của hàm

var numbersArray = [] , max = 100;

for( var i=1; numbersArray.push(i++) < max;);  // numbersArray = [1,2,3 ... 100] 

8 nhé:

var arr = ["a", "b", "c"];
typeof arr;   // "object" 
arr instanceof Array; // true
arr.constructor();  //[]
2

29. Không sử dụng chỉ số âm cho arrays

var arr = ["a", "b", "c"];
typeof arr;   // "object" 
arr instanceof Array; // true
arr.constructor();  //[]
3

Hãy chắc chắn rằng tham số truyền vào hàm

function generateRandomAlphaNum(len) {
    var rdmString = "";
    for( ; rdmString.length < len; rdmString  += Math.random().toString(36).substr(2));
    return  rdmString.substr(0, len);
}
generateRandomAlphaNum(9)
// => "3rjzsgpmq"

0 không phải là số âm.

30. Serialization và deserialization (với dữ liệu dạng JSON)

var arr = ["a", "b", "c"];
typeof arr;   // "object" 
arr instanceof Array; // true
arr.constructor();  //[]
4

31. Tránh sử dụng eval() hay hàm tạo của Function nhiều

Việc dùng hàm tạo hay hàm eval() sẽ tiêu tốn nhiều tài nguyên bởi mỗi lần gọi nó là mỗi lần các công cụ biên dịch phải chuyển đổi mã nguồn thành mã thực thi.

var arr = ["a", "b", "c"];
typeof arr;   // "object" 
arr instanceof Array; // true
arr.constructor();  //[]
5

32. Tránh sử dụng function generateRandomAlphaNum(len) { var rdmString = ""; for( ; rdmString.length < len; rdmString += Math.random().toString(36).substr(2)); return rdmString.substr(0, len); } generateRandomAlphaNum(9) // => "3rjzsgpmq" 1

Sử dụng

function generateRandomAlphaNum(len) {
    var rdmString = "";
    for( ; rdmString.length < len; rdmString  += Math.random().toString(36).substr(2));
    return  rdmString.substr(0, len);
}
generateRandomAlphaNum(9)
// => "3rjzsgpmq"

1 sẽ chèn thêm biến toàn cục, vì thế nếu có một biến cùng tên có thể gây nhầm lẫn và bị ghi đè.

33. Không nên sử dụng for-in cho mảng

Thay vì sử dụng:

var arr = ["a", "b", "c"];
typeof arr;   // "object" 
arr instanceof Array; // true
arr.constructor();  //[]
6

Thì cách tốt hơn là:

var arr = ["a", "b", "c"];
typeof arr;   // "object" 
arr instanceof Array; // true
arr.constructor();  //[]
7

function generateRandomAlphaNum(len) {
    var rdmString = "";
    for( ; rdmString.length < len; rdmString  += Math.random().toString(36).substr(2));
    return  rdmString.substr(0, len);
}
generateRandomAlphaNum(9)
// => "3rjzsgpmq"

3 và
function generateRandomAlphaNum(len) {
    var rdmString = "";
    for( ; rdmString.length < len; rdmString  += Math.random().toString(36).substr(2));
    return  rdmString.substr(0, len);
}
generateRandomAlphaNum(9)
// => "3rjzsgpmq"

4 sẽ được khởi tạo một lần bởi vì nó nằm trong câu lệnh đầu tiên của vòng lặp for

function generateRandomAlphaNum(len) {
    var rdmString = "";
    for( ; rdmString.length < len; rdmString  += Math.random().toString(36).substr(2));
    return  rdmString.substr(0, len);
}
generateRandomAlphaNum(9)
// => "3rjzsgpmq"

5

Tại sao? Bởi độ dài của arrayNumbers được tính toán lại mỗi khi vòng lặp lặp lại. Lưu ý: Việc tính toán lại độ dài trong mỗi lần lặp đã được cập nhật trong các Javascript engine mới nhất.

34. Truyền function vào setTimeout(), setInterval() thay vì truyền chuỗi string vào

Nếu bạn truyền một chuỗi string vào, chuỗi này được xác định với cách tương tự như hàm

function generateRandomAlphaNum(len) {
    var rdmString = "";
    for( ; rdmString.length < len; rdmString  += Math.random().toString(36).substr(2));
    return  rdmString.substr(0, len);
}
generateRandomAlphaNum(9)
// => "3rjzsgpmq"

6, là cách chậm hơn. Thay vì dùng chuỗi:

var arr = ["a", "b", "c"];
typeof arr;   // "object" 
arr instanceof Array; // true
arr.constructor();  //[]
8

Hãy viết trực tiếp vào

var arr = ["a", "b", "c"];
typeof arr;   // "object" 
arr instanceof Array; // true
arr.constructor();  //[]
9

35. Sử dụng switch-case thay vì dùng if-else

Sử dụng switch-case sẽ nhanh hơn khi có nhiều hơn 2 trường hợp so sánh, và code dễ nhìn hơn. Và cũng nên tránh sử dụng nó nếu bạn có nhiều hơn 10 cases.

36. Sử dụng switch-case với dải số

Bạn có thể sử dụng switch-case với dải số.

(function(){
    // code mà bạn muốn chạy tự động
})();
// Ví dụ:
(function(a,b){
    var result = a+b;
    return result;
})(10,20)
0

37. Tạo một đối tượng mà prototype của nó là một đối tượng

Chúng ta có thể tạo một đối tượng mà prototype của nó là những kiểu cung cấp như sau:

(function(){
    // code mà bạn muốn chạy tự động
})();
// Ví dụ:
(function(a,b){
    var result = a+b;
    return result;
})(10,20)
1

38. Hàm escaper HTML

(function(){
    // code mà bạn muốn chạy tự động
})();
// Ví dụ:
(function(a,b){
    var result = a+b;
    return result;
})(10,20)
2

Hàm này có thể dùng trong trường hợp người dùng thêm code html vào trang web:

(function(){
    // code mà bạn muốn chạy tự động
})();
// Ví dụ:
(function(a,b){
    var result = a+b;
    return result;
})(10,20)
3

Kết quả trả về sẽ là

(function(){
    // code mà bạn muốn chạy tự động
})();
// Ví dụ:
(function(a,b){
    var result = a+b;
    return result;
})(10,20)
4

39. Tránh việc dùng try-catch trong vòng lặp

Try-catch tạo thêm một biến mới trong phạm vi hiện tại tại thời gian chạy, mỗi khi mệnh đề try-catch được thực thi, ngoại lệ đã bắt được gán cho một biến.

Thay vì sử dụng:

(function(){
    // code mà bạn muốn chạy tự động
})();
// Ví dụ:
(function(a,b){
    var result = a+b;
    return result;
})(10,20)
5

Thì cách tốt hơn là:

(function(){
    // code mà bạn muốn chạy tự động
})();
// Ví dụ:
(function(a,b){
    var result = a+b;
    return result;
})(10,20)
6

function generateRandomAlphaNum(len) { var rdmString = ""; for( ; rdmString.length < len; rdmString += Math.random().toString(36).substr(2)); return rdmString.substr(0, len); } generateRandomAlphaNum(9) // => "3rjzsgpmq" 3 và function generateRandomAlphaNum(len) { var rdmString = ""; for( ; rdmString.length < len; rdmString += Math.random().toString(36).substr(2)); return rdmString.substr(0, len); } generateRandomAlphaNum(9) // => "3rjzsgpmq" 4 sẽ được khởi tạo một lần bởi vì nó nằm trong câu lệnh đầu tiên của vòng lặp for

Tại sao? Bởi độ dài của arrayNumbers được tính toán lại mỗi khi vòng lặp lặp lại. Lưu ý: Việc tính toán lại độ dài trong mỗi lần lặp đã được cập nhật trong các Javascript engine mới nhất.

(function(){
    // code mà bạn muốn chạy tự động
})();
// Ví dụ:
(function(a,b){
    var result = a+b;
    return result;
})(10,20)
7

34. Truyền function vào setTimeout(), setInterval() thay vì truyền chuỗi string vào

Nếu bạn truyền một chuỗi string vào, chuỗi này được xác định với cách tương tự như hàm function generateRandomAlphaNum(len) { var rdmString = ""; for( ; rdmString.length < len; rdmString += Math.random().toString(36).substr(2)); return rdmString.substr(0, len); } generateRandomAlphaNum(9) // => "3rjzsgpmq" 6, là cách chậm hơn. Thay vì dùng chuỗi:

Hãy viết trực tiếp vào

35. Sử dụng switch-case thay vì dùng if-else

Sử dụng switch-case sẽ nhanh hơn khi có nhiều hơn 2 trường hợp so sánh, và code dễ nhìn hơn. Và cũng nên tránh sử dụng nó nếu bạn có nhiều hơn 10 cases.

  • 36. Sử dụng switch-case với dải số
(function(){
    // code mà bạn muốn chạy tự động
})();
// Ví dụ:
(function(a,b){
    var result = a+b;
    return result;
})(10,20)
8

Bạn có thể sử dụng switch-case với dải số.

37. Tạo một đối tượng mà prototype của nó là một đối tượng

Chúng ta có thể tạo một đối tượng mà prototype của nó là những kiểu cung cấp như sau:

38. Hàm escaper HTML

(function(){
    // code mà bạn muốn chạy tự động
})();
// Ví dụ:
(function(a,b){
    var result = a+b;
    return result;
})(10,20)
9

Thì cách tốt hơn là:

function generateRandomAlphaNum(len) {
    var rdmString = "";
    for( ; rdmString.length < len; rdmString  += Math.random().toString(36).substr(2));
    return  rdmString.substr(0, len);
}
generateRandomAlphaNum(9)
// => "3rjzsgpmq"

3 và
function generateRandomAlphaNum(len) {
    var rdmString = "";
    for( ; rdmString.length < len; rdmString  += Math.random().toString(36).substr(2));
    return  rdmString.substr(0, len);
}
generateRandomAlphaNum(9)
// => "3rjzsgpmq"

4 sẽ được khởi tạo một lần bởi vì nó nằm trong câu lệnh đầu tiên của vòng lặp for

Tại sao? Bởi độ dài của arrayNumbers được tính toán lại mỗi khi vòng lặp lặp lại. Lưu ý: Việc tính toán lại độ dài trong mỗi lần lặp đã được cập nhật trong các Javascript engine mới nhất.

34. Truyền function vào setTimeout(), setInterval() thay vì truyền chuỗi string vào

Nếu bạn truyền một chuỗi string vào, chuỗi này được xác định với cách tương tự như hàm

function generateRandomAlphaNum(len) {
    var rdmString = "";
    for( ; rdmString.length < len; rdmString  += Math.random().toString(36).substr(2));
    return  rdmString.substr(0, len);
}
generateRandomAlphaNum(9)
// => "3rjzsgpmq"

6, là cách chậm hơn. Thay vì dùng chuỗi: