Vietnam

    Nodejs.vn

    • Register
    • Login
    • Search
    • Categories
    • Recent
    • Popular
    • Tags
    • Groups
    • Search
    1. Home
    2. vananh.dao0809
    3. Posts
    • Profile
    • Following 0
    • Followers 0
    • Topics 77
    • Posts 77
    • Best 0
    • Controversial 0
    • Groups 0

    Posts made by vananh.dao0809

    • Hiểu nhanh về innerHTML trong Javascript chưa đầy đầy 3 phút !

      Bài viết ngày hôm nay chúng ta cùng tìm hiểu về innerHTML trong Javascript , một thuộc tính cực kỳ thông dụng trong Javascript .

      779542bc-ae03-4057-b154-8c1138f9f0e6-image.png
      1 Tác dụng của innerHTML trong Javascript

      Tác dụng của thuộc tính innerHTML là lấy nội dung và thiết lập nội dung cho một node HTML nào đó ,Nếu bạn sử dụng jQuery thì có phương thức $(node).html() .

      2. Cú pháp innerHTML trong javascript

      Cú pháp của innerHTML như sau:

      // lấy nội dung
      let content = node.innerHTML;
       
      // Gán nội dung
      node.innerHTML = newContent;
      

      Trong đó:
      • newContent chính là nội dung bạn muốn gán vào node
      • node chính là đối tượng cần lấy hoặc cần gán nội dung.

      3. Cách dùng innerHTML trong javascript
      Ví dụ innerHTML javascript:
      Giả sử ta có đoạn code HTML như sau.

      <div id="node">
          Học JS tại Nodemy.vn 
      </div>
      

      Để lấy nội dung hoặc gán nội dung vào thẻ này thì ta sẽ sử dụng thuộc tính innerHTML.

      let node = document.getElementById('node');
      // lấy nội dung
      let content = node.innerHTML;
       
      // Gán nội dung
      node.innerHTML = "Học JS Node tại Nodemy.vn";
      

      Tài liệu tham khảo :

      posted in Javacsript
      vananh.dao0809
      vananh.dao0809
    • Cách truy xuất đến một thẻ HTML cực kỳ đơn giản.

      Trong bài viết ngày hôm nay chúng ta cùng tìm hiểu về DOM Element Javascript cách để truy xuất đến các tài liệu trong HTML .Khi nhắc đến DOM Element Javascript gồm các hàm sau : getElementById,
      getElementsByTagName, getElementsByClass và querySelectorAll .

      50-javascript.jpg
      1 Sử dụng getElementById để tìm theo ID

      var element = document.getElementById('idname');
      

      Ví dụ :

      // Lấy thẻ input
      var element = document.getElementById('website');
       
      // Lấy giá trị của thẻ input
      document.write(element.value);
      

      2. Sử dụng getElementsByTagName để tìm theo tên thẻ html
      Tên thẻ HTML chính là tên các thẻ như p, a, div, ... Và ta sẽ truy xuất tới nó bằng cú pháp sau:

      var element = document.getElementsByTagName('tagname');
      
      // Lấy thẻ input
      var element = document.getElementsByTagName('input');
       
      // Lấy giá trị của thẻ input
      document.write(element[0].value);
      

      Trong một trang web có thể có nhiều thẻ HTML giống nhau (ví dụ có hai thẻ div) nên hàm getElementsByTagName() sẽ trả về một mảng các object (xem bài mảng trong javascript) chứ không phải là một object nữa. Vì mình muốn lấy thẻ input thứ nhất và nó là phần tử đầu tiên trong mảng nên nhập số 0 vào.

      3. Sử dụng getElementsByClassName để tìm theo tên class
      Để tìm các thẻ HTML có class nào đó thì ta dùng cú pháp sau:
      var element = document.getElementsByClassName('input');
      Tương tự như tìm theo tên thẻ HTML, thì tìm theo tên class sẽ trả về một mảng các object nên bạn sẽ phải sử dụng cú pháp truy xuất mảng để chọn đúng đối tượng muốn lấy.

      Ví dụ :

      // Lấy thẻ input
      var element = document.getElementsByClassName('website');
       
      // Lấy giá trị của thẻ input
      document.write(element[0].value);
      

      4. Sử dụng querySelectorAll để tìm theo CSS selector

      Khi chọn các thẻ HTML theo class thì thường sẽ trả về hàng loạt các kết quả nên đôi khi sẽ có những kết quả mà ta không muốn lấy. Chính vì vậy javascript DOM có một phương thức kết hợp với CSS Selector để truy vấn có độ chính xác cao hơn, đó chính là hàm querySelectorAll.
      Và đây là cú pháp sử dụng:

      var element = document.querySelectorAll("selector css");
      

      Ví dụ:

      <html>
        <body>
          <input type="text" value="thẻ không cần lấy" class="website"/>
          <div>
              <input type="text" value="Thẻ Cần Lấy" class="website"/>
              <input type="text" value="thẻ không cần lấy"/>
          </div>
        </body>
      </html>
      

      Làm thế nào có thể chọn đúng một thẻ input nằm trong thẻ div và có class="website"?

      Trước tiên ta quay lại chút với CSS Selector đã nhé. Trong CSS để chọn thẻ input nằm trong thẻ div và có class="website" thì cú pháp là:
      div input.website
      Chỉ cần đưa css selector này vào hàm querySelectorAll là ta có được kết quả cần lấy.

      var element = document.querySelectorAll("div input.website");
      

      Và có một lưu ý tương tự là kết quả sẽ trả về một mảng các Objects.

      Nguồn tài liệu tham khảo : freetuts.net

      posted in Javacsript
      vananh.dao0809
      vananh.dao0809
    • Cách lấy nội dung và thay đổi thuộc tính thẻ HTML bằng Javascript vô cùng đơn giản.

      Trong bài viết ngày hôm nay chúng ta cùng tìm hiểu về cách lấy nội dung và cách thay đổi thuộc tính thẻ HTML nhé . Cùng khám phá bài viết này nhé .

      50-javascript.jpg
      1 Cách lấy nội dung trong thẻ HTML bằng JS

      Để lấy nội dung bên trong một thẻ HTML thì chúng ta sử dụng cú pháp như sau:

      document.getElementById("content").innerHTML
      

      Trong đó innerHTML chính là thuộc tính của đối tượng html, công dụng của nó là dùng để lấy hoặc gán giá trị cho một thẻ html.
      Để thay đổi nội dung cho một thẻ HTML thì ta dùng cú pháp sau:

      document.getElementById("content").innerHTML = "<h1>Nội dung</h1>";
      

      Để hiểu hơn chúng ta có ví dụ sau :
      Viết chương trình thay đổi nội dung bên trong của một thẻ div, và lấy nội dung bên trong của thẻ div đó.

      <html>
        <body>
          <script language="javascript">
            // Hàm thiết lập nội dung cho thẻ div#content
            function set_content()
            {
              document.getElementById("content").innerHTML = "<h1>Nội dung đã được thay đổi</h1>";  
            }
             
            // Hàm lấy nội dung cho thẻ div#content
            function get_content()
            {
              var html = document.getElementById("content").innerHTML;
              alert("Nội dung cần lấy là: " + html);        
            }
             
          </script>
          <div id="content">Nội dung của thẻ DIV</div>
          <input type="button" value="Lấy nội dung" id="get_content" onclick="get_content()" />
          <input type="button" value="Thay đổi nội dung" id="set_content" onclick="set_content()" />
        </body>
      </html>
      

      2 Thay đổi thuộc tính thẻ html bằng Javascript

      Để thay đổi giá trị của thuộc tính HTML thì ta sử dụng cú pháp như sau:

      document.getElementById("element").attributeName = "new value";
      

      Để lấy giá trị của thuộc tính HTML ta sử dụng cú pháp sau:

      document.getElementById("element").attributeName;
      

      Trong đó attributeName là tên của thuộc tính mà bạn cần xử lý. Tùy vào mỗi thẻ html mà có các thuộc tính khác nhau. Dưới đây là danh sách các thuộc tính thường dùng nhất.

      Từ đây có thể suy ra rằng trong Javascript để thiết lập (set) và lấy (get) thì sử dụng chung một cú pháp, chỉ khác nhau ở chỗ gán bằng và không có gán bằng.

      Để hiểu hơn chúng ta có ví dụ sau :

      Xây dựng chương trình khi click vào một button thì chuyển nó thành textbox, và tiếp tục click vào textbox thì sẽ đổi thành button .

      <html>
          <body>
              <script language="javascript">
                function change()
                {
                   // Lấy đối tượng
                   var object = document.getElementById("object");
                
                   // lấy thuộc tính type
                   var type = object.type;
               
                   // kiểm tra thuộc tính type và thay đổi
                  if (type == "button"){
                 
                     object.type = 'text';
                  }
                  else{
                      object.type = "button";
                  }
               
                }
              </script>
              <input type="button" value="CLick me" onclick="change()" id="object" />
          </body>
      </html>
      
      posted in Javacsript
      vananh.dao0809
      vananh.dao0809
    • Hiểu nhanh về phép chia phần dư và chia phần nguyên trong Javascript

      Trong bài viết ngày hôm nay cúng ta cùng tìm hiểu về phép chia lấy phần dư và chia phần nguyên trong Javascript nhé . Cùng tìm hiểu bài viết này nhé .

      tải xuống.png
      Phép chia lấy phần dư :

      Để chia lấy phần dư chúng ta sử dụng toán tử % . Để hiểu hơn chúng ta có ví dụ sau :

      var chiaPhanDu2 = 7 % 2;
       
      console.log(chiaPhanDu2); // Kết quả là 3
      

      Ngoài ra chúng ta cũng có thể dùng toán tử % để kiểm tra một số có thể chia hết cho một số khác hay không .

      Ví dụ :

      if (S % 3 == 0){
          console.log(S + " chia het cho 3");
      }
      

      Phép chia lấy phần nguyên

      Để chia lấy phần nguyên ta sử dụng phương thức Math.floor, đây là hàm dùng để làm tròn một số xuống cận dưới, tức là mọi số nó sẽ được làm tròn bỏ đi giá trị sau dấu phẩy động.

      Math.floor(3); // Kết quả: 3
      Math.floor(3.1); // Kết quả: 3
      Math.floor(3.5); // Kết quả: 3
      Math.floor(3.8); // Kết quả: 3
      

      Ngoài ra chúng ta cũng thể sử dụng công thức sau để làm tròn :
      Gọi a là số bị chia, b là số chia, thì phần nguyên của a chia b sẽ là:

      var phan_nguyen = (a - (a % b));
      

      Ví dụ: Lấy phần nguyên của phép 23 / 4.
      ```
      var phan_nguyen = (23 - (23 % 4));

      posted in Javacsript
      vananh.dao0809
      vananh.dao0809
    • Thẻ a trong HTML và những điều cần nhớ

      Trong bài viết ngày hôm nay chúng ta cùng tìm hiểu về thẻ a trong HTML nhé , cùng khám phá bài này nhé .

      5fb5b903-fc54-4b43-ad81-80d4fc7b6476-image.png

      1 Thẻ a trong HTML là gì ?

      Thẻ a trong html được dùng để tạo link, tức là các đường dẫn của một website nào đó trên internet.
      Cú pháp của thẻ a như sau:

      <a href="https://nodemy.vn">nodemy.vn</a>
      

      Ví dụ ta tạo liên kết có nội dung “ Học lập trình tại Nodemy “ trỏ đến đường dẫn nodemy.vn chúng ta làm như sau .

      <a href="https://nodemy.vn">Học lập trình tại Nodemy</a>
      

      2 Các thuộc tính của thẻ a

      Thuộc tính title của thẻ a

      Thuộc tính title dùng để mô tả ý nghĩa của đường liên kết. Khi bạn hover chuột vào link thì sẽ xuất hiện một dòng chữ, đó chính là nội dung mà ta đã đặt vào thuộc tính title.
      Ví dụ :

      <a href="https://nodemy.vn" title="học lập trình  thực chiến">Nodemy lập trình thực chiến </a>
      

      Thuộc tính rel của thẻ a

      Nếu người bình thường thì sẽ ít quan tâm đến thuộc tính này. Nhưng nếu bạn là dân SEO thì sẽ cần chú ý đấy.
      Thuộc tính rel dùng để khai báo cho các công cụ search engine biết là có dò đường link này hay không. Nó có hai giá trị như sau:
      • follow là có dò
      • nofollow là không dò
      Ví dụ: Khai báo cho các bot search không dò vào đường link ở ví dụ trên.

      <a href="https://nodemy.vn" rel="nofollow">Nodemy lập trình thực chiến</a>
      

      Thuộc tính target của thẻ a

      Khi bạn click vào link thì trình duyệt sẽ chuyển hướng đến trang đích ngay lập tức và ngay trên tab hiện tại. Nếu bạn muốn chuyển đến một tab khác thì có thể sử dụng thuộc tính target.
      • _blank thì nó sẽ chuyên link trên tab mới
      • _self thì nó sẽ chuyển link trên tab hiện tại (giá trị mặc định)
      • _parent thì nó sẽ chuyển link tới tab mở tab hiện tại. Ta còn hay gọi là tab cha của tab hiện tại
      • _top thì nó sẽ nhảy tới tab hiện tại và thường dùng trong iframe khi muốn thoát khỏi iframe và chạy tới trang gốc luôn.

      Thuộc tính download của thẻ a

      Nếu bạn muốn khi click vào đường link, thay vì truy cập vào link đó thì trình duyệt sẽ tải nội dung của đường link đó về thì hãy khai báo thuộc tính download nhé.

      <a href="https://nodemy.vn" download>Nodemy lập trình thực chiến</a>
      

      3. Giá trị href # của thẻ a trong HTML
      Khi bạn khai báo một thẻ a mà không muốn trỏ đến một liên kết nào thì hãy thiết lập giá trị href="#" nhé.

      <a href="#">học javascript</a>
      

      Ngoài ra, nếu bạn muốn khi click vào thẻ a thì trình duyệt sẽ di chuyển đến một vị trí nào đó trong trang web thì hãy làm theo cách sau.

      Bước 1: Đặt ID cho vị trí bạn cần di chuyển đến. Giả sử đó là thẻ div, và mình sẽ đặt id cho nó như sau:

      <div id="moveto"></div>
      

      Bước 2: Khi click vào thẻ a thì sẽ nhảy tới thẻ div#moveto, ta sẽ thiết lập như sau:

      <a href="#moveto" >Đi tới div#moveto</a>
      

      4. Các trạng thái của thẻ a trong HTML
      Thẻ a gồm có 4 trạng thái chính đó là:
      • link: Chưa có hành động nào trên link
      • visited: Đã click vào link và đi đến trang đích
      • hover: Di chuyển qua link
      • active: Link đã được active

      Nguồn tham khảo : freetuts.net.

      posted in HTML/CSS
      vananh.dao0809
      vananh.dao0809
    • Hiểu nhanh về hàm string.charAt() trong Javascript chưa đầy 3 phút

      Phương thức string.charAt() trong Javascript là gì ? Tác dụng của hàm string.charAt() như thế nào ? … trong bài viết ngày hôm nay chúng ta cùng khám phá câu trả lời cho những câu hỏi trên nhé .

      tải xuống.png

      Phương thức string.charAt() trong Javascript là gì ?

      Phương thức string.charAt() có chức năng tìm kiếm kí tự ở một vị trí nào đó trong chuỗi, vị trí tìm kiếm đó sẽ do người dùng xác định.
      Lưu ý rằng vị trí của một chuỗi sẽ bắt đầu từ vị trí 0, vị trí thứ 2 có chỉ số là 1 .... vị trí cuối cùng là string.length -1.

      Cú pháp

      Cú pháp:

      string.charAt(index)
      

      Trong đó:
      index là vị trí muốn tìm kiếm trong chuỗi.

      Cách sử dụng :

      Ví dụ: sử dụng phương thức string.charAt() để tìm kiếm các kí tự ở vị trí mong muốn.

      <!DOCTYPE html>
      <html>
          <head>
              <meta charset="utf-8">
          </head>
          <body>
              <h1>Học lập trình miễn phí tại freetuts.net</h1>
        
              <button onclick="myFunction()">Run</button>
        
              <p id="demo"></p>
        
              <script>
                  function myFunction() {
                      var str = "nodemy.vn";
                      var content = '';
                      content = content + 'Vị trí đầu tiên - ' + str.charAt(0) + '<br>';
                      content = content + 'Vị trí thứ 2 - ' + str.charAt(1) + '<br>';
                      content = content + 'Vị trí thứ 3 - ' + str.charAt(2) + '<br>';
                      content = content + 'Vị trí thứ 4 - ' + str.charAt(3) + '<br>';
                      document.getElementById("demo").innerHTML = content;
                  }
              </script>
          </body>
      </html>
      

      Kết quả :

      Vị trí đầu tiên - F
      Vị trí thứ 2 - r
      Vị trí thứ 3 - e
      Vị trí thứ 4 - e
      

      Ví dụ 2: Sử dụng kết hợp với string.length để tìm các kí tự ở cuối chuỗi.

      <!DOCTYPE html>
      <html>
          <head>
              <meta charset="utf-8">
          </head>
          <body>
              <h1>Học lập trình thực chiến tại nodemy.vn</h1>
        
              <button onclick="myFunction()">Run</button>
        
              <p id="demo"></p>
        
              <script>
                  function myFunction() {
                      var str = "Freetuts.net";
                      var content = '';
                      var len = str.length;
                      content = content + 'Vị trí đầu tiên - ' + str.charAt(0) + '<br>';
                      content = content + 'Vị trí thứ 2 - ' + str.charAt(1) + '<br>';
                      content = content + 'Vị trí kế cuối - ' + str.charAt(len-2) + '<br>';
                      content = content + 'Vị trí cuối cùng - ' + str.charAt(len-1) + '<br>';
                      document.getElementById("demo").innerHTML = content;
                  }
              </script>
          </body>
      </html>
      

      Kết quả :

      Vị trí đầu tiên - F
      Vị trí thứ 2 - r
      Vị trí kế cuối - e
      Vị trí cuối cùng - t
      
      posted in Javacsript
      vananh.dao0809
      vananh.dao0809
    • Hiểu nhanh về onmouseout của Javascript trong 5 phút .

      Sự kiện onmouseout trong Javascript là gì ? Tác dụng của sự kiện onmouseout trong Javascript như thế nào ? … trong bài viết ngày hôm nay chúng ta cùng tìm câu trả lời cho các câu hỏi trên nhé .

      tải xuống.png

      1 Sự kiện onmouseout trong Javascript là gì ?
      Sự kiện onmouseout là sự kiện khi người dùng di chuyển con trỏ chuột ra ngoài phạm vi hiển thị của thẻ HTML .
      2 Thêm sự kiện onmouseout như thế nào ?
      Để thêm sự kiện onmouseout vào một thẻ HTML nào đó thì ta có một số cách như sau:

      Cách 1 : Thêm trực tiếp vào thẻ HTML

      <input type="button" onmouseout="callMouseOutEvent()" value="Di chuyển vào đây"/>
      <script>
          function callMouseOutEvent(){
              alert('Bạn đã di chuyển chuột ra ngoài thẻ input');
          }
      </script>
      

      Cách 2 : Gắn hàm vào sự kiện onmouseout bằng mã Javascript

      <input type="button" id="btn" value="Di chuyển vào đây"/>
      <script>
          var obj = document.getElementById('btn');
          obj.onmouseout = function(){
              alert('Bạn đã di chuyển chuột ra ngoài thẻ input');
          };
      </script>
      

      Hoặc chún ta có thể sử dụng addEventListener.

      <input type="button" id="btn" value="Di chuyển vào đây"/>
      <script>
          var obj = document.getElementById('btn');
          obj.addEventListener('mouseout', function(){
              alert('Bạn đã di chuyển chuột ra ngoài thẻ input');
          });
      </script>
      
      posted in Javacsript
      vananh.dao0809
      vananh.dao0809
    • Hiểu nhanh về đối tượng Date của Javascript trong 5 phút

      Date trong Javascript là gì ? Tác dụng của đối tượng date trong Javascript ? Các phương thức của Date trong Javascript ? … trong bài viết ngày hôm nay chúng ta cùng tìm hiểu về đối tượng date trong Javascript nhé , cùng khám phá bài viết này nào !

      tải xuống.png

      Date trong Javascript là gì ?

      -Đối tượng date trong javascript là nơi xử lý các vấn đề về thời gian.
      Khởi tạo :

      • Theo thời gian hiện tại :
      new Date();
      
      • Khởi tạo ngày giờ từ giá trị time millisecond:
      new Date(milliseconds);
      

      Trong đó: milliseconds là thời gian chúng ta muốn khởi tạo đơn vị mili giây.

      • Khởi tạo ngày giờ từ một dateString:
      new Date(dateString);
      

      Trong đó: dateString có dạng "tháng ngày, năm giờ:phút:giây" trong đó tháng là tên tiếng anh.
      Ví dụ : September 08 , 2022 12:00:00

      • Khởi tạo ngày giờ từ một date string dạng atrribute:
      new Date(year, month, day, hours, minutes, seconds, milliseconds)
      

      Trong đó:
      • year là năm.
      • month là tháng.
      • hours là giờ.
      • minutes là phút.
      • seconds là giây.
      • milliseconds là mili giây.

      Các phương thức của Date trong Javascript

      Các phương thức get dữ liệu

      • getDate() trả về ngày trong tháng (1 - 31).
      • getDay() trả về ngày trong tuần (0-6), với chủ nhật là 0, thứ 2 là 1, thứ 3 là 2 ,...
      • getMonth() trả về tháng trong năm (0 - 11).
      • getFullYear() trả về năm dạng đầy đủ (YYYY).
      • getHours() trả về số giờ dạng 24h (0 - 23).
      • getMinutes() trả về phút trong giờ (0 - 59).
      • getSeconds() trả về số giây trong phút (0 - 59).
      • getMilliSeconds() trả về tích tắc trong giây (0 - 999).
      • getTime() Trả về thời gian dạng mili giây.

      Các phương thức set :
      • setDate(x) thiết lập ngày trong tháng (1 - 31).
      • setMonth(x) thiết lập tháng trong năm (0 - 11).
      • setFullYear(x) thiết lập năm dạng đầy đủ (YYYY).
      • setHours(x) thiết lập số giờ dạng 24h (0 - 23).
      • setMinutes(x) thiết lập phút trong giờ (0 - 59).
      • setSeconds(x) thiết lập số giây trong phút (0 - 59).
      • setMilliSeconds(x) thiết lập tích tắc trong giây (0 - 999).
      • setTime(x) thiết lập thời gian dạng mili giây.

      Ví dụ 1 :

      function get() {
                  var date = new Date(2017,04,06,12,08,05,150);
                  document.getElementById('result').innerText = date;
           }
      // Sat May 06 2017 12:08:05 GMT+0700 (Giờ Đông Dương)
      

      Ví dụ 2 :

      function get() {
                  var date = new Date();
                  var data = 'Ngày trong tháng: ' + date.getDate() + '<br />';
                  data += 'Ngày trong tuần: ' + date.getDay() + '<br />';
                  data += 'Tháng trong năm: ' + date.getMonth() + '<br />';
                  data += 'Năm đầy đủ: ' + date.getFullYear() + '<br />';
                  data += 'Giờ: ' + date.getHours() + '<br />';
                  data += 'Phút: ' + date.getMinutes() + '<br />';
                  data += 'Giây: ' + date.getSeconds() + '<br />';
                  data += 'Mili Giây: ' + date.getMilliseconds() + '<br />';
                  data += 'Time dạng mili giây: ' + date.getTime() + '<br />';
                  document.getElementById('result').innerHTML = data;
              }
      //Ngày trong tháng: 10
      //Ngày trong tuần: 2
      //Tháng trong năm: 4
      //Năm đầy đủ: 2022
      //Giờ: 11
      //Phút: 51
      //Giây: 20
      //Mili Giây: 518
      //Time dạng mili giây: 1652158280518
      

      Ví dụ 3 :

      function set() {
                  var date = new Date();
                  date.setDate(06);
                  date.setMonth(04);
                  date.setFullYear(2017);
                  date.setHours(15);
                  date.setMinutes(05);
                  date.setSeconds(5);
                  date.setMilliseconds(120);
              }
              function get() {
                  set();
                  var date = new Date();
                  var data = 'Ngày trong tháng: ' + date.getDate() + '<br />';
                  data += 'Ngày trong tuần: ' + date.getDay() + '<br />';
                  data += 'Tháng trong năm: ' + date.getMonth() + '<br />';
                  data += 'Năm đầy đủ: ' + date.getFullYear() + '<br />';
                  data += 'Giờ: ' + date.getHours() + '<br />';
                  data += 'Phút: ' + date.getMinutes() + '<br />';
                  data += 'Giây: ' + date.getSeconds() + '<br />';
                  data += 'Mili Giây: ' + date.getMilliseconds() + '<br />';
                  document.getElementById('result').innerHTML = data;
              }
      //Kết quả  
      //Ngày trong tháng: 10
      //Ngày trong tuần: 2
      //Tháng trong năm: 4
      //Năm đầy đủ: 2022
      //Giờ: 11
      //Phút: 56
      //Giây: 38
      //Mili Giây: 985
      
      posted in Javacsript
      vananh.dao0809
      vananh.dao0809
    • Hiểu nhanh về hàm Array Filter trong 3 phút

      Array Filter trong Javascript là gì ? tác dụng của hàm filter() trong Javascript là gì ? … đừng lo lắng trong bài viết ngày hôm nay chúng ta cùng tìm hiểu về hàm filter trong Javascript nhé .

      tải xuống.png
      Hàm filter trong Javascript là gì ?

      Hàm filter trong Javascript là hàm dùng để lặp qua các phần tử trong mảng, dùng để lọc các phần tử trong mảng theo một điều kiện nào đó .
      Hàm filter được tích hơp sẵn trong đối tượng mảng giống như hàm map trong javascript. Về cách thức hoạt động thì nó giống hàm map, nghĩa là nó sẽ có một tham số dạng function và function này sẽ xử lý cho mỗi lần lặp. Nếu function return true thì phần tử lần lặp đó được chấp nhận, ngược lại sẽ không được chấp nhận.

      Hàm filter có công dụng là sẽ lặp qua qua các phần tử, sau đó tùy vào từng bài toán mà sẽ quyết định chọn phần tử đó hay không. Cuối cùng hàm này sẽ trả về một mảng các phần tử đã chọn .

      Cú pháp của filter trong Javascript :

      objectArray.filter(function(value){
          return true / false;
      });
      

      Nếu return true thì phẩn tử được chọn, ngược lại return false thì phần tử không được chọn. Còn value chính là giá trị của mỗi phần tử trong mỗi lần lặp.

      Để hiểu hơn chúng ta có các ví dụ sau :

      Ví dụ 1 : Tìm số chia hết cho 5 trong một array

      var arr1 = [5, 10, 20, 22, 62, 75, 90];
       
      var ketQua = arr1.filter(function(item){
          return (item % 5 == 0);
      });
       
      console.log(ketQua);
      // Kết quả: [5,10, 20,75, 90]
      

      Ví dụ 2 : Tìm các phần tử > 20 trong Arr2

      var arr2 = [1, 10, 22, 24, 5, 35, 15];
       
      var ketQua2 = arr2.filter(function(item){
          return (item > 20);
      });
       
      console.log(ketQua2);
      // Kết quả: [22,24,35]
      
      posted in Javacsript
      vananh.dao0809
      vananh.dao0809
    • Hiểu nhanh về hàm array.sort trong 3 phút

      Trong bài viết ngày hôm nay chúng ta cùng tìm hiểu về hàm sort() trong Javascript , một hàm vô cùng thú vị trong Javascript .

      tải xuống.png
      Hàm sort trong javascript là gì?

      Khi nhấc đến Hàm Sort() ta biế đến đây là hàm dùng để sắp xếp các phần tử trong chính mảng đó, đồng thời sẽ kết quả đã sắp xếp đó vào một mảng mới .

      Thứ tự sắp xếp mặc định được tính là tăng dần. Tuy nhiên, bạn có thể can thiệp vào quá trình sắp xếp bằng cách truyền tham số là một mảng so sánh.

      Cú pháp của hàm Sort trong JS :

      // Functionless
      array.sort()
       
      // Arrow function
      array.sort((firstEl, secondEl) => { ... } )
       
      // Compare function
      array.sort(compareFn)
       
      // Inline compare function
      array.sort(function compareFn(firstEl, secondEl) { ... })
      

      Trong đó: compareFn là tham số không bắt buộc. Đây là một callback function dùng để quyết định thứ tự sắp xếp của các phần tử trong mảng. Hai tham số firstEl và secondEl đại diện cho hai phần tử kề nhau trong mảng, và ta sẽ sử dụng nó để quyết định cách sắp xếp.

      • Nếu hàm callback trả về số lớn hơn 0 thì secondEl sẽ đứng trước firstEl.
      • Nếu hàm callback trả về số bé hơn hoặc bằng 0 thì thứ tự được giữ nguyên, tức là firstEl sẽ đứng trước secondEl.

      Để hiểu hơn chúng ta có một vài ví dụ sau :
      Ví dụ 1 :

      const months = ['March', 'Jan', 'Feb', 'Dec'];
      months.sort();
      console.log(months);
      // output: Array ["Dec", "Feb", "Jan", "March"]
       
      const array1 = [1, 30, 4, 21, 100000];
      array1.sort();
      console.log(array1);
      // output: Array [1, 100000, 21, 30, 4]
      

      Ví dụ 2 :

      var score = [700, 8, 9, 10, 3];
       
      console.log(score.sort( (firstEl, secondEl) => {
          if (secondEl > firstEl){
              return -1;
          }
          else {
              return 0;
          }
      } ));
       
      // Kết quả: [3, 8, 9, 10, 700]
      
      posted in Javacsript
      vananh.dao0809
      vananh.dao0809
    • Hiểu nhanh về Array.slice Javascript trong 3 phút

      Array.slice là gì ? tác dụng của Array.slice như thế nào ? … trong bài viết ngày hôm nay chúng ta cùng tìm câu trả lời cho những câu hỏi trên nhé, cùng khám phá bài viết này nào !

      50-javascript.jpg

      Slice trong Javascript là gì ?

      Hàm slice có chức năng trích xuất một số phần tử của mảng, vị trí bắt đầu và kết thúc việc trích xuất sẽ được xác định bởi tham số truyền vào hàm.
      Hàm sẽ trả về kết quả là một mảng mới bao gồm các phần tử được trích xuất. Hàm sẽ không làm thay đổi mảng gốc.

      Cú pháp của của hàm slice trong JS :

      array.slice(start, end)
      

      Trong đó:
      • start là vị trí bắt đầu trích xuất.
      • end là vị trí kết thúc, kết quả sẽ không bao gồm phần tử end.
      • Hàm sẽ return về một mảng mới.
      • Nếu start và end là giá trị âm thì nó sẽ tính từ cuối mảng trở về đầu mảng.

      Để hiểu hơn chúng ta có ví dụ sau :
      Ví dụ 1:

      const animals = ['ant', 'bison', 'camel', 'duck', 'elephant'];
       
      console.log(animals.slice(2));
      // output: Array ["camel", "duck", "elephant"]
       
      console.log(animals.slice(2, 4));
      // output: Array ["camel", "duck"]
       
      console.log(animals.slice(1, 5));
      // output: Array ["bison", "camel", "duck", "elephant"]
       
      console.log(animals.slice(-2));
      // output: Array ["duck", "elephant"]
       
      console.log(animals.slice(2, -1));
      // output: Array ["camel", "duck"]
      

      Ví dụ 2 :

      let fruits = ['Chuối', 'Cam', 'Chanh', 'Táo', 'Xoài'];
       
      // Lấy hai phần tử Cam và Chanh trong mảng fruits
      // Ta phải nhập 1,3 vì phần tử cuối cùng không được tính.
      let citrus = fruits.slice(1, 3);
      
      // fruits chứa ['Chuối', 'Cam', 'Chanh', 'Táo', 'Xoài'];
      // citrus chứa ['Cam','Chanh'];
      
      posted in Javacsript
      vananh.dao0809
      vananh.dao0809
    • Hiểu nhanh về Callback trong Javascript chưa đầy 5 phút .

      Callback là gì ? tác dụng của callback trong Javascript như thế nào ? … trong bài viết ngày hôm nay chúng ta cùng tìm câu trả lời cho những câu hỏi trên nhé ,Cùng khám phá bài viết đầy thú vị này nhé .

      50-javascript.jpg
      Call back trong Javascript là gì ?

      Hiểu một cách đơn giản thì : Gọi lại là một function sẽ được thực thi sau khi một function khác đã được thực thi xong - do đó nó có tên là callback(gọi lại) .

      Cách tạo một Callback

      Việc đầu tiên hãy mở Chrome Developer Console trong máy bạn ra. (Windows: Ctrl + Shift + J)(Mac: Cmd + Option + J), và nhập khai báo hàm sau vào Console.log của bạn:

      function doHomework(subject) {
        alert(`Starting my ${subject} homework.`);
      }
      

      Ở trên, chúng ta đã tạo function doHomework(). Function của chúng ta có một biến, là đối tượng mà ta làm việc trên đó. Gọi function của bạn bằng cách nhập thông tin sau vào console.log :

      doHomework('math');
      // Alerts: Starting my math homework.
      

      Giờ chúng ta hãy add thêm callback vào như là một tham số của function . Callback sau đó được định nghĩa là đối số thứ hai bên trong lệnh gọi

      function doHomework () .

      function doHomework(subject, callback) {
        alert(`Starting my ${subject} homework.`);
        callback();
      }
      
      doHomework('math', function() {
        alert('Finished my homework');
      });
      

      Như bạn sẽ thấy, nếu bạn nhập code ở trên vào console.log, bạn sẽ nhận lại hai cảnh báo: cái đầu tiên là "Starting my math Homework" , tiếp theo là ‘Finished my homework’ .
      Tuy nhiên callback functions không phải lúc nào cũng phải được xác định bên trong lệnh gọi Function . Chúng có thể được định nghĩa ở nơi khác trong code của chúng ta như sau:

      function doHomework(subject, callback) {
        alert(`Starting my ${subject} homework.`);
        callback();
      }
      function alertFinished(){
        alert('Finished my homework');
      }
      doHomework('math', alertFinished);
      

      Kết quả hoàn toàn giống nhau, nhưng về thiết lập có một chút khác biệt. Như bạn thấy, chúng ta đã chuyển định nghĩa thông báo chức năng alertFinished làm đối số bên trong lệnh gọi Function doHomework ()

      Tác dụng của Callback trong Javascript .

      Javascript là một ngôn ngữ điều hành các sự việc,vì vậy mỗi lần thực thi thay vì chờ đợi phản hồi, Javascript vẫn sẽ tiếp tục thực thi các lệnh tiếp theo, đồng thời chờ đợi phản hồi từ các sự việc khác. Xem xét ví dụ sau:

      function first(){
        console.log(1);
      }
      function second(){
        console.log(2);
      }
      first();
      second();
      

      Đúng như bạn mong muốn,function đầu tiên được thực thi đầu tiên, và function thứ hai được thực thi thứ hai. màn hình console của trình duyệt in ra kết quả là:

      // 1
      // 2
      

      Tất cả đều tốt cho đến lúc bạn đặt ra câu hỏi sẽ thế nào nếu function thứ nhất chứa đoạn code mà không thể thực thi ngay tại thời điểm được gọi, ví dụ như function thứ nhất phải thực hiện API call và mất một khoảng thời gian mới nhận được kết quả phản hồi ? Để mô phỏng hành động này, ở đây tôi sẽ sử dụng setTimeout và để delay 500 mili giây. Đoạn code mới sẽ trông như sau:

      function first(){
        // Simulate a code delay
        setTimeout( function(){
          console.log(1);
        }, 500 );
      }
      function second(){
        console.log(2);
      }
      first();
      second();
      

      Hiện tại quan trọng là bạn không cần quan tâm cách hàm setTimeout () hoạt động như thế nào . Hãy chú trọng đến việc chúng tôi đã thêm vào bên trong console.log (1); độ trễ 500 mili giây . Vậy điều gì sẽ xảy ra khi chúng ta gọi các hàm của mình?

      first();
      second();
      // 2
      // 1
      

      Như các bạn thấy, mặc dù chúng ta gọi hàm first trước nhưng nó lại trả về kết quả sau hàm second.

      Không phải là Javascript không thực hiện theo thứ tự mà ta mong muốn, vấn đề là Javascript sẽ không đợi function first thực hiện xong mà sẽ thực hiện luôn function second. Để đảm bảo Js thực hiện đúng thứ tự ta định sẵn, ta cần sử dụng đến khái niệm callback function. Callback là cách đảm bảo code sẽ không hoạt động trước khi các code khác hoàn thành việc thực thi.

      Một vài lưu ý

      Callback phải là một function Callback là một function nên bạn nhất định phải truyền vào là một function, nếu bạn truyền một type khác thì bạn sẽ nhận được error notice: "Callback is function" trong console. Từ khóa this trong callback Như đã nói ở trên thì callback là một hàm bình thường nên khi sử dụng từ khóa this trong hàm thì nó sẽ hiểu this lúc này chính là đối tượng Window, nếu bạn dùng debuger trong hàm callback rồi vào console gõ this, thì sẽ được Window {external: Object, chrome: Object, result: undefined,...... Vì vậy cho dù bạn định nghĩa hàm callback nằm trong một object thì không thể truy cập đến dữ liệu của object thông qua từ khóa this.

      posted in Javacsript
      vananh.dao0809
      vananh.dao0809
    • Hiểu nhanh về Sự khác biệt giữa Display inline , Display Block và Display inline-block

      Display inline là gì ? Display Block là gì ? Display inline-block là gì ? Sự khác biệt Display Inline ,Display Block và Display inline-block là gì ? …. Đừng lo lắng trong bài viết ngày hôm nay mình sẽ giải đáp cho các bạn câu trả lời cho những câu hỏi trên nhé . Không vòng vo nữa chúng ta cùng khám phá bài viết này nào !

      24553a6b-f4f1-4aee-9798-6f502c9680d9-image.png

      Display inline

      Với display Inline thì các item sẽ nằm trên cùng một dòng, ví dụ như <span> . Nếu các items vượt quá độ dài của dòng thì item sẽ xuống dòng mới .

      Các item có kiểu display này không thể set width và height.
      Các inline item sẽ chỉ có thể điều chỉnh margin và padding left and right (top và bottom thì không thể).

      426b9fbd-b755-49fe-8928-2d8cf1f1ab55-image.png

      Display: block

      Khác với kiểu display: inline thì các item có kiểu display: block luôn được xuống dòng và chiếm toàn bộ width nếu width không được set. Ví dụ sẽ là div :

      594d5898-e2fa-4cdf-ab01-0b1cde5886c6-image.png

      Các item có kiểu display: block sẽ set được width, height, margin, padding đầy đủ 4 hướng (top, bottom, right, left).

      Display: inline-block

      Kiểu display: inline-block sẽ được sắp xếp giống với kiểu display: inline, nghĩa là các items sẽ được xếp cùng nhau trên một dòng . Tuy nhiên các items sẽ có thuộc tính của display: block như là có set width, height, margin, padding đủ 4 hướng.
      Để hiểu hơn chúng ta có ví dụ sau :

      7020a085-f29e-4061-8ebb-4406d4290207-image.png

      posted in HTML/CSS
      vananh.dao0809
      vananh.dao0809
    • Điểm nhanh một vài giá trị đặc biệt trong Javascript

      Trong bài viết ngày hôm nay chúng ta cùng tìm hiểu về các giá trị đặc biệt trong Javascript nhé , Chúng ta cùng khám phá bài viết vô cùng thú vị này nhé .

      50-javascript.jpg
      1 Nonvalue

      Sự khác biệt giữa undefind và Null :

      • null được coi là object, và object đó thể hiện một giá trị rỗng.
      • undefined có nghĩa là chưa có giá trị nào hết .

      2 Sự đặc biệt của Undefined

      Khi chúng ta đang ở chế độ non-strict, Chúng ta có thể gán một giá trị cho undefined .Và tất nhiên điều này không được khuyến khích .
      Chúng ta có ví dụ sau :

      function foo() {
          undefined = 2; // realy bad idea~
      }
      
      foo();
      
      function foo() {
          "use strict";
          undefined = 2; // Type Error!
      }
      
      foo();
      

      Và trong cả chế độ strict và non-strict, ta đều có thể tạo biến local có tên là undefined. (facepalm) . ( Không khuyến khích làm điều này )

      function foo() {
          "use strict";
          var undefined = 2;
          console.log(undefined);
      }
      
      foo();
      

      3Toán tử Void

      Một cách đơn giản để chúng ta có thể lấy được giá trị undefined thay vì gọi trực tiếp undefined ra . Đó chính là sử dụng toán tử Void . Câu lệnh void ___ sẽ đưa tất cả giá trị đứng trước đi và trả lại undefined. Nó không thay đổi giá trị của toán hạng đứng trước nó, nó chỉ đơn thuần là đảm bảo không có một giá trị nào được trả ra sau lệnh đó.
      Chúng ta có ví dụ sau :

      var a = 22;
      console.log(void a, a); // undefined 22
      

      Việc sử dụng toán tử void này cũng hữu ích trong một số trường hợp, nếu ta cần chắc chắn rằng một câu lệnh nào đó không trả về giá trị. Ví dụ:

      function doSomething() {
          // note: `APP.ready` là biến mình tự tạo nhé
          if (!APP.ready) {
              // try again later
              return void setTimeout(doSomething, 100);
          }
          var result;
          // làm gì đó linh tinh để sinh kết quả
          return result;
      }
      
      // ta chưa thể thực hiện ngay bây giờ?
      if (doSomething()) {
          // thì đi xử lý task khác trước thôi
      }
      

      ** 4 NaN**

      NaN viết tắt là not a number , khi thực thi một bài toán bất kỳ mà một trong hai toán hạng không phải number (hoặc giá trị của nó không thể được thông dịch thành number ở dạng base 10 hoặc base 16), phép toán sẽ đưa về một kết quả fail nhưng vẫn thuộc kiểu number, và người ta gọi đó là giá trị NaN .
      Chúng ta có ví dụ :

      var a = 3 / "foo"; // NaN
      typeof a === "number"; // true
      

      NaN là một giá trị đặc biệt mà nó không thể so sánh bằng với một giá trị NaN nào khác (hay gọi là nó không thể bằng chính nó cũng được). Và đây là giá trị duy nhất không có tính reflexive (đặc tính duy nhất x === x). Vì thế nên NaN !== NaN,

      5 Infinity

      Infinity trong JS được định nghĩa Khi thực hiện chia cho 0 với dương ( âm ), kết quả trả về sẽ là Infinity ( -Infinity ) .

      Chúng ta có ví dụ sau :

      var a = 1 / 0; // Infinity
      var b = -1 / 0; // -Infinity
      

      JS sử dụng IEEE 754 floating-point để thể hiện số, do đó nó sẽ có hiện tượng overflow ngay cả với phép toán cộng và trừ, trong trường hợp ấy ta sẽ nhận được giá trị Infinity và -Infinity. Ví dụ:

      var a = Number.MAX_VALUE; // 1.7976931348623157e+308
      a + a;                    // Infinity
      a + Math.pow(2, 970);     // Infinity
      a + Math.pow(2, 969);     // 1.7976931348623157e+308
      

      Theo như đặc tả, nếu một phép toán như cộng trả về một giá trị quá lớn để có thể present, IEEE 754 sẽ "làm tròn về phía gần nhất" của giá trị. Vì thế nên, Number.MAX_VALUE + Math.pow(2, 969) gần Number.MAX_VALUE hơn so với Infinity, do đó nó làm tròn xuống, còn Number.MAX_VALUE + Math.pow(2, 970) gần hơn với Infinity thế nên là nó làm tròn lên. Nhưng mà thôi đừng nghĩ quá nhiều về cái vấn đề này làm gì đau đầu.

      Một khi overflow về một chiều nào đó của infinities, ta sẽ không thể quay lại được giá trị ban đầu. Hay nói cách khác, ta chỉ có thể đi từ hữu hạn tới vô hạn nhưng không thể đi từ vô hạn về hữu hạn.

      Nếu bạn còn nhớ một câu hỏi thời còn đi học: "Kết quả sẽ là gì khi một số vô hạn chia cho một số vô hạn?". Đầu óc ngây thơ của chúng ta có thể nghĩ là nó bằng 1 hoặc bằng "vô hạn". Cả hai đều sai, trong cả toán học và JS. Infinity / Infinity không được định nghĩa là một phép toán. Trong JS, kết quả trả về NaN.

      Nhưng nếu có một số dương hữu hạn nào đó chia cho Infinity?. Đơn giản thôi, 0. Và sẽ thế nào nếu một số âm hữu hạn chia cho Infinity? Mời đọc tiếp phần dưới.
      Zero
      Có thể điều này sẽ gây bối rối cho những người đọc với một cái đầu thuần toán học. nhưng JavaScript có cả số 0 bình thường (hay còn gọi là số 0 dương +0) và một số 0 âm -0. Trước khi ta đi giải thích tại sao -0 tồn tại, ta sẽ xem JS xử lý những thứ này như thế nào. Bên cạnh việc thể hiện dưới ký hiệu -0, số 0 âm còn là kết quả sinh ra từ một số phép toán.
      Ví dụ

      var a = 0 / -3; // -0
      var b = 0 * -3; // -0
      

      Phép cộng và trừ không thể sản sinh ra số 0 âm.
      Số 0 âm khi log trên developer console thường hiển thị -0, tuy nhiên một số browser cũ vẫn hiển thị 0. Mặc dù vậy, có một điều kì lạ là khi ta stringify một giá trị 0 âm, kết quả sẽ là "0".

      var a = 0 / -3;
      // một số browser vẫn hiển thị đúng
      a; // -0
      
      // cơ mà khi ta chuyển nó sang string thì lại sai
      a.toString();  // "0"
      a + "";        // "0"
      String(a);     // "0"
      
      // thậm chí là JSON
      JSON.stringify(a); // "0"
      

      Cơ mà được cái là nếu chuyển từ string sang number thì vẫn đúng:

      + "-0";           // -0
      Number("-0");     // -0
      JSON.parse("-0"); // -0
      

      Ngoài việc stringify đưa sai sự thật, thì ta cũng cần phải chú ý vì khi so sánh cũng có vấn đề:

      var a = 0;
      var b = 0 / -3;
      
      a == b;   // true
      -0 == 0;  // true
      
      a === b;  // true
      -0 === 0; // true
      
      0 > -0; // false
      a > b;  // false
      

      Rõ ràng với tất cả các tính chất trên, nếu như ta có ý định phân biệt -0 và 0 trong code, ta không thể nào chỉ dựa vào những cách so sánh thông thường, thay vào đó ta cần triển khai 1 hàm để kiểm tra:

      function isNegZero(n) {
          n = Number(n);
          return (n === 0) && (1 / n === -Infinity);
      }
      isNegZero(-0);      // true
      isNegZero(0 / -3);  // true
      isNegZero(0);       // false
      

      Còn bây giờ thì là câu hỏi tại sao chúng ta phải cần số 0 âm?
      Có một vào ứng dụng nhất định mà developer sử dụng độ lớn của số để thể hiện một phần thông tin (ví dụ như tốc độ chuyển động của animation frame) và dấu của số để thể hiện một phần thông tin khác (ví dụ như chiều của chuyển động).
      Trong những ứng dụng đó, nếu một biến dịch chuyển dần tới 0 và mất đi dấu của nó, ta sẽ mất đi một phần thông tin về hướng mà biến đó di chuyển tới 0. Giữ đúng dấu của số 0 sẽ ngăn việc tạo ra những mất mát thông tin không mong muốn.

      6 Special Equality

      Như ta có thể thấy ở các phần trên, giá trị NaN và giá trị -0 có những behaviour rất đặc biệt khi sử dụng trong so sánh bằng. NaN thì không bằng chính nó, còn -0 thì lại bằng với 0.
      Với ES6, có một hàm utility mới mà ta có thể sử dụng để kiểm tra tính bằng nhau của các giá trị đặc biệt này, mà không xảy ra bất kì exception nào. Hàm đó là Object.is(..):

      var a = 2 / "foo";
      var b = -3 * 0;
      
      
      Object.is(a, NaN);  // true
      Object.is(b, -0);   // true
      
      Object.is(b, 0);    // false
      

      Có một polyfill khá là đơn giản cho hàm này để sử dụng ở các môi trường pre-ES6:

      if (!Object.is) {
          Object.is = function(v1, v2) {
              // test for `-0`
              if (v1 === 0 && v2 === 0) {
                  return 1 / v1 === 1 / v2;
              }
              // test for `NaN`
              if (v1 !== v1) {
                  return v2 !== v2;
              }
              // everything else
              return v1 === v2;
          }
      }
      

      Không nên sử dụng Object.is(..) khi ta biết chắc rằng việc sử dụng == hoặc === đảm bảo an toàn. Việc sử dụng toán tử đem lại hiệu quả cao hơn và chắc chắn là thông dụng hơn. Object.is(..) phần lớn được sử dụng cho những trường hợp so sánh bằng đặc biệt.

      Tài liệu tham khảo : Viblo

      posted in Javacsript
      vananh.dao0809
      vananh.dao0809
    • Top 7 mẹo tạo ấn tượng tốt với nhà phỏng vấn

      Trong thời đại công nghệ ngày nay, thị trường việc làm đang có tính cạnh tranh cao hơn bao giờ hết. Không khó để có một công việc, nhưng để có được một công việc tốt thì ngày càng khó khăn hơn, đặc biệt trong lĩnh vực công nghệ.

      5aed57f2-12ab-4a4e-a031-fe20a6abf0b3-image.png

      Khác với các lĩnh vực khác, các kỹ sư phần mềm hoặc kỹ sư mạng còn phải trải qua bài thi viết code (Coding interview) vô cùng căng thẳng để có thể nhận được offer từ các công ty công nghệ.
      Vì vậy, bên cạnh việc vững kiến thức và kỹ năng, biết thêm các mẹo coding interview cũng sẽ giúp bạn đạt kết quả tốt hơn khi đi phỏng vấn. Trong bài này, chúng ta sẽ khám phá 7 mẹo giúp bạn chinh phục buổi phỏng vấn Coding Interview nhé.

      ***Lưu ý: Đây chỉ là những mẹo nhỏ giúp bạn gây ấn tượng tốt hơn trong mắt nhà tuyển dụng trong buổi phỏng vấn Coding Interview. Tất cả những điều này không nên được coi là kim chỉ nam hay yếu tố quan trọng nhất trong việc tham gia phỏng vấn của bạn.

      Mẹo 1: TÌM HIỂU TRƯỚC VỀ CÔNG TY MÀ BẠN ỨNG TUYỂN

      Điều này nghe có vẻ hiển nhiên với nhiều người, nhưng không phải ai cũng nắm được. Việc tìm hiểu trước cho bạn rất nhiều lợi thế, nó sẽ giúp bạn thể hiện được sự hứng thú với công ty trước người phỏng vấn. Câu hỏi ở đây là tìm hiểu những gì ?

      Nếu có thể, cách tìm hiểu tốt nhất là hãy hỏi han những người bạn hiện đang làm việc tại công ty đó. Hỏi họ về kinh nghiệm phỏng vấn, văn hóa công ty, trải nghiệm làm việc ở đó, thậm chí ngôn ngữ lập trình thường được sử dụng trong công ty.

      Tuy nhiên, không phải ai cũng quen nhân sự nội bộ của công ty, vì vậy dưới đây là một vài gợi ý:

      • Dành thời gian để đọc qua trang web, blog và profile mạng xã hội của công ty. Điều này sẽ giúp bạn hiểu về công việc và văn hóa của doanh nghiệp.

      • Ghi lại bất kỳ dự án hiện tại hoặc đang thực hiện nào mà công ty đã công khai. Đặt câu hỏi về những điều này sẽ thể hiện sự quan tâm của bạn đối với công ty và cho thấy rằng bạn đã tìm hiểu trước.

      • Đưa ra một số câu hỏi cụ thể của công ty để hỏi trong cuộc phỏng vấn.

      Mẹo 2: ÔN LẠI NHỮNG BÀI CODE PHỔ BIẾN TRONG CODING INTERVIEW

      Nếu chỉ được chọn một mẹo duy nhất để nhắn nhủ tới các bạn, thì đây sẽ là mẹo hay dành cho bạn : hãy dành thời gian ôn tập các bài tập Coding Interview phổ biến nhất! Điều này sẽ giúp bạn làm quen với các đề bài và gia tăng mức độ tự tin khi tham gia phỏng vấn.

      Theo dữ liệu do freeCodeCamp công bố, những ứng viên đã từng giải (từ trước) các câu hỏi trong buổi Coding interview có xu hướng được tuyển dụng cao hơn 16.6% so với các ứng viên khác.
      Vì vậy, việc ôn luyện và giải các bài tập coding phổ biến là một bước không thể thiếu nếu bạn muốn ghi điểm trong buổi phỏng vấn Coding Interview.

      Các tips dành cho bạn:

      • Giải đề trên leetcode. Hãy bắt đầu với mức độ Easy trước, sau đó tăng dần lên Medium và Hard
      • Lựa chọn các đề bài theo Tag tên công ty mà bạn nhắm tới
      • Quan trọng: Hãy tham gia Mock interview với bạn bè của bạn.

      3: NẮM VỮNG KIẾN THỨC NỀN TẢNG

      Các ngôn ngữ lập trình mới có thể hào nhoáng, nhưng tất cả đều phải dựa vào kiến thức cơ bản về thuật toán, cấu trúc dữ liệu. Trong nhiều trường hợp, nhà tuyển dụng sẽ ưu tiên những ứng viên có kiến thức nền tốt hơn so với những ứng viên chỉ biết sử dụng ngôn ngữ lập trình mà không nắm vững thuật toán.
      Một vài kiến thức bạn nên nắm vững trước khi tham gia Coding interview như: Cấu trúc dữ liệu, Array, Hash Table, Heaps, thuật toán tìm kiếm, Dynamic Programming, Trees, v.v.

      Tips:
      • Trước khi bạn bắt đầu nộp đơn xin việc, hãy dành 3-5 giờ mỗi tuần để ôn lại các kiến thức nền tảng
      • Xem qua các ghi chú cũ mà bạn có thể có từ các bài học trước.

      4: CHỌN NGÔN NGỮ LẬP TRÌNH NÀO ĐỂ PHỎNG VẤN?

      Có 3 hướng để lựa chọn ngôn ngữ để giải đề Coding interview.

      Cách thứ nhất, chọn ngôn ngữ mà bạn tự tin nhất. Đây là cách lựa chọn tương đối an toàn với hầu hết tất cả mọi người. Nó sẽ giúp bạn tránh được những lỗi cú pháp sơ đẳng trong việc viết lời giải. Qua đó tránh những sai lầm đáng tiếc.
      Bạn cũng có thể luyện tập và chọn ngôn ngữ trong bản mô tả công việc của vị trí bạn đang ứng tuyển. Một số nhà tuyển dụng đánh giá cao việc ứng viên có thể giải đề bằng ngôn ngữ mà họ ưu tiên hoặc đang sử dụng tại công ty.
      Cuối cùng, nếu phải chọn một loại ngôn ngữ lập trình tối ưu nhất cho Coding Interivew, thì đó là Python. Python có các chức năng mạnh mẽ và tiện lợi được tích hợp sẵn trong nó. Những cấu trúc dữ liệu này cực kỳ hữu ích trong việc giải đề trong Coding Interivew, bởi vì chúng cung cấp cho bạn nhiều công cụ mặc định giúp bạn tập trung thời gian vào việc tư duy giải quyết vấn đề.
      Tips:
      • Nếu bạn còn ít thời gian trước buổi Coding interview, hãy chọn ngôn ngữ bạn tự tin nhất
      • Nếu bạn còn nhiều thời gian ôn luyện, hãy chọn ngôn ngữ mà công ty ưu tiên (nếu có), hoặc chọn Python.

      5: Giữ vững tâm lý

      Nghe có vẻ thừa thãi, nhưng lời khuyên này không bao giờ thừa! Một số người thể hiện tốt dưới áp lực, nhưng số khác thì không.
      Điều thú vị là các nhà nghiên cứu gần đây đã phát hiện ra rằng các cuộc phỏng vấn kỹ thuật thường đánh giá mức độ căng thẳng của ứng viên nhiều hơn so với tài năng*. (Nguồn ở cuối bài)
      Nghiên cứu này cho biết thêm: các công ty đang bỏ lỡ những lập trình viên thực sự giỏi vì những lập trình viên đó không giỏi giải thích thành tiếng công việc của họ trong khi viết code.
      Điều đó đồng nghĩa với: nhiều lập trình viên bỏ lỡ công việc mơ ước chỉ vì không giỏi diễn đạt lời giải của mình trong Coding interview.
      Tips:
      • Hãy mock interview với bạn bè để luyện tập, hãy quen với việc trình bày ý tưởng trước khi viết code.
      • Và đừng quên xin feedback hoặc ghi âm lại buổi mock interview của bạn để tìm các cơ hội cải thiện.

      Mẹo 6: DỌN DẸP PROFILE MẠNG XÃ HỘI

      Có nhiều luồng ý kiến trái chiều về vấn đề này. Một số cho rằng mạng xã hội là chốn riêng tư và và nhà tuyển dụng không nên dựa vào đó để đánh giá ứng viên. Số khác lại cho rằng nếu profile MXH của ứng viên có những dấu hiệu bất thường và đi ngược lại với văn hóa công ty, họ sẽ từ chối ứng viên đó.
      Bạn có biết rằng 70% nhà tuyển dụng sử dụng mạng xã hội để sàng lọc các ứng viên tiềm năng - và trong số đó, 57% đã tìm thấy nội dung khiến họ không thuê ứng viên(**)? Một bình luận kém văn hóa hoặc một bức ảnh không chuyên nghiệp có thể làm mất cơ hội có được công việc mơ ước của bạn!
      Nếu bạn muốn tối ưu hóa cơ hội tạo ấn tượng đầu tiên đối với người phỏng vấn, bạn nên dành một chút thời gian để dọn dẹp sự hiện diện trực tuyến của mình.
      Tips:
      • Tìm kiếm tên của bạn trên Google để xem những hồ sơ nào sẽ dễ dàng hiển thị cho người phỏng vấn
      • Thực hiện kiểm tra profile các MXH của bạn để xóa bất kỳ hình ảnh, bài đăng hoặc cuộc trò chuyện nào có thể là dấu hiệu báo trước cho những người phỏng vấn (Linkedin, Facebook, Twitter, …)
      • Tạo thói quen tạo và đăng nội dung trực tuyến liên quan đến ngành của bạn.

      Mẹo 7: LOẠI BỎ NHỮNG KHOẢNH KHẮC NGẠI NGÙNG BẰNG NHỮNG MẨU CHUYỆN NHỎ

      Trọng tâm của một buổi Coding interview là sự hiểu biết về lập trình của ứng viên, nhưng những cuộc trò chuyện nhỏ sẽ tạo ra ấn tượng khá lớn cho người phỏng vấn.
      Người phỏng vấn cũng là con người như chúng ta. Họ cũng có cảm xúc, và mặc dù họ thường cố gắng chuyên nghiệp nhất có thể, thì phần nào đó, dù nhỏ, họ vẫn đánh giá cao những người họ thích. Khi ở trong phòng phỏng vấn, bạn nên cố gắng gạt bớt căng thẳng sang một bên và tạo kết nối với người phỏng vấn.

      Tips:
      • Hãy đưa ra một vài câu hỏi hay để hỏi người phỏng vấn về kinh nghiệm của họ với công ty
      • Bạn có thể tỏ ra hài hước ở mức độ vừa phải và đúng mực, điều này sẽ giúp giảm bớt căng thẳng giữa 2 người

      Trích dẫn và Tài liệu tham khảo:

      ScienceDaily - Nhà phỏng vấn có xu hướng đánh giá mức độ tự tin của ứng viên hơn so với lời giải
      CareerBuilder Survey - Hơn một nửa nhà phỏng vấn lựa chọn không tuyển một ứng viên do profile trên mạng xã hội
      Glassdoor - Nhà tuyển dụng sẽ xem gì ở profile mạng xã hội của bạn?

      posted in Chia sẻ
      vananh.dao0809
      vananh.dao0809
    • Hiểu nhanh về Toán tử 3 ngôi trong Javascript

      Toán tử ba ngôi trong Javascript là gì ? tác dụng của Toán tử ba ngôi trong Javascript ? Cách sử dụng của toán tử ba ngôi như thế nào ?
      Trong bài viết ngày hôm nay chúng ta cùng tìm hiểu về toán tử ba ngôi trong javascript nhé , chúng ta cùng khám phá bài viết này nào !

      Toán tử ba ngôi trong Javascript là gì ?

      50-javascript.jpg

      Toán tử ba ngôi hay còn gọi là toán tử điều kiện ,là một toán tử được cấu tạo bởi ba đối số gồm biểu thức điều kiện, kết quả khi điều kiện đúng và kết quả khi điều kiện sai .

      Toán tử 3 ngôi trong JavaScript cho phép chúng ta kiểm tra một điều kiện nào đó trong một dòng code duy nhất và trả về giá trị, thay vì phải sử dụng nhiều câu lệnh if-else, giúp cho việc code đơn giản và thông minh hơn.

      Chúng ta có cú pháp của toán tử ba ngôi như sau :

      condition ? true_value : false_value;
      

      Trong đó condition là biểu thức điều kiện, true_value là giá trị trả về khi điều kiện đúng và false_value là giá trị trả về khi điều kiện sai.

      Để hiểu hơn chúng ta có ví dụ sau :

      Ví dụ 1 :
      Cho biến button là 1 string và Biến page là 1 số nguyên từ 1 đến 10
      Nếu biến button = ‘next’ thì page tăng 1 đơn vị
      Nếu biến button = ‘prev’ thì page giảm 1 đơn vị
      Nếu button nhận giá trị từ 1-10 thì page nhận giá trị tương tự
      Nếu page = 10 và button = ‘next’ thì page vẫn = 10
      Nếu page = 1 và button = ‘prev’ thì page vẫn = 1

      Áp dụng toán tử ba ngôi chúng ta có thể làm như sau :

      var button ='prev';
      var page = 1; 
      var ketqua =
      page==10 && button == 'next' ? page=10 :
      page==1 && button == 'prev' ? page=1 :
      
       button=='next'?++page:
      button == 'prev' ? --page:
      button>=1 && button <=10 ? page=button:
      'khong hop le'
      
      console.log(page);
      
      posted in Javacsript
      vananh.dao0809
      vananh.dao0809
    • 3 Cách đơn giản để tính tổng các phần tử trong một Array trong Javascript

      Trong bài viết ngày hôm nay minh xin giới thiệu đến các bạn 3 cách đơn giản để tính tổng phần tử trong một Array nhé , Chúng ta cùng theo dõi bài viết này nhé .

      1 Sử dụng vòng lặp for để cộng tất cả các phần tử trong một Array

      Để tính tổng các phần tử trong một Array bằng vòng lặp, chúng ta đơn giản tạo ra một vòng lặp để truy xuất và cộng lần lượt giá trị của các phần tử vào một tổng chung.
      Để hiểu hơn chúng ta có ví dụ sau :

      let num = [47, 75, 92, 61, 54, 83, 76];
      let sum = 0;
      for (let i = 0; i < num.length;i++){
          sum += num[i];
      }
      
      console.log(sum); //488
      

      Tương tự chúng ta có thể áp dụng với vòng while

      let num = [47, 75, 92, 61, 54, 83, 76];
      let sum = 0, i = 0;
      while ( i < num.length){
          sum += num[i];
          ++i;
      }
      
      console.log(sum); //488
      

      2 Tính tổng các phần tử trong mảng bằng forEach

      Khi nhắc đến forEach trong Javascript chúng ta biết nó có thể lấy phần tử trong mảng theo thứ tự.
      Áp dụng forEach để tính tổng các phần tử trong Array chúng ta có thể làm như sau :

      let num = [47, 75, 92, 61, 54, 83, 76];
      let sum = 0;
      num.forEach(function(element){
      sum +=element;
      });
      
      console.log(sum); //488
      

      Ngoài ra chúng ta có thể tính tổng các phần tử của một Array bằng các hàm , phương thức giống như forEach .
      Chúng ta có ví dụ với Array map :

      let num = [47, 75, 92, 61, 54, 83, 76];
      let sum = 0;
      num.map(function(element){
      sum += element;
      });
      
      console.log(sum); //488
      

      Ví dụ với Array filter :

      let num = [47, 75, 92, 61, 54, 83, 76];
      let sum = 0;
      num.filter(function(element){
        sum += element;
      });
      
      console.log(sum); //488
      

      3 Tính tổng các phần tử trong mảng JavaScript bằng Array reduce

      Phương thức Array reduce lại hoàn toàn khác với 2 phương thức Array map và Array filter ở trên, bởi chức năng tính tổng các phần tử trong mảng JavaScript không phải là chức năng phụ, mà là chức năng chính của nó. Bởi vậy đây cũng là phương thức gọn gàng và được sử dụng nhiều nhất trong các phương pháp tính tổng các phần tử trong mảng.
      Tất nhiên Array reduce không phải được sử dụng chỉ để tính tổng các phần tử. Bạn có thể tìm hiểu thêm rất nhiều cách sử dụng khác nhau của phương thức này tại bài viết Array reduce trong JavaScript
      Với việc tính tổng các phần tử trong mảng JavaScript, chúng ta sử dụng

      Array reduce với cú pháp sau đây:

      arr.reduce(callbackFn, initialValue);
      

      Trong đó:
      o arr là mảng ban đầu
      o callbackFN là hàm callback chứa xử lý tính tổng. Hàm callback sẽ nhận từng phần tử từ mảng arr để tính tổng.
      o initialValue là giá trị đầu tiên được truyền vào hàm callback trong lần gọi hàm đầu tiên. Nếu được lược bỏ thì giá trị phần tử đầu tiên của mảng arr sẽ được sử dụng.

      Lại nữa, hàm callback sử dụng trong phương thức reduce có thể được viết với 1 trong 3 cách sau đây:

      callbackFn(accumulator, value)
      callbackFn(accumulator, value, index)
      callbackFn(accumulator, value, index, array)
      

      Trong đó:
      o accumulator là biến dùng để tích lũy các kết trả về sau mỗi lần gọi hàm callback. Sau khi tất cả các phần tử được xử lý, accumulator sẽ là kết quả cuối cùng được trả về từ Array reduce.
      o value là tên một biến dùng để gán giá trị của phần tử đang được lấy từ mảng để truyền vào callbackFN
      o index là tên một biến dùng để gán index của phần tử đang được lấy từ mảng để truyền vào callbackFN
      o array là tên một biến dùng để gán cả mảng ban đầu để truyền vào callbackFN

      Hàm callback sẽ nhận lần lượt các phần tử từ mảng ban đầu rồi cộng dồn vào biến tích lũy accumulator. Và vào lần trả về cuối cùng, accumulator chính là tổng cần tìm.
      Ví dụ cụ thể, chúng ta có thể tính tổng các phần tử trong mảng JavaScript bằng Array reduce như sau:

      let num = [47, 75, 92, 61, 54, 83, 76];
      let sum = num.reduce(function(accumulator, element){
        return accumulator + element;
      }, 0);
      
      console.log(sum);
      

      Trong ví dụ này, chúng ta chỉ định giá trị của initialValue bằng 0, và dùng hàm callback với các đối số gồm accumulator và element như trên.
      Lại nữa, chúng ta có thể dùng arrow function để thay thế cho hàm callback khi sử dụng phương thức Array reduce, như ví dụ sau đây:

      let num = [47, 75, 92, 61, 54, 83, 76];
      let sum = num.reduce((sum, element) => sum + element, 0);
      
      console.log(sum);
      // 488
      
      posted in Javacsript
      vananh.dao0809
      vananh.dao0809
    • Hiểu nhanh về DOM trong 3 phút

      DOM là gì ? Cách sử dụng DOM như thế nào ? Cấu trúc của DOM trong Javascript ? … Trong bài viết ngày hôm nay chúng ta cùng tìm hiểu câu trả lời cho những câu hỏi trên nhé . Cùng khám phá bài viết này nào .

      1 DOM là gì ?

      DOM Javascript là viết tắt của chữ Document Object Model, dịch tạm ra là mô hình các đối tượng trong tài liệu HTML. Thông qua mô hình DOM ta có thể truy xuất đến các thẻ HTML một cách dễ dàng.
      Các bạn có thể xem hình sau để hiểu hơn :

      70ea6dc4-d887-4856-9b92-262e409b8a79-image.png
      2 Nhiệm vụ của DOM Javascript là gì ?

      Tóm lại, nhiệm vụ của DOM trong javascript là như sau:
      • Cho phép truy xuất đến các thẻ html.
      • Thay đổi các thuộc tính của thẻ html
      • Thay đổi css của các thẻ html
      • Tạo, xóa, thêm các thẻ html

      3. Các loại DOM trong Javascript

      Việc xử lý và làm việc với đối tượng HTML rất phức tạp và đa dạng. Xét về tính chất thì người ta chia ra làm 8 loại DOM khác nhau như sau.
      Danh sách chia nhóm DOM:

      • DOM document: có nhiệm vụ lưu trữ toàn bộ các thành phần trong tài liệu của website
      • DOM element: có nhiệm vụ truy xuất tới thẻ HTML nào đó thông qua các thuộc tính như tên class, id, name của thẻ HTML
      • DOM HTML: có nhiệm vụ thay đổi giá trị nội dung và giá trị thuộc tính của các thẻ HTML
      • DOM CSS: có nhiệm vụ thay đổi các định dạng CSS của thẻ HTML
      • DOM Event: có nhiệm vụ gán các sự kiện như onclick(), onload() vào các thẻ HTML
      • DOM Listener: có nhiệm vụ lắng nghe các sự kiện tác động lên thẻ HTML đó
      • DOM Navigation dùng để quản lý, thao tác với các thẻ HTML, thể hiện mối quan hệ cha - con của các thẻ HTML
      • DOM Node, Nodelist: có nhiệm vụ thao tác với HTML thông qua đối tượng (Object)

      4. Đối tượng DOM document trong javascript

      document.getElementById
      Phương thức này giúp ta truy xuất đến thẻ HTML thông qua ID. Nếu trong tài liệu html của bạn bị trung ID thì nó sẽ lấy thẻ html có ID trùng khớp đầu tiên.

      Ví dụ dưới đây là mình lấy thẻ có id là test.

      document.getElementById("test");
      

      document.getElementsByTagName
      Phương thức này lấy tất cả các thẻ html có tên trùng với tham số truyền vào. Ví dụ dưới đây là mình lấy tất cả thẻ div.

      document.getElementsByTagName('div')
      

      document.getElementsByClassName
      Phương thức này lấy tất cả thẻ html có tên class trùng với tên của tham số truyền vào. Ví dụ dưới đây mình lấy các thẻ có class là wrapper.

      document.getElementsByClassName('wrapper');
      

      5. Câu hỏi thường gặp về DOM Javascript

      Sau đây mình xin tổng hợp một số câu hỏi thường gặp khi làm việc với DOM trong Javascript.

      DOM là viết tắt của từ gì?

      DOM là viết tắt của chữ Document Object Model.
      HTML DOM là gì?

      Đây là một cách gọi khác của DOM trong Javascript, tức là DOM dùng để truy xuất đến các thẻ HTML và thay đổi dữ liệu cho thẻ HTML đó.

      Dom element là gì?

      Là loại DOM dùng để truy xuất đến các thẻ HTML thông qua tên id, tên class, tên thẻ html ...

      Dom manipulation là gì?

      Đây là một thuật ngữ tiếng Anh, nó có nghĩa là các thao tác với DOM trong Javascript.

      Bài viết có tham khảo tại : Freetuts.net

      posted in Tutorials
      vananh.dao0809
      vananh.dao0809
    • Hiểu nhanh về Async / Await trong 5 phút .

      Trong bài viết ngày hôm nay mình xin giới thiệu đến các bạn về Async / Await cặp bài trùng giúp cho Promise hoàn hảo nhé .

      543c80e1-7104-41bb-b869-02bcd675b2d4-image.png

      I. Async / Await là gì?
      • Async / Await là một tính năng của JavaScript:
      +) Giúp chúng ta làm việc dễ dàng hơn với các hàm bất đồng bộ.
      +) Được xây dựng trên Promises và có thể sử dụng với tất cả các Promise .
      • Async - khai báo một hàm bất đồng bộ
      • Tự động biến đổi một hàm thông thường thành một Promise.

      • Khi gọi tới hàm async nó sẽ xử lý mọi thứ và được trả về kết quả trong hàm của nó.

      • Async cho phép sử dụng Await.
      • Await - tạm dừng việc thực hiện các hàm Async

      • Khi được đặt trước một Promise, nó sẽ đợi cho đến khi Promise kết thúc và trả về kết quả.

      • Await chỉ làm việc với Promises, nó không hoạt động với callbacks.

      • Await chỉ có thể được sử dụng bên trong các hàm async.

      Chúng ta cùng xem qua ví dụ sau:

      async function func1() {
          console.log(1);
          var a = await 2;
          console.log(a);
      }
      func1();
      console.log(3);
      

      Kết quả:

      1
      3
      2
      

      Giải thích :

      • Chúng ta có thể thấy hàm func1 được gọi và thực hiện trước câu lệnh console.log(3).

      • Vậy câu lệnh đầu tiên được thực hiện là console.log(1).
      • Chương trình chạy tiếp và gặp dòng lệnh await. Nó tạm dừng việc thực hiện hàm func1.

      • Vậy câu lệnh thứ 2 được thực hiện là console.log(3).
      • Sau khi các dòng lệnh đồng bộ đã được thực hiện hết (những câu lệnh thông thường như console.log(3)). Chương trình sẽ thực hiện đến những câu lệnh sau await (câu lệnh chờ).

      • Vậy câu lệnh thứ 3 được thực hiện là console.log(2).

      II. Xử lý lỗi trong Async / Await

      Ta cùng xem ví dụ sau:

      async function func1() {
          try {
              var ketqua = await logicFunction();
              console.log(ketqua);
          } catch (error) {
              // lỗi của hàm logicFunction(nếu có) sẽ được in ra ở đây
              console.log(error);
          }
      }
      func1();
      

      Nếu muốn bắt lỗi khi đang sử dụng async await, chỉ đơn giản , chúng ta sẽ cho chúng vào trong khối try/catch.

      Mệnh đề catch sẽ xử lý các lỗi gây ra bởi các hàm bất đồng bộ hoặc bất kỳ lỗi nào chúng ta có thể đã viết bên trong khối try.
      Lưu ý: Và vì các hàm async đều trả về Promises, nên chúng ta có thể bắt lỗi giống như một Promise bình thường. Như sau:

      async function func1() {
              var ketqua = await logicFunction();
              console.log(ketqua);
      }
      func1()
      .then(success)
      .catch(error);
      
      posted in Javacsript
      vananh.dao0809
      vananh.dao0809
    • Hiểu nhành về Promise Javascript trong 5 phút

      Trong bài viết ngày hôm nay chúng ta sẽ tìm hiểu về Khái niệm của Promise , Tác dụng của Promise , Sử dụng Promise trong lập trình bất đồng bộ ,… Chúng ta cùng khám phá bài viết thú vị này nhé .

      7e7d05ca-2189-434c-b091-7be0cc582e85-image.png
      Promise là gì?

      promise là một đối tượng sẽ trả về một giá trị trong tương lai.

      Để hiểu hơn chúng ta có ví dụ sau :

      Dù cho bạn đang FA thì cũng hãy tưởng tượng rằng tuần sau sẽ là sinh nhật bạn gái của bạn. Tất nhiên bạn sẽ dành cho cô ấy một món quà đặt biệt, và không gì thích hợp hơn là một chiếc bánh sinh nhật. Vâng, bạn đưa ra một lời hứa mua bánh sinh nhật.

      Trong JavaScript, một promise cũng tương tự vậy, nó được tạo ra như sau:

      // duthahoBuysCake là một lời hứa
      const promise = duthahoBuysCake('bánh sinh nhật')
      

      (Đừng lo lắng nếu bạn không biết tạo ra hàm duthahoBuysCake như thế nào, chúng ta sẽ tìm hiểu bên dưới).

      Lúc đưa ra lời hứa, chúng ta chưa thực hiện nó, lúc đó lời hứa đang ở trạng thái chờ, hay pending trong Javascript. Bạn có thể console.log một đối tượng Promise lúc tạo ra để kiểm chứng.

      498cee89-4033-457b-a6e2-51665db05771-image.png

      Bạn bắt đầu lên kế hoạch, đầu tiên là nhịn ăn sáng để dành tiền, tới ngày đó thì ra tiệm bánh để chọn màu, chọn kiểu...vân vân mây mây
      Nếu đến đúng ngày, bạn có đủ tiền, ra tiệm có đúng loại bánh bạn chọn, bạn quyết định mua nó, lúc này lời hứa ở trạng thái đã thực hiện, hay resolved trong Javascript. Khi promise ở trạng thái resolved, một hành động .then được gọi (quẩy thôi):

      duthahoBuysCake('bánh sinh nhật')
        .then(quẩy như dự định) // 123zooo!
      

      Nhưng cuộc sống không bao giờ cũng màu hồng như thế, bạn muốn chơi lớn cho sinh nhật người yêu và làm vài con lô, thế là bay sạch cmn tiền. Cuối cùng không mua được bánh. Lúc này bạn đã thất hứa, lời hứa không thực hiện được. Trong Javascript, chúng ta gọi Promise đang ở trạng thái rejected.
      Khi đó, bạn thực hiện một kế hoạch dự phòng, một hành động .catch được gọi.

      duthahoBuysCake('bánh sinh nhật')
        .then(quẩy như dự định)
        .catch(kế hoạch dự phòng)
      

      Trong Javascript thì chúng ta thường dùng Promise để get hoặc update dữ liệu. Khi promise ở trạng thái thành công resolved, chúng ta xử lý dự liệu với data trả về. Ngược lại khi promise thất bại rejected, chúng ta xử lý lỗi:

      getSomethingWithPromise()
        .then(data => {/* xử lý data */})
        .catch(err => {/* xử lý lỗi */})
      

      Đến đây thì bạn đã hiểu promise là gì, các trạng thái của nó và cách nó hoạt động. Hãy cùng tìm hiểu cách tạo ra nó nào.
      Tạo một promise như thế nào?
      Tạo một promise khá đơn giản, chỉ cần tạo mới đối tượng Promise new Promise. Và hàm constructor của Promise nhận 2 tham số là 2 hàm — resolve và reject.

      const promise = new Promise((resolve, reject) => {
        /* Do something here */
      })
      

      Nếu hàm resolve được gọi, trạng thái của promise sẽ là thành công và hành động .then được gọi. Tham số bạn truyền vào hàm resolve sẽ được chuyển đến then:

      const promise = new Promise((resolve, reject) => {
        // Note: resolve chỉ cho phép truyền đúng 1 param
        return resolve(27)
      })
      
      // Tham số  từ resolve sẽ được chuyển đến then.
      promise.then(number => console.log(number)) // 27
      

      Ngược lại nếu hàm reject được gọi, trạng thái của promise sẽ là thất bại và hành động catch được gọi. Tương tự như resolved tham số được truyền vào reject sẽ được chuyển đến catch.

      const promise = new Promise((resolve, reject) => {
        // Note: reject chỉ cho phép truyền đúng 1 param
        return reject('lỗi')
      })
      
      
      promise.catch(err => console.log(err)) // lỗi
      

      Bắt đầu code thôi nào, đầu tiên tạo một promise cho duthahoBuysCake ở trên:

      const duthahoBuysCake = cakeType => {
        return new Promise((resolve, reject) => {
          // Do something here
        })
      }
      

      Tiếp theo, lên kế hoạch cho 1 tuần để thực hiện lời hứa. Chúng ta sẽ dùng hàm setTimeout để giả sử cho việc chờ đợi và lên kế hoạch:

      const duthahoBuysCake = cakeType => {
        return new Promise((resolve, reject) => {
          setTimeout(()=> {
            // mua hay không mua nói 1 lời
          }, 1000)
        })
      }
      

      Note: ở đây setTimeout cho 1000ms (1 giây).
      Nếu sau 1 tuần bạn có đủ tiền để mua bánh, promise sẽ gọi resolved và trả dữ liệu bánh sinh nhật về cho then.
      Ngược lại, bạn không đủ tiền để mua bánh, promise sẽ gọi reject và trả dữ liệu không đủ tiền về cho catch.

      let money = 1000
      const duthahoBuysCake = cakeType => {
        return new Promise((resolve, reject) => {
          setTimeout(()=> {
            if (money > 1000) {
              resolve(cakeType)
            } else {
              reject('không đủ tiền')
            }
          }, 1000)
        })
      }
      

      Nếu bạn thử console.log với promise dưới đây, kết quả của nó là trạng thái pending.

      const promise = duthahoBuysCake('bánh sinh nhật')
      console.log(promise)
      

      Giờ bạn hãy thử sử dụng then và cactch vào promise trên, bạn sẽ thấy kết quả là bánh sinh nhật hoặc không đủ tiền phụ thuộc vào số tiền bạn có.
      Trường hợp then:

      money = 1001
      const promiseSuccess = duthahoBuysCake('bánh sinh nhật')
        .then(cake => console.log(cake))
        .catch(nocake => console.log(nocake))
      

      e21d29c8-3f30-4921-858d-35cd01b9c5eb-image.png

      Trường hợp catch:

      022835c3-0e0b-4691-bdbb-965ba1fd9b1b-image.png

      Bây giờ thì bạn có thấy không khó để tạo một promise phải không?
      Nhiệm vụ tiếp theo của chúng ta là trả lời câu hỏi — Tại sao promise được dùng để thay thế callback trong lập trình bất đồng bộ (asynchronous JavaScript)?

      Promises vs. Callbacks

      Coder đa số là những thèn làm biếng, tôi cũng thế và chắc bạn cũng vậy. Cái gì nhanh, gọn, nhẹ thì chọn vậy thôi :). Sau đây là 3 lý do mà promise được dùng nhiều hơn là callback:

      1. Ít code lồng (nested) hơn
      2. Đọc code dễ hiểu hơn
      3. Xử lý lỗi dễ dàng hơn với catch

      Nói nhiều làm gì, hãy đi vào ví dụ để so sánh.
      Bài toán ở đây là bạn đang là chủ 1 cửa hàng bán đồ online, nghề đang hot. Khi ai đó đặt mua hàng, bạn sẽ lưu lại thông tin của họ vào database. Cuối cùng gửi email cho họ về đơn hàng thanh toán:
      1. Khách hàng đặt mua hàng
      2. Lưu lại thông tin khách hàng
      3. Gửi mail
      Chúng ta lần lượt đi qua từng bước. Đầu tiên, khi khách đặt mua hàng, frontend sẽ gửi 1 request mua hàng đến backend kèm theo thông tin của khách hàng, thông thường ở đây là post request.
      Ví dụ dưới đây được viết bằng Express - NodeJS framework. Nếu bạn chưa biết cũng không sao, chỉ cần quan tâm nó được viết bằng Javascript:

      // API dùng để frontend gửi request mua hàng đến backend.
      app.post('/buy-thing', (req, res) => {
        const customer = req.body // lấy thông tin khách hàng
      })
      

      Ở đây bạn muốn lấy dữ liệu khách hàng, nếu thành công, bạn lưu lại thông tin vào database, và sẽ văng ra exception nếu có lỗi.
      Ví dụ về sử dụng callback:

      // Callback based code
      app.post('/buy-thing', (req, res) => {
        const customer = req.body
      
        // lấy dữ liệu khách hàng
        getCustumerInfo(customer, (err, info) => {
          if (err) throw err
      
          // lưu thông tin xuống database
        })
      })
      

      Ví dụ về sử dụng promise:

      // Promised based code
      app.post('/buy-thing', (req, res) => {
        const customer = req.body
      
        getCustomerInfo(customer)
          .then(info)
          .catch(err => throw err)
      })
      

      Bước thứ 2 là lưu dữ liệu khách hàng xuống database, sau khi lưu thành công, bạn sẽ gửi email cho khách hàng, ngược lại, văng ra exception nếu có lỗi.
      Ví dụ về sử dụng callback:

      // Callback based code
      app.post('/buy-thing', (req, res) => {
        const customer = req.body
      
        getCustomerInfo(customer, (err, info) => {
          if (err) throw err
      
          // lưu thông tin xuống database
          addToDatabase(info, (err, document) => {
            if (err) throw err
      
            // gửi email
          })
        })
      })
      

      Ví dụ về sử dụng promise:

      // Promised based code
      app.post('/buy-thing', (req, res) => {
        const customer = req.body
      
        getCustomerInfo(customer)
          .then(info => addToDatabase(info))
          .then(/* gửi email */)
          .catch(err => throw err)
      })
      

      Bước cuối cùng, khi bạn gửi email cho khách hàng thành công, bạn sẽ hiển thị thông báo cho người dùng, ngược lại, văng ra exception nếu gửi email thất bại:

      Ví dụ về sử dụng callback:

      // Callback based code
      app.post('/buy-thing', (req, res) => {
        const customer = req.body
      
        getCustomerInfo(customer, (err, info) => {
          if (err) throw err
      
          // lưu thông tin xuống database
          addToDatabase(info, (err, document) => {
            if (err) throw err
      
            // gửi email
            sendEmail(customer, (err, result) => {
              if (err) throw err
      
              // thông báo thành công.
              res.send('success!')
            })
          })
        })
      })
      

      Ví dụ về sử dụng promise:

      app.post('/buy-thing', (req, res) => {
        const customer = req.body
      
        getCustomerInfo(customer)
          .then(info => addToDatabase(info))
          .then(_ => sendEmail(customer) )
          .then(result => res.send('success!')))
          .catch(err => throw err)
      })
      

      Chắc hẳn qua ví dụ trên thì chúng ta đã hình dung được những ưu điểm của việc dùng promise so với callback? Code ngắn gọn, flow dễ hiểu, xử lý lỗi dễ dàng hơn, và quan trọng là tránh phải callback hell khi dùng callback.

      Xử lý nhiều lời hứa cùng lúc?

      Một điểm cộng nữa của promise là chúng ta có thể thực hiện nhiều promise cùng 1 lúc mà các hoạt động của chúng ko liên quan gì với nhau, nhưng kết quả của những lời hứa đó cần thiết cho 1 hoạt động sau cùng.
      Để làm được điều đó, chúng ta sử dụng hàm Promise.all, tham số truyền vào là 1 mảng các lời hứa (promise) cần thực hiện. Khi đó, tham số của then chính là 1 mảng chứa các kết quả từ các promise.
      Hãy tưởng tượng bạn muốn ăn bữa tối sau khi nấu đủ 3 món: cơm, canh cá. Các hoạt động này thực hiện cùng lúc và không phụ thuộc lẫn nhau, thế nhưng bạn phải chờ cho tất cả nấu xong thì bạn mới ăn tối được:

      const nauComPromise = nauCom()
      const nauCanhPromise = nauCanh()
      const khoCaPromise = khoCa()
      
      const anToi = Promise.all([
        nauComPromise,
        nauCanhPromise,
        khoCaPromise
      ])
        .then([com, canh, ca] => {
          console.log(`${com} tuyệt vời!`)
          console.log(`${canh} ngon quá!`)
          console.log(`${ca} bị cháy`)
        })
      

      (Note: ở đây còn 1 hàm Promise.race, nhưng hiếm khi được sử dụng, bạn có thể đọc thêm tại đây.

      Cuối cùng, vì promise là tính năng mới của ES6, nên không phải tất cả browser đều hỗ trợ?

      Tài liệu tham khảo : https://kipalog.com/

      posted in Javacsript
      vananh.dao0809
      vananh.dao0809