2016-03-08 3 views
0

Есть ли вспомогательный метод или аналогичный, в Javascript для isDefined? Я только что нашел это в файле утилиты я унаследовал:Javascript ifDefined вспомогательный метод?

'use strict'; 

var me = { 
    ifDefined   : ifDefined, 
    ifDef    : ifDefined, 
    isDefined   : isDefined, 
    isDef    : isDefined, 
}; 

function isDefined (value) { 
    return (typeof value != 'undefined'); 
} 
function ifDefined (value, defaultValue) { 
    return isDefined(value) ? defaultValue : value; 
} 

module.exports = me; 

Оказывается, автор использует его, чтобы иметь сокращенный метод для typeof проверки:

environment.u = isDef(envInfo.u, environment.u); 
environment.x = isDef(envInfo.x, environment.x); 
environment.s = isDef(envInfo.s, environment.s); 
+0

Что именно вы спрашиваете? Оператор 'typeof' _is_ как вы проверяете, определен ли идентификатор или нет. Вы надеетесь на другое встроенное? Что не так с этими функциями? – Oka

+0

Я спрашиваю, существует ли такой сокращенный метод. Похоже, автор создал этот файл, поэтому у него не было бы 'typeof'-вызовов в его коде. –

+0

Тогда нет, нет встроенного 'isDefined'. Попробуйте найти MDN в следующий раз: [Стандартные встроенные объекты] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects), [Выражения и операторы] (https: // разработчик .mozilla.org/EN-US/Docs/Web/JavaScript/Руководство/Expressions_and_Operators). – Oka

ответ

2

Есть ли вспомогательный метод, или аналогичный, в Javascript для isDefined?

Нет, для этого не существует встроенной функции.

Просто используя value !== undefined или value != null достаточно короткий, он не гарантирует дополнительную функцию полезности. Единственными методами «проверки типов», которые мне известны, являются Array.isArray, isNaN и isFinite (и их эквиваленты Number.is…).

0

Что делает эта функция, так это проверить, не определено ли значение, а если оно есть, возвращает значение по умолчанию. В противном случае возвращается исходное значение. Название несколько вводит в заблуждение, и я не думаю, что есть что-то, что непосредственно встроено в JavaScript, который имитирует функциональность вашей функции ifDefined.

Если то, что вы ищете, чтобы просто проверить, если что-то определяется или нет, используя typeof ненужно - вы можете просто сравнить против глобального undefined объекта:

var x; 
if(x !== undefined){ 
    console.log('this will not run'); 
} 
else{ 
    console.log('this will run'); 
} 

Некоторые дополнительные чтения, если интересно: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined

1

Нет. Если у меня было, для этого я бы не создал файл утилиты. Вы могли бы сэкономить столько же места в вашем коде, используя сокращенную переменной и тройной оператор:

var udef = undefined; 

environment.u = envInfo.u == udef ? environment.u : envInfo.u; 
environment.x = envInfo.x == udef ? environment.x : envInfo.x; 
environment.s = envInfo.s == udef ? environment.s : envInfo.s; 

Для сравнения:

Смежные вопросы