2012-02-21 44 views
6

Tại sao parseInt một chức năng thay vì một phương thức?Tại sao không parseInt một phương pháp?

Chức năng:

var i = parseInt(X); 

Phương pháp:

var i = X.parseInt(); 
+3

Bởi vì nó sẽ ném một lỗi nếu X không xác định? – jishi

+4

@jishi: Nếu 'X' là' không xác định', bạn sẽ luôn gặp lỗi khi cố gắng truy cập thuộc tính. Không chắc chắn những gì sẽ phải làm với 'parseInt' không phải là một phương pháp của' Số'. –

+0

@amnotiam 'parseInt (undefined) === NaN' nếu' parseint' là một phương thức 'String' hoặc' Number' thì 'undefined.parseInt()' sẽ ném một ngoại lệ không trả về 'NaN' – JaredMcAteer

Trả lời

13

Edit:

Tôi không chắc chắn 100% tại sao parseInt không phải là một phương pháp String, ngoại trừ việc nó có thể chạy trên bất cứ thứ gì. Dường như nó có thể là một phần của Math nhưng nó không thực sự là một hoạt động toán học.

End Sửa

parseInt là một phương pháp của đối tượng toàn cầu. Trong trình duyệt, đối tượng chung là window. Bạn có thể gọi window.parseInt(), nhưng công cụ JS cho phép bạn thực hiện cuộc gọi đến các phương thức toàn cầu.

Điều đó nói rằng, có một số chi phí cho nó khi động cơ phải quét chuỗi phạm vi tìm kiếm các định nghĩa của parseInt. Nói chung, nếu tôi đang làm cho một duy nhất để gọi đến một phương pháp như vậy trong một phạm vi, tôi sẽ tham khảo nó ra khỏi toàn cầu:

var foo = function (someString) { 
    var bar; 

    // ... 

    bar = window.parseInt(someString, 10); 

    // ... 
}; 

Nếu mã của tôi cần phải làm nhiều hơn một cuộc gọi đến phương pháp này trong một phạm vi, tuy nhiên, tôi bản địa hóa nó và sử dụng tham chiếu:

var foo = function (someString, someOtherString) { 
    var parseInt = window.parseInt, 
     bar, 
     baz; 

    // ... 

    bar = parseInt(someString, 10); 
    baz = parseInt(someOtherString, 10); 

    // ... 
}; 
+3

Tôi nghĩ rằng anh ta có thể hỏi tại sao nó không phải là một phương thức của 'Số'. –

+2

Vâng, có lẽ anh ta - mặc dù tôi nghĩ rằng nó gần gũi hơn với "tại sao không phải là' parseInt' một phương thức 'String'?". – JAAulde

+1

@amnotiam - đó là những gì tôi cũng đã tìm, nhưng parseInt() không phải (và có lẽ không nên (tốt, ít nhất là không cần thiết để chạy nó trên các số)) được chạy trên các số nhưng trên mọi thứ _but_ số (Tôi đoán đó là lý do tại sao nó không phải là một phương pháp của 'Số'). – powerbuoy

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