2012-09-27 24 views
11

Ben kodlu aşağıdadır:JSLint neden "typeof ... === 'undefined'" yerine "=== undefined" kullanmamı söylüyor?

showTitles = (typeof showTitles !== 'undefined') ? showTitles : 'Y'; 
showSelectGroup = (typeof showSelectGroup !== 'undefined') ? showSelectGroup : 'Y'; 

Ama JSLint söylüyor:

Warning 3 JS Lint: Unexpected 'typeof'. Use '===' to compare directly with undefined.

nasıl kodunu değiştirmek gerekir?

showTitles = (showTitles === undefined) ? 'Y' : showTitles; 
showSelectGroup = (showSelectGroup === undefined) ? 'Y' : showSelectGroup; 

jslint kullanarak Muhtemelen

+2

Jslint hakkında hiçbir şey bilmiyorum, ama bence bunu yapmanı söylüyor: '(showtitles === undefined)'. – Travesty3

+1

Mesajda şunları yazıyor: 'undefined' ile doğrudan karşılaştırmak için '===' kullanın. –

+0

'Beklenmeyen 'typeof' sorunu değil,'! == 'değil. – Blazemonger

cevap

6

Not olarak yazacağınız,

Ancak o ile hiçbir sorunları (showTitles varsayarak ve showSelectGroup var ile deklare edilen) sahiptir Bu genel olarak en iyi uygulama olup olmadığı tartışmalıdır, ancak JSLint ile çalışmasını istiyorsanız, bunu

showTitles = (showTitles !== undefined) ? showTitles : 'Y'; 
+0

Yani tipolojiye ihtiyacım yok mu? Kesin karşılaştırma kullanıyorsanız –

+1

@Marilou. Bununla ilgili olarak, bu konuda araştırma yapmayı ve kendiniz için böyle bir şey yapmak isteyip istemediğinize karar vermeyi ve sadece JSLint'in "tavsiyesini" körü körüne takip etmemeyi tercih ederim. –

+0

Düğümde "ReferenceError: showTitles tanımlı değil" –

8

Ben

var showTitles = showTitles || 'Y'; 
var showSelectGroup = showSelectGroup || 'Y'; 
5

Bu mesaj en yeni en iyi uygulamaları yansıtır. ES5 katı moddan itibaren, undefinedcan no longer be changed global değeri ve doğrudan karşılaştırma daha basit bir kod ve daha hızlıdır. Kısacası, JSLint is aware of all this ve size iyi tavsiyeler veriyor.

Bu durumda typeof showTitles !== 'undefined' değerini showTitles === undefined olarak değiştirin.