SORU
13 Kasım 2010, CUMARTESİ


(![] [])[ []]... Bu işleri niçin

alert((![] [])[ []] (![] [])[ ! []] ([![]] [][[]])[ ! [] [ []]] (![] [])[! [] ! []]);

Bu kod çıktısı: fail. Neden?

Yol, (![] [])[ ! []] = 'false'[0], değil mi?. Ama neden ! [] == 1 neden 10* *ve ?

CEVAP
13 Kasım 2010, CUMARTESİ


@Mauricio yorumladı (![] [])[ []] "f" (ilk char ""), false, (![] [])[ ! []])"", vs... bir

Nasıl çalışır?

İlk karakteri incelemek, '': . f izin

(![] [])[ []]; // 'f'

İlk bölümde ifade arasında parantez—tarafından bestelendi ![] [], ilk işlenen toplama işareti ![] ve üretecek false, çünkü bir dizi nesne olarak başka bir Nesne örneğitruthyve Mantıklı bir uygulama (!) Tekli operatör DEĞİL, örneğin değeri false, üretir.

![]; // false, it was truthy
!{}; // false, it was truthy
!0;  // true, it was falsey
!NaN;  // true, it was falsey

Sonra, elimizdeki ikinci ifadenin eklenmesi, boş bir Dizi [], Bu yapılan sadece dönüştürmek false değeri Dize, çünkü dize temsili boş bir dizidir sadece boş bir dize eşdeğerdir:

false []; // "false"
false ''; // "false"

Son bölümü, sonra parantez köşeli parantez çifti, özellik erişimci ve Tekli Artı Operatörü boş bir dizi için yeniden uygulanması ile oluşan bir ifade alırlar.

Tekli Artı Operatörü ne yapar, örneğin tipi dönüşüm, Number,:

typeof  "20"; // "number"

Bir kez daha, bu uygulanan boş bir Dizi, ve bana cevap ver, Dize gösterimini bir Dizi boş bir dize, dönüştürme zaman boş bir dize olarak dönüştürülür sıfır:

 []; // 0, because
 [].toString(); // 0, because
 ""; // 0

Biz "ifadesi bazı adımlar: . bu nedenle kod çözme

(![] [])[ []];
(false [])[ []];
(false '')[ []];
(false '')[0];
('false')[0];  // "f"

String ayraç kullanarak karakterleri erişim ECMA 3 parçası olduğunu unutmayın. Şartname, (charAt yöntemi var bu yüzden) Edition.

Ancak bu tür bir "dizin özellikleri" temsil eden bir karakter dizesi vardı üzerinde standart ECMA 5, hatta daha öncesinden standardizasyon özellik mevcut güzel bir sayı tarayıcılar (hatta IE8 (standartlar modu)).

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • captainpuppys2000

    captainpuppy

    20 HAZİRAN 2013
  • george sarintzotis

    george sarin

    2 Aralık 2007
  • Lin Steven

    Lin Steven

    17 EKİM 2006