2013-08-04 30 views
7

Tôi đã lập trình JS trong nhiều năm và tôi vẫn đang tìm các phím tắt mới để thực hiện mọi việc. Tôi tự hỏi nếu có nhiều hơn mà tôi không biết về.thành ngữ javascript để làm những việc phổ biến

Dưới đây là các phím tắt tôi biết về:

chỉnh sửa: Tôi đồng ý rằng bạn thường không bao giờ nên làm công cụ này, và điều đó có thể là một cách tốt hơn để mô tả nó như là ít rộng, nhưng các tốt nhất tôi có thể làm là mô tả nó bằng ví dụ.


Thay vì điều này

if("foobar".indexOf("foo") > -1) 

Làm điều này

if(~"foobar".indexOf("foo")) 

Thay vì điều này

var foo = Math.floor(2.333) 

Làm điều này

var foo = ~~2.333 

Thay vì điều này

var foo = parseFloat("12.4") 
var bar = parseInt("12", 10) 

Làm điều này (quạt không khổng lồ này)

var foo = +"12.4" 
var bar = +"12" 

Thay vì điều này

if(isNaN(foo) 

Làm điều này

if(foo != foo) 

Thay vì điều này

(function(){ ... ])() 

Làm điều này

!function(){ ... }() 

Chuyển đổi bất cứ điều gì để một boolean bởi đặt trước từ đó !!

var isFoo = !!foo 

Ở đó bạn có nó, danh sách các điều cần không bao giờ làm gì để đồng nghiệp của bạn.

Có thể thêm nội dung gì khác vào đây không?

+0

Các phím tắt duy nhất mà tôi thực sự sử dụng là '!!' và '+" 1 "'. Phần còn lại có các tác dụng phụ không mong muốn (ví dụ: '~~ 10000000000000 == 1316134912') hoặc chỉ trông buồn cười. – Blender

+0

@mkoryak: Tôi đã nói nhiều hơn về các hoạt động bitwise, sẽ chuyển đổi các số của bạn thành các số nguyên 32 bit đã ký. – Blender

+0

@mkoryak, ngoài việc "quá rộng", bạn nên sử dụng hộp kiểm "Trả lời câu hỏi của riêng bạn" hoặc di chuyển phần câu trả lời cho câu trả lời. – FakeRainBrigand

Trả lời

2
  • n | 0 tầng n (chỉ khi n nằm trong phạm vi số nguyên 32-bit đã ký). Nó nhanh hơn Math.floor() trong hầu hết các trình duyệt mà tôi đã kiểm tra lần cuối.
  • undefined == null, nhưng không bằng false.
  • Thay vì x == 'a' || x == 'b' || x == 'c', bạn có thể làm ['a', 'b', 'c'].indexOf(x) !== -1

Các chỉ shortcut thực sự ngắn mà tôi đã nhìn thấy trong mã sản xuất là unary + để chuyển đổi chuỗi thành số.

11

Câu hỏi này có thể sẽ bị đóng vì quá rộng và câu trả lời này có thể thu hút được tỷ lệ chia sẻ công bằng của họ vì không trả lời trực tiếp, nhưng ở đây.

Hãy, xin, được thực sự thận trọng về việc sử dụng "phím tắt" bằng một ngôn ngữ lập trình, bởi vì ... thực sự ... đang họ giúp đỡ?

Hầu hết các lối tắt này đều hy sinh sự rõ ràng và nhân chứng cho các lần nhấn phím. Bạn sẽ không tìm thấy một người lập trình viên chuyên nghiệp, có năng lực và chuyên nghiệp, họ sẽ đồng ý rằng đó là một giao dịch hợp lý.

Cân nhắc

if("foobar".indexOf("foo") > -1) 

để

if(~"foobar".indexOf("foo")) 

Bạn đã lưu 4 nhân vật ... whoopie! Tuy nhiên, bạn cũng đảm bảo rằng bất kỳ ai không biết lối tắt này đều có cơ hội rất mỏng để có thể tìm ra những gì đang xảy ra ở đây ... và chắc chắn không dễ dàng.

Đọc định nghĩa của indexOf là đủ để hiểu phiên bản rõ ràng. Đối với thứ hai, bạn cần phải hiểu những gì ~ có nghĩa là (mà là một nhà điều hành khá phổ biến trong JS). Sau đó, bạn cần phải biết bổ sung bit của -1 là gì. Sau đó bạn cần phải nhận ra rằng đó là sự thật.

Đó là một sự đánh đổi ngu xuẩn và đó là dấu hiệu của nhiều thành ngữ này.

Vui lòng không làm điều đó. Đây không phải là những năm 80.

+3

"Đây không phải là những năm 80." - ồ, các loại thuốc đã bị mòn. Chết tiệt! (+1 BTW) –

+0

Tôi đánh giá cao rằng OP liệt kê chúng là "Những điều không bao giờ làm với đồng nghiệp của bạn" và khen ngợi anh ta về điều đó. – Dancrumb

+0

+1. Tôi đã viết điều này trong câu hỏi, nhưng như bạn đã nói, nó sẽ bị đóng, cộng với những câu hỏi dài thường bị bỏ qua. – mkoryak

2

Tôi thấy cái này rất nhiều:

myString = "Some string." 
b = myString[myString.length - 1]; // get the period 

Nên

b = myString.slice(-1); 

for Vòng lặp while.

for (var i=0; i < a.length; i++) { 
    var x = a[i]; 
    console.log(x); 
} 

để

for (var i=0,x; (x=a[i++]) != null;) { 
    console.log(x); 
} 

Đặt này ở phía trên cùng của một kịch bản.

String.prototype.has = Array.prototype.has = function(a){ return this.indexOf(a) !== -1; } 

Biến những

if (myString.indexOf(a) !== -1) 
if (myArray.indexOf(a) !== -1) 

những

if (myString.has(a)) 
if (myArray.has(a)) 

Đối với khi bạn cần phải đặt 42 trong mã của bạn, nhưng lén lút.

var answer = ((((1<<2)|1)<<2)|1)<<1; 

CoffeeScript

... cần tôi nói nhiều hơn?

+0

Cảm ơn, điều này rất hữu ích và rất nhiều về chủ đề của những gì tôi đã yêu cầu. Có coffeescript đá :) – mkoryak

+0

Vâng, câu hỏi chỉ nhắc nhở tôi về rất nhiều "Vì vậy, đó là bạn yêu thích" câu hỏi lúc đầu, và những cái nhìn thứ hai :-) – FakeRainBrigand

+0

này 'for (var i = 0, x; (x = một [i ++])! = null;) 'là rực rỡ. Cảm ơn! – user3557327

Các vấn đề liên quan