(a== 1 && a ==2 && a==3) hiç doğru olarak değerlendirilebilir mi?
Moderatör notu: Lütfen kodu düzenleme veya bu uyarıyı kaldırma dürtüsüne direnin. Boşluk kalıbı sorunun bir parçası olabilir ve bu nedenle gereksiz yere kurcalanmamalıdır. Eğer "whitespace önemsizdir" kampındaysanız, kodu olduğu gibi kabul edebilmelisiniz.
JavaScript'te (a== 1 && a ==2 && a==3)
ifadesinin true
olarak değerlendirilmesi mümkün müdür?
Bu, büyük bir teknoloji şirketi tarafından sorulan bir mülakat sorusudur. İki hafta önce oldu, ama hala cevabı bulmaya çalışıyorum. Günlük işlerimizde asla böyle bir kod yazmadığımızı biliyorum ama merak ediyorum.
2440
3
Eğer how
==
works avantajından faydalanırsanız, her kullanıldığında döndürdüğü değeri değiştiren özel birtoString
(veyavalueOf
) fonksiyonuna sahip bir nesne oluşturabilirsiniz, böylece her üç koşulu da yerine getirmiş olursunuz.Bunun işe yaramasının nedeni, gevşek eşitlik operatörünün kullanılmasıdır. Gevşek eşitlik kullanıldığında, işlenenlerden biri diğerinden farklı bir türdeyse, motor birini diğerine dönüştürmeye çalışacaktır. Solda bir nesne ve sağda bir sayı olması durumunda, çağrılabilirse önce
valueOf
öğesini çağırarak nesneyi bir sayıya dönüştürmeye çalışacak ve bu yapılamazsatoString
öğesini çağıracaktır. Bu durumdatoString
kullandım çünkü aklıma gelen buydu,valueOf
daha mantıklı olurdu. Bunun yerinetoString
den bir dize döndürseydim, motor daha sonra dizeyi bir sayıya dönüştürmeye çalışacak ve bize aynı sonucu verecekti, ancak biraz daha uzun bir yolla.BU MÜMKÜN!
Bu,
a
nın üç farklı değere değerlendirilmesine izin vermek için birwith
deyiminin içinde bir getter kullanır.... bu yine de bunun gerçek kodda kullanılması gerektiği anlamına gelmez...
Daha da kötüsü, bu numara
===
kullanımı ile de çalışacaktır.Bu, global kapsamda aşağıdakiler kullanılarak gerçekleştirilebilir. Aşağıdaki kodda
nodejs
içinwindow
yerineglobal
kullanın.Bu yanıt, değişkeni almak için bir getter tanımlayarak yürütme bağlamında global kapsam tarafından sağlanan örtük değişkenleri kötüye kullanır.