2012-05-01 97 views
21

Bất cứ ai có thể giải thích cách chức năng parseInt() hoạt động và thông số Radix là gì?Sử dụng Javascript parseInt() và tham số Radix

Là một nghiên cứu trường hợp, tôi đang cố gắng để hiểu thấu với đoạn mã này:

var maxChars = parseInt(formField.attr('maxlength') ? formField.attr('maxlength') : counter.text()); 

Bạn có thể cũng giải thích cách mã này làm việc? Tại sao là formField.attr ('maxlength') có hai lần? Tôi thấy việc sử dụng các toán tử ở đây khá khó hiểu!

Thông số Radix hoạt động như thế nào trong ví dụ này?

+2

[sách hướng dẫn] (https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/parseInt) chưa rõ ràng? – Quentin

+4

There _is no_ radix được chỉ định trong ví dụ này ... Toàn bộ biểu thức bên trong 'parseInt()' là một câu lệnh ternary trả về maxlength nếu nó được chỉ định hoặc 'counter.text()' nếu nó không phải là. –

+1

Cuối cùng, tất cả những gì bạn nhận được từ điều này là 'parseInt (formField.attr ('maxlength'))' OR 'parseInt (counter.text())' –

Trả lời

36

radix là tên khác cho base, tức là 2 cho nhị phân, 10 cho thập phân, 16 cho thập lục phân, được giải thích chi tiết hơn trên Mozilla Developer Network site.

Trong ví dụ của bạn không có tham số radix, vì vậy người phiên dịch sẽ rơi trở lại hành vi mặc định, mà thường đối xử với con số như số thập phân, trừ khi họ bắt đầu với một số không (bát phân) hoặc 0x (hệ thập lục phân).

+10

Rất vui khi ai đó đã trả lời câu hỏi tại đây. Kể từ khi nào bạn phải bắt đầu với hướng dẫn sử dụng? Hãy cho tôi nghỉ ngơi, câu hỏi là hợp lệ và không nên bị bỏ phiếu. –

+4

Firefox, Chrome và IE 9+ xử lý 'parseInt (" 077 ")' là 'parseInt (" 077 ", 10)'. IE8 và dưới đây xử lý nó như là 'parseInt (" 077 ", 8)' Đó là lý do tại sao bạn nên luôn luôn xác định cơ số. –

+2

@JuanMendes Tôi tin rằng ES5 đã phản đối hành vi ban đầu của việc mặc định thành bát phân cho số không đứng đầu. – Alnitak

2

Trong ECMA Script 5 khi chuỗi bắt đầu với 0 và không có cơ số được quy định hành vi mặc định là số thập phân (như trái ngược với các phiên bản trước đó, trong đó nó là bát phân)

Nguồn: parseInt() on Mozilla Developer Network

0

parseInt mất hai tham số, tùy chọn thứ hai là tùy chọn. Chuỗi và Radix.

Chuỗi là giá trị để phân tích cú pháp. Nếu giá trị được cung cấp không phải là một chuỗi, nó sẽ chuyển đổi nó thành một chuỗi.

Radix là một số nguyên giữa 2 và 36 đại diện cho radix (cơ sở trong hệ thống chữ số toán học) của chuỗi nêu trên.

Trong đoạn mã của bạn Radix không được chỉ định và được giả định là mặc định 16.

var maxChars = parseInt(formField.attr('maxlength') ? formField.attr('maxlength') : counter.text()); 

Bạn đang xác định một biến gọi là "maxChars". Biến này bằng với việc đánh giá câu lệnh IF ngắn tay.

Bạn đang nhận thuộc tính từ biến được dự kiến ​​là bộ chọn "formField" được gọi là "maxLength". Giá trị sẽ trở lại dưới dạng số nguyên, nó sẽ dự phòng trên cơ số mặc định của nó.

Câu lệnh IF sẽ kiểm tra nếu giá trị trả về là đúng hay sai. 0, false, ectcetera sẽ dẫn đến giá trị của biến "maxChars" được đặt thành văn bản kết hợp "counters". Nếu đúng, nó sẽ dẫn đến biến được đặt làm thuộc tính selector "formField" được gọi là "maxLength".

formField.attr('maxlength') 

Có hai lần vì một được sử dụng trong đánh giá câu lệnh IF và giá trị kia được sử dụng làm giá trị nếu điều kiện trong câu lệnh IF là TRUE.

+0

một chút trễ, nhưng Radix không được chỉ định nhưng không phải lúc nào cũng mặc định 16 và câu này sai vì nửa thứ hai. nó phụ thuộc vào trình duyệt và chuỗi thực tế được truyền vào. Và cũng vì ES5 (như đã nêu trong các chú thích trong câu trả lời được chấp nhận) thường mặc định là số thập phân/10 – Daemedeor