Mọi lập trình viên JavaScript nên biết gì? [đóng cửa]


368

Có một tập hợp những điều mà mọi lập trình viên JavaScript nên biết để có thể nói "Tôi biết JavaScript" không?

Câu trả lời:


590

Không phải jQuery. Không phải YUI. Không phải (v.v.)

Các khung có thể hữu ích, nhưng chúng thường ẩn các chi tiết đôi khi xấu về cách JavaScript và DOM thực sự hoạt động với bạn. Nếu mục đích của bạn là có thể nói là Tôi biết JavaScript, thì việc đầu tư nhiều thời gian vào một khung là trái ngược với điều đó.

Dưới đây là một số tính năng ngôn ngữ JavaScript mà bạn nên biết để tìm hiểu những gì nó đang làm và không bị phát hiện, nhưng điều này không rõ ràng ngay lập tức đối với nhiều người:

  • Đó object.propobject['prop']là những điều tương tự (để bạn có thể xin vui lòng ngừng sử dụng eval, nhờ); các thuộc tính đối tượng đó luôn là các chuỗi (ngay cả đối với các mảng); những gì for... inlà cho (và những gì nó không ).

  • Đánh hơi tài sản; undefinedlà gì (và tại sao nó có mùi ); tại sao toán tử dường như ít được biết đến inlại có lợi và khác với typeof/ undefinedkiểm tra; hasOwnProperty; mục đích của delete.

  • Rằng Numberdatatype thực sự là một float; những khó khăn độc lập với ngôn ngữ của việc sử dụng phao; tránh parseIntbẫy bát phân.

  • Chức năng lồng nhau phạm vi; sự cần thiết của việc sử dụng vartrong phạm vi bạn muốn tránh tình trạng toàn cầu; làm thế nào phạm vi có thể được sử dụng để đóng cửa; các vấn đề vòng lặp đóng cửa .

  • Làm thế nào các biến và windowtính chất toàn cầu va chạm; làm thế nào các biến toàn cầu và các yếu tố tài liệu không nên va chạm nhưng làm trong IE; sự cần thiết của việc sử dụng vartrong phạm vi toàn cầu để tránh điều này.

  • Cách functioncâu lệnh hành động để ' nâng ' một định nghĩa trước khi mã trước nó; sự khác biệt giữa các câu lệnh hàm và biểu thức hàm; tại sao tên biểu thức hàm không nên được sử dụng .

  • Làm thế nào các hàm xây dựng, prototypetài sản và newtoán tử thực sự làm việc; các phương thức khai thác điều này để tạo ra hệ thống lớp / lớp con / thể hiện bình thường mà bạn thực sự muốn; khi bạn có thể muốn sử dụng các đối tượng dựa trên đóng cửa thay vì tạo mẫu. (Hầu hết các tài liệu hướng dẫn về JS hoàn toàn khủng khiếp về điều này; tôi đã mất nhiều năm để đưa nó thẳng vào đầu mình.)

  • Làm thế nào thisđược xác định tại thời điểm cuộc gọi, không bị ràng buộc; làm thế nào để truyền phương thức không hoạt động như bạn mong đợi từ các ngôn ngữ khác; làm thế nào đóng cửa hoặc Function#bindcó thể được sử dụng để có được xung quanh đó.

  • Các tính năng khác của ECMAScript Fifth Edition như indexOf, forEachvà các phương phápArray lập trình chức năng trên ; cách khắc phục các trình duyệt cũ hơn để đảm bảo bạn có thể sử dụng chúng; sử dụng chúng với các biểu thức hàm ẩn danh nội tuyến để có được mã nhỏ gọn, dễ đọc.

  • Luồng kiểm soát giữa trình duyệt và mã người dùng; thực hiện đồng bộ và không đồng bộ; các sự kiện kích hoạt bên trong luồng điều khiển (ví dụ: tiêu điểm) so với các sự kiện và thời gian chờ xảy ra khi điều khiển quay trở lại; làm thế nào để gọi một nội dung được cho là đồng bộ như thế alertcó thể gây ra sự tái nhập có khả năng gây thảm họa.

  • Làm thế nào kịch bản chéo cửa sổ ảnh hưởng instanceof; kịch bản chéo cửa sổ ảnh hưởng đến luồng điều khiển trên các tài liệu khác nhau như thế nào; postMessageHy vọng sẽ khắc phục điều này như thế nào .

Xem câu trả lời này liên quan đến hai mục cuối cùng.

Trên hết, bạn nên xem JavaScript một cách nghiêm túc, thừa nhận rằng đó là vì lý do lịch sử là một ngôn ngữ không hoàn hảo (thậm chí nhiều hơn hầu hết các ngôn ngữ) và tránh những rắc rối tồi tệ nhất của nó. Tác phẩm của Crockford trên mặt trận này chắc chắn đáng để đọc (mặc dù tôi không đồng ý 100% với anh ấy về những phần của Good Good.


80
Ahhhh, cuối cùng là một câu trả lời chu đáo, kỹ lưỡng. Nếu tôi có thể +10, tôi sẽ. Biết một khung không có nghĩa là bạn có thể lập trình JavaScript hiệu quả.
Tim Down

6
Cảm ơn rất nhiều cho câu trả lời cũng suy nghĩ. Tôi muốn thêm rằng việc sử dụng một khung công tác có thể thực sự có ích nếu bạn biết nó được thực hiện như thế nào. Bạn nên học cách tự mình làm những việc đó trước khi dùng đến một khuôn khổ.
Javier Parra

4
@Daniel: thực sự không phải vậy, thisbị ràng buộc theo bất cứ cách nào bạn truy cập nó. Hãy thử : var o= {b: function(){alert(this===o);}};, sau đó o['b']();-> true. Và nếu bạn muốn thực sự quái đản, (o['b'])()-> true, nhưng (c= o['b'])()-> false, và chỉ trong Mozilla, (true? o['b'] : null)()-> true. W, T, và thực sự, F.
bobince

7
Thật là một crock! Không phải là nếu biết tất cả các yêu cầu trình duyệt khác nhau làm cho bạn trở thành một lập trình viên JS tốt hơn. Có thể nhiều tín dụng đường phố hơn giữa các đồng nghiệp của bạn ... Trừu tượng làm cho cuộc sống dễ dàng hơn và là một phần thiết yếu của JS, vì vậy tôi sẽ nói rằng việc biết một khung công tác giúp bạn trở thành một lập trình viên JS tốt hơn so với người không và muốn làm mọi thứ theo cách lâu dài.
Vince Panuccio

19
Sir Psycho: lưu ý rằng không có câu trả lời nào trong số này có đề cập đến DOM, đó là những gì các thư viện lớn đang có để giúp bạn. Một khung không thể bảo vệ bạn khỏi bất kỳ điều gì được đề cập ở đây . Công cụ này rất quan trọng đối với bất kỳ ai thực hiện kịch bản trình duyệt, sử dụng khung hay không.
Tim Down

248

Rằng nó có thể bị vô hiệu hóa.


12
+1, tôi đã quá mệt mỏi với những trang thậm chí không bận tâm đến những điều cơ bản về sự xuống cấp duyên dáng bởi vì "nó quá khó và mọi người đều bật javascript".
wasatz

27
+1. Một trang không hoạt động mà không có JavaScript là một trang sẽ dễ vỡ ngay cả khi đã bật JS.
bobince

9
@iconiK Tôi sẽ đi và nói với tất cả khách hàng Chính phủ của mình, những người đã bị vô hiệu hóa toàn cầu JavaScript vì lý do bảo mật rằng tất cả họ đều là kẻ ngốc, phải không?
graphicdivine

16
-1 đây không phải chủ đề và thực sự không có liên quan gì đến việc biết về javascript như một ngôn ngữ. Đó là điều tốt để xem xét khi thiết kế một ứng dụng web, nhưng nó vẫn không phải là một câu trả lời thuộc về chủ đề này.
TM.

24
@TM, không, nó thực sự là một cân nhắc quan trọng. Điều này nên được đặt lên hàng đầu trong tâm trí của bạn khi bạn kiểm tra các giá trị trước khi chèn chúng vào cơ sở dữ liệu hoặc có cách duy nhất để đăng nhập vào trang web của bạn thông qua một hộp bật lên javascript ưa thích. Nói về điều đó .... tôi nghĩ rằng tôi cần phải đi kiểm tra một cái gì đó.
Elizabeth Buckwalter

75

Hiểu những thứ được viết trong Javascript của Crockford : Các bộ phận tốt là một giả định khá hay rằng một người là một lập trình viên đàng hoàng.

Bạn có thể biết khá nhiều về cách sử dụng một thư viện tốt như JQuery mà vẫn không biết các phần ẩn của Javascript.

Một lưu ý khác là công cụ gỡ lỗi trên các trình duyệt khác nhau. Một lập trình viên JS nên biết cách gỡ lỗi mã của mình trong các trình duyệt khác nhau.

Oh! Và biết rằng JSLint sẽ hoàn toàn làm tổn thương cảm xúc của bạn !!


+1 Hãy quên đi cuốn sách đó, khuyến nghị tuyệt vời.
David

8
Ngoài ra còn có rất nhiều video Crockford hướng dẫn và sâu sắc tại developer.yahoo.com/yui/theater - và tôi nghĩ rằng tôi không cần đề cập đến crockfordfacts.com :-)
ndim

+1 - JSLint là một điều tuyệt vời khi bạn thử phát triển JS cho một khung công tác không hỗ trợ gỡ lỗi nhúng ( ho Siebel, ho PDF).
J. Polfer

49

Nếu bạn muốn trở thành một ninja JavaScript thực thụ, bạn nên biết câu trả lời cho mọi câu hỏi trong Perfection giết chết JavaScript Quiz .

Một ví dụ để kích thích sự thèm ăn của bạn:

(function f(f){ 
  return typeof f(); 
})(function(){ return 1; });

Biểu hiện này trở lại là gì?

  • "con số"
  • "chưa xác định"
  • "chức năng"
  • lỗi

10
Hãy xem câu trả lời của tôi: codingspot.com/2010/02/ Mạnh
CMS

@CMS Rất tốt! Bạn đã thực sự có được tất cả ngay lần đầu tiên, hoặc điều này bao gồm một số nghiên cứu?
Skilldrick

7
Skilldrick: Tôi nghĩ rằng tôi đã nhận được tất cả chúng lần đầu tiên, tôi là người thường xuyên đọc Tiêu chuẩn ECMA-262 (Tôi biết, tôi là một kẻ lập dị :-)
CMS

46

Bạn không biết JavaScript nếu bạn không biết:

  1. Đóng cửa
  2. Kế thừa dựa trên nguyên mẫu
  3. Mẫu mô-đun
  4. W3C-DOM
  5. Sự kiện diễn ra như thế nào

Tôi thực sự thích câu trả lời này. Nó giúp bạn phát hiện ra những vùng tối trong kiến ​​thức của bạn. Các sự kiện là điều duy nhất vẫn còn hơi khó hiểu đối với tôi trong danh sách kiểm tra này (nếu mẫu mô-đun có nghĩa là "không ghi đè không gian tên toàn cầu" và do đó bao gồm phạm vi và toán tử var).
silviot

11
Tôi sẽ tranh luận rằng You don't know JavaScript if you don't know The W3C-DOM. Hai điều khác nhau.
gblazex

37

.. đó là javascript không phải là java :)

Nhiều, nhiều người bắt đầu với việc phát triển trang web đã nói với tôi rằng javascript chỉ là java đơn giản!


+1 Điểm này là khá cơ bản!
amelvin

71
JavaScript JavaScript là Java với thảm là xe hơi.
Josh Lee

1
Javascript gần giống với Java vì C # tương tự như C. Chắc chắn có cú pháp trông khá giống nhau, nhưng cách khác nhau.
Earlz

4
trừ khi họ sử dụng Bộ công cụ web của Google
Afriza N. Arief

Thật thú vị, Microsoft đã dựa trên các hàm ngày tuân thủ Y2k trong JScript cho IE3 trên java.util.Date.
Bayard Randel

27
  1. Làm quen với ít nhất một thư viện Javascript (Jquery, Prototype, v.v.).

  2. Tìm hiểu cách sử dụng các công cụ gỡ lỗi của các trình duyệt chính (MSIE 7-8, Firefox, Chrome, Safari)

  3. Đọc về ngành công nghiệp: Trang web của Douglas Crockford là một kho báu trong khi Ajaxian.com là một blog tốt để cập nhật những ý tưởng mới, thú vị và kỳ lạ cho Javascript. Có một số tài nguyên khác nhưng đó là những tài nguyên giúp tôi nhiều nhất.


Nghiêm túc, tại sao bỏ phiếu xuống?
David

+1 Quá nhiều bầu chọn chiến thuật, mọi người nghiêm túc chỉ nên nêu lên những câu trả lời hay chứ không chỉ cố gắng đưa câu trả lời của họ lên đầu.
amelvin

1
@Murali VP Tôi đã đưa ra giả định cho Javascript "biết" trong ngữ cảnh của các trình duyệt. Ngay sau một số tương đương với thế giới xin chào, bạn sẽ cần phải tìm ra lỗi logic và thời gian chạy của mình, có thể khác nhau trên mỗi trình thông dịch. Tôi sẽ không yêu cầu biết bất kỳ ngôn ngữ nào nếu tôi không biết cách gỡ lỗi nó. Đối với yêu cầu khung, Javascript giống như đầu C, trong đó các khác biệt triển khai tinh vi sẽ phá hoại sự không mong muốn; jQuery & nguyên mẫu đã vượt qua những khác biệt này và biến Javascript thành một công cụ đáng tin cậy trong khi thêm các lệnh gọi API bổ sung để tăng năng suất. (tiếp)
David

@Murali VP Công bằng mà nói, Javascript đã đi một chặng đường dài kể từ khi tôi bắt đầu sử dụng nó vào những năm 90 và ngoại trừ Microsoft, các phiên dịch viên Javascript khác đã thực hiện công việc ấn tượng để tuân thủ các thông số kỹ thuật và chơi công bằng.
David

@David cảm ơn vì lời giải thích tốt đẹp. Có xu hướng đồng ý với bạn.
Murali VP

24

Các đối tượng và chức năng Javascript là công dân hạng nhất , gọi lại , không quên các sự kiện và sau đó là JQuery .


20
Ah jQuery, khung công tác JS quá mức!
Murali VP


23

Các biến là toàn cầu trừ khi được tuyên bố là cục bộ !!

Xấu (DoS Something () chỉ được gọi 10 lần):

function CountToTen()
{
  for(i=0; i< 10; i++)
  {
    DoSomething(i);
  }
}

function countToFive()
{
  for(i=0; i<5; i++)
  {
    CountToTen();
  }
}

CountToFive();

Tốt (DoS Something () được gọi 50 lần như dự định):

function CountToTen()
{
  var i;
  for(i=0; i< 10; i++)
  {
    DoSomething(i);
  }
}

function countToFive()
{
  var i;
  for(i=0; i<5; i++)
  {
    CountToTen();
  }
}

CountToFive();

2
Tôi thậm chí không bao giờ xem xét điều này. Điểm rất tốt.
ô liu

6
Tôi cố gắng và tập thói quen for (var i=0;trong tất cả các vòng lặp của mình
ghoppe

2
Crockford thích đặt vị vartrí hàng đầu của hàm, vì nó không đánh lừa bạn về kích thước của phạm vi của biến. js2-modesẽ phàn nàn nếu bạn var iở hai forvòng riêng biệt trong cùng một hàm, vì nó gợi ý bạn nghĩ rằng bạn có hai biến riêng biệt và bạn thì không. Tuy nhiên, tôi cố gắng không bao giờ vartách rời khỏi nơi tôi khởi tạo chúng.
Kragen Javier Sitaker

Tôi không quan tâm nếu nó không có phạm vi. Tôi không thể chịu được một biến được khai báo 20 dòng trước khi nó được sử dụng
Juan Mendes


8

Để biết rằng Javascript ban đầu được gọi là LiveScript và tiền tố 'Java' được đính kèm cho mục đích tiếp thị không phải vì Java và Javascript có liên quan với nhau (mà chúng không liên quan).

Ồ và vì đã sở hữu bất kỳ phiên bản 'Javascript: Hướng dẫn dứt khoát' nào của David Flanagan (thông tin này nằm ở trang 2).

... và để đánh giá cao những người đã đi trước khi cố gắng làm xáo trộn tài liệu của Internet Explorer 4.all [] và tài liệu của Netscape Navigator 4.layers [] trước khi Jquery xóa tan nỗi đau.

BIÊN TẬP:

Như @Kinopiko chỉ ra JavaScript ban đầu được gọi là dự án Mocha ( một số nguồn cũng cho rằng nó được gọi là dự án LiveWire) nhưng người ta thường chấp nhận rằng ngôn ngữ (được viết bởi Brendan Eich) được dự kiến ​​sẽ được phát hành dưới dạng LiveScript trước khi tiền tố Java được thông qua phát hành vào đầu năm 1996.


+1 để chọn bitcoin từ Douglas Crockford!
gath

1
Tôi nghĩ rằng ban đầu JavaScript được gọi là Mocha?

1
@Kinopiko Theo cuốn sách 'Javascript: The Definitive Guide' 3ed (tháng 6 năm 1998) của David Flanaghan, nó được gọi là LiveScript.
amelvin

@gath Một ngày khi bạn học được điều gì đó là một ngày tốt lành!
amelvin

1
@amelvin Mỗi ngày là một ngày học.
Đại tá Sponsz

8

Mọi người nên biết về những điều sau đây để nói "Tôi biết JavaScript":

  1. JavaScript là tốt nhưng DOM là điểm đau
  2. Các vấn đề về trình duyệt chéo có thể khiến bạn phát điên
  3. Trừ khi mã được kiểm tra trên ít nhất 4 trình duyệt tốt khác nhau, bạn không thể nói lỗi của nó không có lỗi
  4. Đóng cửa .............. Phải biết
  5. Nguyên mẫu của nó dựa trên ........... Một điều thú vị là học được điều này
  6. từ khóa gỡ lỗi ..... Giúp trong khủng hoảng

Danh sách đẹp, khá mỏng. Tôi đã có một tiếng cười ở "4" trình duyệt tốt. :) Tôi nghĩ số 7 nên là một sự căm ghét lành mạnh đối với các trình duyệt IE trong phiên bản 8.
Shyam

@Shyam, điều gì khiến bạn nghĩ rằng chúng ta không nên căm ghét IE8? Tôi vẫn có vấn đề trong IE8 ... những vấn đề chỉ có ở IE8.
Tracker1

@ Tracker1: Sẽ luôn có vấn đề. Và làm hỏng một trình duyệt mà tôi chưa từng chạm vào, điều đó sẽ hơi bất công. Đó là lý do tại sao tôi cười vào 4 trình duyệt tốt: 'Firefox, Chrome, Safari và Opera' là những trình duyệt duy nhất tôi phát triển. Tôi đã ngừng hack cho IE, tôi chỉ làm cho nó chạy mã Fisher Price, như thể JavaScript sẽ bị vô hiệu hóa.
Shyam

7

JavaScript đó khác nhiều so với các ngôn ngữ khác so với bạn nghĩ. Xem Google Tech Talk tuyệt vời này để có ấn tượng: http://www.youtube.com/watch?v=hQVTIJBZook


1
+1 Đây là một lời giải thích tuyệt vời về cách ngừng hút JavaScript. Đây là những thứ đáng xem sau đó: yuiblog.com/crockford
Đại tá Sponsz

Một bài thuyết trình hay khác về Crockfod ("Ngôn ngữ lập trình JavaScript" 4 phần) video.yahoo.com/watch/111593/1710507
Alex K.

7

Điều mà mọi lập trình viên javascript nên biết?

Làm thế nào về, tôi có thể tắt những nỗ lực của bạn với 2 lần nhấp. Vì vậy, cung cấp một dự phòng nếu có thể.


Bạn cũng có thể gỡ cài đặt trình duyệt web của bạn. Có rất ít người vô hiệu hóa javascript những ngày này. Những người có lẽ không cần duyệt web. Ngoại lệ duy nhất này là các trình thu thập dữ liệu web cần truy cập vào nội dung công khai của bạn và không thể dựa vào JS để làm như vậy.
Jean Vincent

Tôi quan tâm hơn đến việc cung cấp các cách không phải là JS để truy cập mọi thứ. Tôi biết những người duyệt với JS bị vô hiệu hóa hoặc sử dụng trình đọc màn hình. Họ không luôn chơi đẹp với JS. Tôi đã thấy các trang web mà một trang đăng nhập đơn giản được gửi qua ajax mà không có dự phòng nào cả. Không có JS, không đăng nhập. Trang web thậm chí không sử dụng nhiều JS, chỉ để gửi biểu mẫu.
Khainestar

Tôi tin rằng những người dùng cố tình vô hiệu hóa JS như bạn ngụ ý, ngày nay rất không phổ biến, chắc chắn là rất ít hơn 10 năm trước. Đây là lý do tại sao tôi không hiểu tại sao chúng ta nên thiết kế một trang web hai lần cho những người không thực sự muốn truy cập trang web của bạn. Vì vậy, trong ví dụ của bạn, họ không thể đăng nhập, vậy thì sao? Một điều khác là hoàn toàn không có cách nào bạn có thể thiết kế một trang web hiện đại mà không cần JS.
Jean Vincent


6

Bạn biết javascript nếu bạn có thể sử dụng Array, Number, String, Date và Object một cách hiệu quả. Điểm cộng cho môn Toán và RegExp. Bạn sẽ có thể viết các hàm và sử dụng các biến (trong phạm vi chính xác, tức là 'phương thức' của một đối tượng).

Tôi thấy một số ý kiến ​​về việc biết đóng cửa, cú pháp hàm ngông cuồng, blabla. Tất cả điều đó là không liên quan cho câu hỏi này. Điều đó giống như nói rằng bạn là người chạy nếu bạn có thể chạy 100 mét trong vòng 11 giây.

Tôi nói có thể mất vài tuần để thành thạo javascript. Sau đó, phải mất nhiều năm và hàng chục cuốn sách và hàng ngàn dòng lập trình để trở thành một chuyên gia, một ninja, v.v.

Nhưng đó không phải là câu hỏi.

Ồ, và DOM không phải là một phần của javascript và jQuery cũng không. Vì vậy, tôi nghĩ rằng cả hai đều không liên quan đến câu hỏi quá.


1
Đóng cửa là có cho dù bạn quan tâm đến nó hay không. Nó mạnh mẽ nhưng có thể dễ dàng bị lạm dụng. Bạn không biết ngôn ngữ nếu bạn không biết nó hoạt động như thế nào.
gblazex

Ngoài việc đóng cửa gây hại có thể gây ra, như rò rỉ bộ nhớ, đặc biệt là trong người bạn thật sự của chúng tôi Internet Explorer 6.
Marcel Korpel


4

Đọc tất cả những điều trên, việc học Javascript bằng cách sử dụng một khung như jQuery là hoàn toàn tốt . Sự thật là đó là cách đầu tiên rất nhiều người đã chọn JS ngay từ đầu. Không có gì xấu hổ trong đó.


4

mảng . lengthphương thức không phải là số lượng các mục của mảng, mà là chỉ mục cao nhất. ngay cả khi mục được đặt thànhundefined

var a = [];
a.length;   // === 0
a[10];      // === undefined
a[10] = undefined;
a.length;   // === 11
a.pop();    // === undefined
a.length;   // === 10

hành vi này khó có thể phân biệt với lỗi thiết kế ngôn ngữ ..


3

jQuery sẽ là đề xuất tốt nhất của tôi. Không chỉ đối với bản thân mã, đó là thành ngữ, phong cách, suy nghĩ đằng sau nó đáng được mô phỏng nhất.


2
+1 Jquery đã cách mạng hóa việc sử dụng javascript của tôi.
amelvin

1
Lập luận tốt. Mở rộng sẽ làm cho nó một câu trả lời tuyệt vời .
Donal Fellows

jQuery buộc bạn vào một chế độ thủ tục. Tôi thích viết OO JS hơn
Juan Mendes

Không có gì kỳ diệu về hướng đối tượng. Tôi thà sử dụng một khung được thiết kế bởi John Resig và được sử dụng bởi hàng ngàn nhà phát triển khác hơn bất cứ điều gì bạn hoặc tôi sẽ viết, bất kể chế độ.
duffymo

3

Đó là javascript là ngôn ngữ được triển khai rộng rãi nhất trên thế giới. (Có lẽ)


8
Ngôn ngữ tự nhiên được triển khai rộng rãi nhất là tiếng phổ thông. Có biết rằng làm cho bạn một người nói tiếng phổ thông? Bạn có biết thực tế đó thậm chí có liên quan gì đến việc bạn nắm bắt ngôn ngữ không?
Zano

11
Ngôn ngữ được triển khai rộng rãi nhất trên thế giới là mã di truyền của DNA điều khiển quá trình tổng hợp protein trong các tế bào.
Ernelli

Trước tiếng Quan thoại và DNA, ngôn ngữ của Tình yêu trước tiên phải được triển khai: do đó, nó sẽ thắng. BAM!
Christopher

3

Học một ngôn ngữ thực sự tốt và hiểu được những điều kỳ quặc khác nhau đến từ (nhiều năm) kinh nghiệm. Nếu bạn muốn trở thành một lập trình viên giỏi hơn, tôi sẽ nói, hiểu các mẫu thiết kế, cách thức và thời điểm sử dụng chúng và / hoặc ngay cả khi bạn đang sử dụng chúng mà không nhận ra nó; kiến trúc kỹ thuật & kinh nghiệm người dùng.

Biết ngôn ngữ (JavaScript) có nghĩa là bạn có thể chọn bất kỳ khung nào và sử dụng nó theo ý muốn. Bạn chắc chắn sẽ cần phải đi sâu vào mã nguồn và nếu tất cả những gì bạn biết là cú pháp một khung hoặc 2 hoặc 3, thì bạn sẽ không đi xa. Nói như vậy, đi vào một vài mã nguồn của các khung khác nhau có lẽ là một trong những cách tốt nhất để xem JavaScript có thể được sử dụng như thế nào. Lúng túng bằng cách chuyển qua mã trong Fireorms hoặc Web Inspector, sau đó kiểm tra Tài liệu JavaScript, đặc biệt là các tài liệu Mozilla và Webkit, để hiểu thêm về những gì bạn đang xem.

Hiểu được sự khác biệt giữa Lập trình hướng đối tượng và Lập trình chức năng, JavaScript là sự pha trộn gợi cảm của cả hai và khi nào và làm thế nào để sử dụng cả hai để tạo ra một cơ sở mã hóa sát thủ và các ứng dụng tuyệt vời sẽ giúp bạn trở thành một Lập trình viên JavaScript tốt hơn.

Chỉ cần đọc một số cuốn sách, đặc biệt là "những phần hay" của Crockford, đơn thuần chỉ trình bày ý kiến ​​của anh ấy về những gì tốt trong JavaScript, trong khi bỏ qua hầu hết các phần TUYỆT VỜI của JavaScript sẽ khiến bạn đi sai hướng.

Kiểm tra mã được viết bởi một người như Thomas Fuchs, mặt khác sẽ giúp bạn hiểu rõ hơn về sức mạnh của việc viết JavaScript tuyệt vời và hiệu quả.

Cố gắng ghi nhớ một vài vấn đề hoặc WTF cũng sẽ không giúp được gì nhiều, bạn sẽ chọn nó nếu bạn bắt đầu viết mã và bước qua mã thư viện / khung, đặc biệt là một nhận xét hữu ích, để xem tại sao họ đã sử dụng một số các thuộc tính / giá trị chứ không phải tại sao và khi nào tốt khi sử dụng các toán hạng và toán tử cụ thể, đây là tất cả những gì có trong mã của khung công tác mà mọi người sử dụng. Làm thế nào tốt hơn để học bằng ví dụ? : ^)


+1 vì không tôn thờ Crockford. Tôi đối xử với quan điểm của anh ấy như tôi làm một nhà thuyết giáo tại nhà thờ. Tôi tôn trọng những gì họ nói nhưng lấy tất cả bằng một hạt muối.
Juan Mendes

2

Trong Javascript, Hiệu suất quan trọng.

Không có trình biên dịch thông minh để tối ưu hóa mã của bạn, vì vậy bạn nên cẩn thận hơn trong khi viết văn bản javascript so với các ngôn ngữ như C #, Java ...


1
Trong thực tế, trình biên dịch trình duyệt rất tốt trong việc tối ưu hóa mã của bạn.
Eduardo

1
Chrome rất thông minh trong việc tối ưu hóa mã của bạn, câu trả lời này không đúng với tất cả các công cụ JS mới
Juan Mendes

Còn IE, trình duyệt di động thì sao?
caltuntas

1

đối tượng bằng chữ bởi vì họ rất tốt để viết.



0
  1. Biết rằng có một cuộc sống có và không có with()và nơi để vẽ đường.
  2. Bạn có thể tạo các lỗi tùy chỉnh với throwcâu lệnh để cố tình dừng thời gian chạy javascript.

-1

JavaScript không hỗ trợ tách từ khóa return và return return với ký tự dòng mới như đoạn mã sau (hoặc thử nó tại trang jsFiddle của tôi )

function foo()
{
    return
    {
        bar: 'something'
    };
}

$(function()
{
    document.write(foo());
});

Tôi không hiểu tại sao JavaScript không hỗ trợ kiểu này vì việc đọc mã nguồn JavaScript rất phức tạp sẽ dễ dàng hơn nhiều khi so sánh với kiểu JavaScript mặc định.

Tái bút Tôi đã viết JavaScript gần 6 năm. Nhưng tôi chỉ tìm thấy lỗi này với chính mình khi tôi cố gắng thực hiện chức năng sau. Nó luôn trả về không xác định. Khi tôi sử dụng trình gỡ lỗi và bước vào chức năng này, mọi thứ đều hoạt động tốt. Tôi nghĩ nó nên là lỗi lập trình tồi tệ nhất trong cuộc đời tôi.

function JqGridInlineEditor_GenerateTool(cellvalue, options, rowObject, disableEdit, disableDelete)
{
    return 
        (!disableEdit ? '<a class="button edit" href="javascript: void(0);" onclick="JqGridInlineEditor_EditRow(this, \'{0}\');return false;" title="{2}"><img src="{1}" alt="{2}" /></a>'.format(options.rowId, getUrl('~/Content/Icons/Edit.gif'), 'Click here to Edit or \nDouble-click row to edit.') : '') +
        (!disableDelete ? '<a class="button delete" href="javascript: void(0);" onclick="JqGridInlineEditor_DeleteRow(this, \'{0}\');return false;" title="{2}"><img src="{1}" alt="{2}" /></a>'.format(options.rowId, getUrl('~/Content/Icons/Delete.png'), 'Click here to Delete or \nSelect row and then press Delete') : '') +
        (!disableEdit ? '<a class="button save" style="display:none" href="javascript: void(0);" onclick="JqGridInlineEditor_SaveRow(this, \'{0}\');return false;" title="{2}"><img src="{1}" alt="{2}" /></a>'.format(options.rowId, getUrl('~/Content/Icons/Save.png'), 'Click here to Save or \nPress Enter') : '') +
        (!disableEdit ? '<a class="button cancel" style="display:none" href="javascript: void(0);" onclick="JqGridInlineEditor_RestoreRow(this, \'{0}\');return false;" title="{2}"><img src="{1}" alt="{2}" /></a>'.format(options.rowId, getUrl('~/Content/Icons/Cancel.png'), 'Click here to Cancel or \nPress Esc') : '');
}

3
Trong JavaScript, các ký tự dòng mới thường đóng vai trò là dấu phân cách của các câu lệnh; chỉ khi không thể, một câu lệnh đã kết thúc (ví dụ, var foo = "bar" +) trình phân tích cú pháp đọc.
Marcel Korpel


2
@Marcel - Điều đó không chính xác; ví dụ: hai dòng var foo = 5-1;sẽ dẫn đến foo được đặt thành 4, mặc dù mỗi dòng đều là các câu lệnh hợp lệ.
Ben Trống

4
Điều này là do ngôn ngữ tiêm dấu chấm phẩy tự động vào các câu lệnh riêng biệt. Đây là một gotcha với ngôn ngữ. Tuyên bố hoàn trả của bạn được chuyển đổi thành này: return; {key: value,} Để tránh vấn đề này, bạn nên áp dụng cách đặt dấu chấm phẩy vào cùng một dòng, như thế này: return {key: value}; Ngoài ra, hãy tạo cho mình một đặc ân và lấy một bản sao của Douglas Crockford: The Good Parts. Điều này được đề cập rõ ràng trong cuốn sách.
Rajat

@Ben - Trường hợp thú vị, cảm ơn vì đã chỉ vào đó. Điều đó nói rằng, tôi khuyên bạn không nên dựa vào các trường hợp cạnh này và chỉ đặt mọi thứ trên một dòng kết thúc bằng dấu chấm phẩy và chỉ đặt mã của bạn trên nhiều dòng khi một dòng kết thúc bằng một câu lệnh hoặc biểu thức đơn giản là không thể kết thúc bằng .
Marcel Korpel

-3

Vì JS là một ngôn ngữ chức năng, một lập trình viên đàng hoàng phải có khả năng viết Y-combinator và giải thích cách nó hoạt động ra khỏi đỉnh đầu.


1
Có gì sai khi có thể viết Y-combinator? Và có javascript là một ngôn ngữ chức năng. Nếu bạn muốn nói rằng bạn "biết javascript" thì việc hiểu lập trình chức năng là cần thiết.
Raynos

C cũng có thể được sử dụng như một ngôn ngữ chức năng.
kzh

Gần đây tôi đã đọc về bộ kết hợp Y, hiểu cách thức hoạt động của nó và trong trường hợp nào nó có thể được sử dụng .. nhưng không bao giờ tìm thấy một trường hợp mà tôi không thể viết lại một vấn đề để không cần bộ kết hợp Y.
Evert

-5

... trong khoảng Google Web Toolkit , có nghĩa là dự án javascript của bạn có thể được phát triển theo cách triệu tập hơn nhiều.


2
GWT không thực sự là JavaScript, nó là cách viết JavaScript của Java.
Livingston Samuel

... và mọi lập trình viên Javascipt nên biết về nó.
Viktor Sehr

rằng dự án javascript của bạn có thể có thể được phát triển theo cách triệu tập hơn nhiều.
Viktor Sehr

6
Cá nhân tôi nghĩ Javascript dễ đối phó hơn Java.
timw4mail
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.