2012-08-13 30 views
14

Aşağıdakilerin sonuçlarının nasıl değerlendirildiğini bana açıklayabilir misiniz?Nesneler ve diziler ekleme

{} + {} // NaN 
[] + {} // "[object Object]" 
{} + [] // 0 
[] + [] // "" 
+1

Sanırım '{} + []' aslında '' 0 ''(bir dizi)' '' değil (bir sayı). – DaoWen

+0

@DaoWen, aslında bir Tamsayı '0' – Adi

+0

hayır efendim, bir tamsayı, isterseniz chromes konsolunda test edin .. – Hilmi

cevap

13

Burada check it bu tam bir açıklaması var.

Ve {} bir blok yerine bir nesnenin düşünülmektedir çünkü konsolda doğrudan yürütmek eğer{} + {}NaN olmak unutmayınız.

({}+{}) gerçek sonuç'[object Object][object Object]'

olduğunu edilmelidir: herhangi bir nesneye ve dize gösterimi daima sonuçlanan bir Örneğin

katılmak ile

console.log({}+{}) // '[object Object][object Object]' 
console.log([]+{}) // '[object Object]' 
console.log({}+[]) // '[object Object]' 
console.log([]+[]) // '' 
+0

için bir dize aldım. Bu bir-blok nesne değil şey harika bir av! Teşekkürler! – Adi

+0

Açıklama için başka bir bağlantı: https://loomcom.com/blog/2015/06/29/the-wats-of-javascript/ – Arda

2

ekleme diziler:

[1] + [2] // is merged to "12", so [] + [] is an empty string "" 

aynı kolay çok var

['test'] + {} // "test[object Object]" 

Yani boş bir nesne artı boş bir dizi sadece boş nesnelere eklemek için bir [object Object]


dönecektir ikinci örneğin eşittir:

Basit bir boş nesneyi değerlendirin: {} // results in undefined

Ve iki undefined değerlerini ekleyerek NaN olduğunu, çünkü bunlara ekleme yapmanın bir yolu yoktur.

Not: dönüş değerleri JavaScript uygulanmasına bağlı Ayrıca

(yani hangi tarayıcı veya Çevre cinsinden): What is {} + {} in JavaScript?

0
{} + {} 

Eğer bir ekleme veya herhangi bir operasyon yapmaz iki nesne

[] + {} // "[object Object]" 

Sadece dize ve nesne arasındaki bir concat, aynı resu var İki boş dize alert({});

{} + [] // 0 

aynı

[] + [] // "" 

concat = boş bir dizge ile lt.

İlgili konular