2016-04-28 33 views
7

Giả sử tôi có một chuỗi, giá trị đó đã là một số, ví dụ: var str = "1234" Bây giờ tôi muốn chuyển đổi nó thành số.Tại sao + str là tốt hơn str * 1 trong JS để chuyển đổi chuỗi thành số?

Tôi đã thấy hai thủ đoạn trên internet cho đến nay,

  1. Sử dụng unary +: var num = +str
  2. Sử dụng các nhà điều hành nhân *: var num = str*1

Tôi muốn biết cái nào là tốt hơn nói chung.

Như tôi đã thấy từ nhận xét của câu trả lời được chấp nhận ở đây: Converting Json Results to a Date, có vẻ như là *1 là cách tốt nhất để tránh. Điều này có đúng không và lý do đằng sau nó là gì?

+5

Đối với số nguyên, parseInt() sẽ tốt hơn –

+2

Các cộng unary là theo định nghĩa nhằm chuyển đổi một giá trị cho một số, vì vậy nó là ngữ nghĩa chính xác hơn so nhân với 1 trong đó giới thiệu một toán hạng. @EricSo - parseInt() chỉ tốt hơn nếu bạn đặc biệt muốn bỏ qua bất kỳ dữ liệu không phải số hoặc giá trị vị trí thập phân nào trong chuỗi - nếu không nó sẽ * tệ hơn * so với cộng dồn * vì * nó bỏ qua thứ đó. – nnnnnn

Trả lời

10

Ít hoạt động hơn, về cơ bản.

Phương thức đơn nhất gọi phương thức nội bộ toNumber, trong khi toán tử nhân cũng gọi toNumber, sau đó thực hiện phép toán trên đó.

Tại sao các bước bổ sung?

http://www.ecma-international.org/ecma-262/6.0/#sec-unary-plus-operator

http://www.ecma-international.org/ecma-262/6.0/#sec-applying-the-mul-operator

+0

Cảm ơn. Câu trả lời rõ ràng và rõ ràng, và cho tôi biết rằng + không phải là hacky ở tất cả .. nó thực sự là ý định chính thức để thực hiện công việc – shole

+1

Tôi sẽ không nói đó là 'ý định chính thức' vì có các ngôn ngữ được nhập mạnh mẽ thực hiện unary '+'. Tuy nhiên, khi sử dụng tập hợp con JavaScript cụ thể được gọi là 'ASM',' + 'được sử dụng chính thức để nhập xác định số dấu phẩy động và' | 0' được sử dụng để gõ xác định số nguyên 32 bit. –

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