2016-12-13 11 views
1

Я использую это "!!" для сравнения с "undefined". Однако есть ли другой способ сделать это?Как можно избежать! сравнение в JavaScript?

isWidgetTemplatesLoaded: function(widgetName) { 
      return !!templates[widgetName]; 
} 

Благодаря

+0

TYPEOF шаблоны [widgetName]! == "неопределенными" – Lain

+0

'!!' преобразует значение 'шаблонов [widgetName]' в булево как будто 'булевых (шаблоны [widgetName])'. Как 'false == undefined' лучше прямого сравнения, чем в' templates [widgetName] == undefined'? – RobG

ответ

0

Вы можете использовать typeof оператор

typeof templates[widgetName]; 

еще вы можете также использовать как этот

if (templates[widgetName] === undefined) { 
    // rest of code 
} 
else { 
    // rest of code 
} 
+0

Возможно, вы только что отредактировали свой первый ответ ... – RobG

+0

Спасибо. Будет ли это иметь тот же эффект? –

1

Вы можете использовать TypeOf для проверки не определено:

(typeof templates[widgetName] !== 'undefined') 

typeof всегда возвращает строку. Он возвращает «undefined», если значение переменной не определено или переменная не существует.

0

Для проверки undefined вы можете просто использовать не-преобразования равных/различные операторы:

if (x !== undefined) { ... } 
if (y === undefined) { ... } 

к сведению, однако, что это не имеет тот же смысл !!. Например, двойное отрицание возвращает true даже для false, null, 0 или "", несмотря на то, что эти значения не являются undefined.

Кстати в JavaScript, вы должны в основном всегда использование === и !== вместо == и !=, если вам действительно не нужны сумасшедший неявного преобразования, что равенство/разные операторы делают (и никто не нуждается в этом). Хорошие редакторы Javascript предупредит вас о любом использовании == или !=, поскольку они просто скрывают ошибки.

В специфике вашего кода ставит под сомнение !! логика кажется неправильным на философском уровне, потому что пустой шаблон может быть "" и эта функция будет сказать, что шаблон не был загружен, а вместо этого он был загружен и просто случается пустую строку.

+0

Возможно, это потому, что я пришел из Java-мира, но меня раздражает то, что это * !! * –

+0

@stackman: на самом деле писать код типа 'x! == undefined' намного лучше (с единственной досадой, которая может кто-то ожидает, что вы будете лечить 'null' так же, как' undefined'). К сожалению, Javascript имеет как «null», так и «undefined», и нет тривиального способа проверить только для них обоих, потому что также '0', а пустая строка -« ложь ». – 6502

0

Вы можете использовать оператор in, если знаете, если свойство существует с некоторым значением, кроме undefined.

return widgetName in templates;