it-swarm.com.ru

Javascript isnull

Это действительно замечательная функция, написанная на jQuery для определения значения поля url:

$.urlParam = function(name){
    var results = new RegExp('[\\?&]' + name + '=([^&#]*)').exec(window.location.href);
    return results[1] || 0;
}

// example.com?someparam=name&otherparam=8&id=6
$.urlParam('someparam'); // name
$.urlParam('id'); // 6
$.urlParam('notavar'); // null

http://snipplr.com/view/11583/retrieve-url-params-with-jquery/

Я хотел бы добавить условие для проверки на нулевое значение, но это выглядит вроде klunky:

if (results == null) {
    return 0;
} else {
    return results[1] || 0;
}

В: Какой элегантный способ выполнить вышеприведенное утверждение if/then?

10
Phillip Senn
return results == null ? 0 : (results[1] || 0);
22
Brad
return results == null ? 0 : ( results[1] || 0 );
10
Rich

наиболее кратким решением было бы изменить return results[1] || 0; на return (results && results[1]) || 0.

3
Dan Davies Brackett

Вы можете попробовать это:

if(typeof(results) == "undefined") { 
    return 0;
} else {
    return results[1] || 0;
}
2
streetparade

Я предпочитаю стиль

(results || [, 0]) [1]
1
user663031
if (typeof(results)!='undefined'){ 
    return results[1];
} else { 
    return 0; 
};

Но вы можете проверить, является ли результаты массивом. Массивы имеют тип Object, поэтому вам понадобится эта функция

function typeOf(value) {
    var s = typeof value;
    if (s === 'object') {
        if (value) {
            if (value instanceof Array) {
                s = 'array';
            }
        } else {
            s = 'null';
        }
    }
    return s;
}

Таким образом, ваш код становится

if (typeOf(results)==='array'){
      return results[1];
}
else
{
      return 0;
}
1
pixeline
return results==null ? 0 : ( results[1] || 0 );
1
Frunsi
return (results||0) && results[1] || 0;

Оператор && выступает в роли охранника и возвращает 0, если результат в случае ложности, и возвращает правую часть, если она верна.

1
Teun D

Почему бы не попробовать .test()? ... Попробуй свой и лучший логический (истина или ложь):

$.urlParam = function(name){
    var results = new RegExp('[\\?&]' + name + '=([^&#]*)');
    return results.test(window.location.href);
}

Учебное пособие:http://www.w3schools.com/jsref/jsref_regexp_test.asp

1
KingRider

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

//function that checks if an object is null
var isNull = function(obj) {
  return obj == null;
}            

if(isNull(results)){
 return 0;
} else {
  return results[1] || 0;
}

Использование функции isNull помогает сделать код более читабельным.

1
Dan Ochiana

Вы также можете использовать не оператор. Он проверит, является ли переменная нулевой или, в случае строки, пустой. Это делает ваш код более компактным и легким для чтения. 

Например:

var pass = "";
if(!pass)
    return false;
else
    return true;

Это вернет false, потому что строка пуста. Также будет возвращено значение false, если переменная pass была нулевой. 

0
Carlos