JavaScript có tệ không

chúng tôi hy vọng rằng bạn thích các sản phẩm được đề xuất của chúng tôi, chúng tôi có thể kiếm được một khoản hoa hồng nhỏ từ việc mua hàng bằng các liên kết liên kết của bạn và điều đó thực sự giúp chúng tôi tiếp tục làm tốt công việc

Mục lục

JavaScript có phải là ngôn ngữ xấu không?

Không có gì xấu về JavaScript với tư cách là một ngôn ngữ lập trình. Phần lớn nhận thức tiêu cực về JavaScript bắt nguồn từ thực tế rằng nó là ngôn ngữ dành cho người mới bắt đầu và những người mới bắt đầu thường sẽ viết rất nhiều mã xấu khi họ học hỏi và cải thiện

Cuối cùng, JavaScript là một ngôn ngữ quan trọng vì nó là ngôn ngữ của trình duyệt web. HTML và CSS là tất cả những thứ cần thiết để tạo nội dung web và định kiểu cho nó, nhưng nếu bạn muốn các yếu tố động, bạn cần biết JavaScript. Tất nhiên, điều này làm cho các ví dụ xấu về mã JavaScript trở nên rõ ràng hơn và càng gây phẫn nộ hơn, bởi vì người dùng cuối dễ dàng gặp phải hậu quả của mã xấu đó hơn rất nhiều.

bạn có thể đọc một số nhận xét thực sự ác ý về ngôn ngữ này chẳng hạn như ngôn ngữ khó chịu hoặc khủng khiếp

nhưng hai điều chính khiến ngôn ngữ này bị coi là ngôn ngữ tồi và có thể là ngôn ngữ tồi nhất cho một số tác vụ là hai điều này

  • Triển khai trình duyệt. đây là lý do khiến JavaScript thực sự không thể chạy dễ dàng và được hỗ trợ đầy đủ bởi hầu hết các trình duyệt hoặc ít nhất là một phiên bản khác của cùng một trình duyệt. các trình duyệt phải liên tục cập nhật để tiếp tục hỗ trợ tất cả các tính năng mới của JavaScript
  • Khung JavaScript. Ngoài ra, các khung có vai trò rất lớn trong việc làm cho ngôn ngữ này trở nên rất kém, ngay cả khung hợp lý nhất để học ngày nay cũng có rất nhiều mã soạn sẵn, tất cả mã bạn sẽ viết bằng khung này đều rất lặp đi lặp lại. Tôi có xu hướng đặt nhiều dấu ngoặc vuông, dấu ngoặc vuông chỉ để tránh lỗi cú pháp ngu ngốc

Vấn đề bối cảnh

JavaScript có thể không phải là một ngôn ngữ xấu vốn có, nhưng điều đó không có nghĩa nó là một ngôn ngữ tốt trong mọi tình huống. Như với hầu hết các nhiệm vụ trong cuộc sống, công cụ tốt nhất cho công việc là công cụ phù hợp. Ví dụ, búa là một công cụ hoàn toàn tốt, nhưng bạn không nên sử dụng nó để siết vít

JavaScript là một ngôn ngữ cấp cao. “Cấp độ” của một ngôn ngữ đề cập đến mức độ gần gũi của ngôn ngữ đó với phần cứng mà ngôn ngữ đó chạy trên đó, thấp hơn là gần với phần cứng hơn và cao hơn là gần với con người hơn. Theo nguyên tắc chung, ngôn ngữ càng thấp thì con người càng khó hiểu, nhưng bạn càng có thể làm được nhiều điều với nó. Các ngôn ngữ cấp cao hơn—như JavaScript—dễ hiểu hơn nhiều đối với bộ não con người điển hình, nhưng chúng bị hạn chế hơn nhiều về những gì bạn có thể đạt được với chúng

Ví dụ: nếu bạn muốn viết một công cụ kết xuất đồ họa được tối ưu hóa cao, bạn có thể chọn viết nó bằng C hoặc C++. Nếu bạn thích mạo hiểm, bạn có thể chọn viết nó trong Assembly. JavaScript sẽ là một lựa chọn hoàn toàn không thực tế vì bạn không thể đến gần phần cứng và do đó không thể tối ưu hóa cách mã của bạn giao tiếp với nó. Tuy nhiên, nếu bạn chỉ muốn tạo một công cụ dựa trên trang web gốc đơn giản, thì JavaScript là lựa chọn duy nhất của bạn, điều này khiến nó trở thành lựa chọn tốt nhất trên thực tế

Thực hành JavaScript không tốt – Từ đâu có tiếng xấu

Chúng tôi đã đề cập đến nó ở trên, nhưng hầu hết tiếng xấu về JavaScript bắt nguồn từ chất lượng của mã được viết trong đó, chứ không phải chính ngôn ngữ đó. Viết mã xấu trong khi bạn đang học không phải là vấn đề, nhưng bản chất thân thiện, dễ tiếp cận của JavaScript, kết hợp với thực tế là JavaScript được diễn giải—không được biên dịch—và có thể dễ dàng xem, có nghĩa là có nhiều mã xấu hơn được viết bằng JavaScript

Đừng nhầm lẫn, có rất nhiều mã đáng ngờ được viết bằng C#, nó ít được nhìn thấy hơn vì ngôn ngữ này được biên dịch thành mã máy trước khi phân phối

Vì vậy, một số ví dụ khủng khiếp hơn về JavaScript được thiết kế tồi là gì?

bảng điều khiển mọi thứ

Một trong những điều đầu tiên mà các lập trình viên JavaScript học là cosole.log(). Khi bạn mới bắt đầu, hàm này đại diện cho cách nhanh nhất và dễ dàng nhất để xuất kết quả mã của bạn. Thật không may, giống như một chú gà con in dấu mẹ của nó, những người mới bắt đầu sử dụng JavaScript dường như phát triển một mối quan hệ đặc biệt với cosole.log() và sử dụng nó một cách tự do hơn mức họ nên làm

Không có gì lạ khi thấy JavaScript ghi lại mọi chi tiết nhỏ, từ thông tin gỡ lỗi không cần thiết còn sót lại từ quá trình phát triển, cho biết rằng một vòng lặp cụ thể đã… được… lặp lại

 for (let i = 0; i < 1024; i++) {
   console.log("Don't do this!");
 }  

Ngoài việc không cần thiết—và, do hầu như bất kỳ ai cũng có thể xem bảng điều khiển JavaScript, nên có khả năng là một mối lo ngại về bảo mật—việc ghi mọi thứ vào bảng điều khiển sẽ ảnh hưởng đến hiệu suất một chút. Đó là một thành công nhỏ, được chấp nhận, nhưng việc sử dụng quá nhiều cosole.log() vẫn sẽ tạo ra tác động đáng chú ý đến hiệu suất của tập lệnh của bạn

Một bổ sung nhỏ về chủ đề này, có các chức năng bảng điều khiển phù hợp với ngữ cảnh, chẳng hạn như cảnh báo bảng điều khiển và lỗi bảng điều khiển. cosole.log() được sử dụng quá thường xuyên trong các tình huống mà cảnh báo hoặc lỗi sẽ phù hợp hơn

 console.log("User has entered name.");
 console.warn("User has entered first name only, full name is preferable.");
 console.error("Name field cannot be left blank. Please enter name to continue"); 

Không sử dụng Var

Khai báo các biến mới với var cung cấp cho chúng phạm vi. Nếu bạn khai báo một biến trong một hàm cụ thể bằng cách sử dụng var, nó sẽ giới hạn phạm vi của biến đó đối với hàm. Khi bạn khai báo một biến không có var, nó sẽ trở thành biến toàn cục

Đây là một hệ thống được thiết kế thực sự tồi khi một biến không cần phải là toàn cầu vì nó không phải là lỗi về mặt kỹ thuật, vì vậy bạn sẽ không gặp bất kỳ lỗi nào, nhưng bạn sẽ gặp những điều kỳ lạ xảy ra nếu bạn sử dụng cùng một tên biến ở nơi khác trong hệ thống của mình. . Ngoài ra, các biến toàn cục có tác động nhỏ đến hiệu suất, vì một đoạn mã càng phải đi xa để tìm biến mà nó cần thì càng mất nhiều thời gian.

function foo() {  
  var i = 1;
  p = 1;
 }

 function foo() {
  var i = 10;
  p = 10;
 } 

Trong ví dụ trên, i được giữ trong phạm vi cục bộ cho cả hai hàm, nhưng p là toàn cục, nghĩa là bất kỳ thay đổi nào đối với biến đó trong một hàm sẽ áp dụng cho tất cả các hàm khác truy cập vào biến đó

Thiếu tuân thủ các quy ước

Mặc dù một số ngôn ngữ cực kỳ nghiêm ngặt về những thứ như bạn đặt tên cho biến của mình—và thậm chí mã của bạn có được thụt lề hay không—JavaScript là một ngôn ngữ rất hào phóng. Bạn có thể định dạng mã của mình và đặt tên cho các biến của mình gần như theo bất kỳ cách nào bạn muốn… nhưng điều đó không có nghĩa là bạn nên

Mục đích của các quy ước liên quan đến định dạng và đặt tên gần như hoàn toàn vì lợi ích của mắt người. Rốt cuộc, máy tính không quan tâm biến được gọi là gì. Nhưng chính đôi mắt của con người nhìn vào đoạn mã khó đọc và quyết định rằng JavaScript là một mớ hỗn độn nóng bỏng. Những thứ như đặt tên không nhất quán và thiếu thụt đầu dòng thích hợp nói chung là những mục thực hành tốt mà bất kỳ lập trình viên nào cũng nên phát triển và JavaScript cũng không khác. Đây là một số mã mẫu, lần đầu tiên được thực hiện theo cách rất tệ và sau đó được thực hiện chính xác

 function foo() {
   FIRST_NAME = "John";
   lastName = "Doe";
   console.log(FIRST_NAME + lastName);
 }

 function foo() {
    var firstName = "John";
   var lastName = "Doe";
   console.log(firstName + lastName);
 } 

Lý do tại sao JavaScript là một ngôn ngữ xấu

Được rồi, tôi đã bảo vệ JavaScript đủ rồi. Sự thật là ngôn ngữ này không hoàn hảo. Nó có xứng đáng với danh tiếng xấu mà nó nhận được không? . Nhưng điều đó không có nghĩa là không có thứ để chọn. Dưới đây là một số lý do JavaScript có thể được gọi là ngôn ngữ tồi theo đúng nghĩa của nó

Không có kiểu số nguyên

Nhờ quyết định của các nhà thiết kế JavaScript sử dụng IEEE 754 Double Precision, không có loại số nguyên nào trong ngôn ngữ, chỉ có loại "số" hấp dẫn. Đối với các nhà phát triển JavaScript có kinh nghiệm, đây hầu như không phải là vấn đề, nhưng đối với người mới bắt đầu và những người không quen với sự phức tạp kỳ quặc của hệ thống này, nó có thể dẫn đến các vấn đề không thể đoán trước và gần như không thể gỡ lỗi

Hệ thống đánh máy lỏng lẻo

Mặc dù hệ thống gõ của JavaScript thoạt đầu có vẻ ấm áp và thân thiện với người mới bắt đầu, nhưng những người có nhiều kinh nghiệm hơn sẽ coi đó là sự tước đoạt một công cụ quan trọng trong kho vũ khí sửa lỗi của họ;

JavaScript sẽ luôn nỗ lực để làm cho xung đột đánh máy rõ ràng hoạt động, nhưng sẽ rất tệ nếu bạn viết mã cẩu thả và hy vọng rằng trình thông dịch sẽ chạy nó theo cách bạn dự định. Một ví dụ về những điều không ổn là vô tình gõ nhầm một số thành một chuỗi

 var firstNumber = "1";
 var secondNumber = 2;
 var result = firstNumber + secondNumber; 

Trong trường hợp này, nội dung của kết quả sẽ được đọc dưới dạng một chuỗi ghi “12”, thay vì số 12. Một ngôn ngữ chặt chẽ hơn sẽ yêu cầu bạn làm rõ những gì bạn đang cố gắng thực hiện, bằng cách chuyển đổi chuỗi thành số hoặc số thành chuỗi trước khi cộng chúng lại với nhau và điều này giúp ngăn ngừa các lỗi lạ và không mong muốn ở xa hơn.

Tự động chèn dấu chấm phẩy

Bản thân sự tồn tại của tính năng chèn dấu chấm phẩy tự động không nhất thiết là một vấn đề—xét cho cùng, bạn có thể chọn sử dụng dấu chấm phẩy trong mã của mình nếu bạn không thích nó. Vấn đề phát sinh từ thực tế là nó khuyến khích các nhà phát triển thử bỏ dấu chấm phẩy khỏi mã của họ, điều này có thể dẫn đến lỗi nếu các quy tắc của ASI không được hiểu đúng, đây là trường hợp quá thường xuyên.

Sự phụ thuộc quá mức vào các biến toàn cục

Cách tiếp cận thông thường mà JavaScript có đối với các biến toàn cục khiến nó rất dễ mắc lỗi và rất khó gỡ lỗi chúng. Ví dụ: nếu một tham chiếu đến một biến toàn cục có lỗi đánh máy, JavaScript sẽ không báo lỗi cho bạn, nó sẽ chỉ khai báo lỗi đánh máy đó là một biến mới

Và, vì phạm vi của biến là toàn cầu, nên nếu bạn sử dụng bất kỳ thư viện bên thứ ba nào sử dụng cùng tên biến với một trong các biến toàn cầu của mình, thì bạn sẽ gặp phải một số điều kỳ lạ xảy ra với mã của mình

Mang đi

JavaScript có tệ không? . Tuy nhiên, giống như tất cả các ngôn ngữ, nó có thể được sử dụng một cách hiệu quả với kiến ​​thức phù hợp. Và, vì nó là ngôn ngữ thực tế của các trình duyệt web trên toàn thế giới, nên có lẽ nó sẽ không sớm xuất hiện ở bất cứ đâu