2012-11-02 35 views
9

JSLint ile karıştırıldım.JSLint neden x === "undefined" türünde x == "undefined" türünü önerir?

div:jqmData("me") şöyle tanımsız ise Kodum başlangıçta kontrol

:

if (typeof el.jqmData("me") == "undefined" 
    ? el.not(':jqmData(panel="main")').length > 0 
    : el.not(':jqmData(me="first")').length > 0){ 

} 

JSLint ben === ile typeof ile kontrol değiştirmelidir yakınıyor, bu yüzden böyle yaptım:

if (el.jqmData("me") === "undefined" 
    ? el.not(':jqmData(panel="main")').length > 0 
    : el.not(':jqmData(me="first")').length > 0){ 

} 

JSLint kokan Artık şikayet etmiyorum, ama benim iç içe geçmiş ifadem kırıldı, çünkü şimdi yapmam gerekse bile her zaman 2.ile bittim.

Soru:
Neden JSLint typeof == undefined üzerinde === öneriyor? Bu nasıl olur da mantığımı kırar? Sen karşılaştırma mantığı kırdın

+10

'x === undefined' değil' x === 'undefined'' – zerkms

+0

oh .... bu mantıklı… – frequent

+0

@zerksm: Lütfen bir cevap verin! – frequent

cevap

6

bazı aydınlanmanın için

teşekkürler .... Şahsen ikincisi gelirdim

typeof el.jqmData("me") === "undefined" 

veya

el.jqmData("me") === undefined 

kullanmak üstlenmiş durumda. Kişisel olarak, bu özel durumda yapılan JSLint denetiminin çok anlamlı olmadığını düşünüyorum.

+0

evet. Anlaşmak. Açıklama için teşekkürler. İyi, bunu buldum, bu kadar çok değiştirdim ... – frequent

+5

Ancak, bir değişkenin tanımlandığını veya tanımlanmadığını test etmek isterseniz bu işe yaramaz: (someundefinedvar === undefined), bir referenceError'tır. Yine de JSLint, değişken def'i test ettiğimde bile bundan şikayet ediyor. – mattacular

+0

@mattacular: Evet, bunu sık sık kontrol etmediğim için bunu özledim – zerkms

0

Ne zerkms yazdı doğrudur. Bir açıklama, https://github.com/jamesallardice/jslint-error-explanations/issues/10#issuecomment-18273885:

'dan itibaren, undefined karşılaştırması ile bir tarzın modernleştirilmesinde yardımcı olabilir. ES5, undefined'un undefined olduğunu garanti eder. Sıkı modda, eski ve yeni stillerle karşılaştırıldığında, typeof "undefined" denetimi daha uzun yazılmıştır ve artık tanımlanmamıştır, tanımsız doğrudan karşılaştırılabilir. https://plus.google.com/101248256976407044060/posts/Q5oFnnxG9oL

Crockford temelde typeof "undefined" çek daha uzun ve daha yavaştır ve gereksiz olduğunu söyler:

JSLint açıklamalara bakın.