2013-04-14 41 views
16

1 Phần:{} + {} trong JavaScript là gì?

Vì Khi bạn đang thêm hai mảng, mọi thứ hoạt động như mong đợi:

[] + []  //output:'' 

Thêm một mảng và một đối tượng cũng phù hợp với sự mong đợi của chúng tôi:

[] + {} 
output:'[object Object]' 

{} + {} bằng JavaScript là NaN?
và đây là kết quả không mong muốn, vậy lý do đằng sau điều này là gì?

phần 2:

So chuỗi mà không tiền tố 0, 3 là lớn hơn 12:

"3" > "12" 
: true 

Với đệm, mọi thứ hoạt động một cách chính xác:

"03" > "12" 
: false 

là prefix 0 bắt buộc đối với chuỗi so sánh? Lý do để thêm tiền tố 0 là gì?

+9

'[] + [] == ''' được mong đợi cho bạn? Logic của bạn là gì? –

+3

@SergioTulentsev: Biểu diễn chuỗi của mảng là biểu diễn chuỗi các mục của nó được nối bằng dấu phẩy. Nếu nó là một mảng trống, biểu diễn chuỗi của nó sẽ trống, và nếu bạn nối hai chuỗi trống, bạn sẽ nhận được một chuỗi rỗng. – icktoofay

+3

Bạn nên đăng một câu hỏi cho mỗi câu hỏi. –

Trả lời

12

phần đầu

1-

khi bạn thêm hai mảng bạn lấy giá trị nguyên thủy cho mỗi và mảng có thể được chuyển đổi thành các chuỗi như [1,2,3,4].toString() //=> 1,2,3,4 nên hai mảng Emty sau tạo ra các chuỗi trống và kết nối giữa chúng tạo ra chuỗi rỗng.

2- khi cho phần thứ hai khi bạn thêm chuỗi rỗng với đối tượng, bạn đang chuyển đổi đối tượng chuỗi và như chuỗi giá trị của một đối tượng là [object Object]

3-

khi bạn thêm hai đối tượng, trong cách thể hiện bạn chỉ chuyển đổi một đối tượng đến số bởi việc kiểm tra + này question

Phần thứ hai

Chuỗi so sánh được thực hiện từng chữ từ trái sang phải và càng sớm càng có một sự tôn kính giá trị trả được xác định bỏ qua chiều dài chuỗi như sau

"3" > "12" 

"3" trong ASCII lớn hơn "1 "vì vậy sự trở lại là TRUE

"03" > "12" 

"0" trong ASCII là nhỏ hơn so với "1" để trở lại là False

14
  1. {} + {} được hiểu như là các khối rỗng {} tiếp theo là biểu hiện + {}. {} không có giá trị bằng số, do đó, nó mang lại NaN. Nếu bạn buộc nó được đánh giá như một biểu thức như ({} + {}), bạn sẽ nhận được [object Object][object Object].

  2. Chúng là các chuỗi, vì vậy chúng sẽ được so sánh theo từ điển. Nếu bạn muốn so sánh chúng dưới dạng số, phân tích cú pháp chúng trước tiên bằng cách sử dụng parseInt hoặc parseFloat.

0

tôi đã thử các sau đây trong mới nhất Firefox, Safari và Chrome: a = [ ]; b = {}; console.log (a + a); console.log (a + b); console.log (b + b);

Firefox

(an empty string) 
[object Object] 
[object Object][object Object] 

Chrome

[object Object] 
[object Object][object Object] 
undefined 

Safari

[object Object] 
[object Object][object Object] 

Chuỗi "3" lớn, thứ tự từ điển, so với chuỗi "12". Nếu bạn thực sự muốn các chuỗi được so sánh như số, bạn phải nói với JavaScript đó là cách bạn muốn nó được thực hiện.

parseInt("3") > parseInt("12");