Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript为空_Javascript_Jquery_Url - Fatal编程技术网

Javascript为空

Javascript为空,javascript,jquery,url,Javascript,Jquery,Url,这是用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 $.ur

这是用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

我想添加一个条件来测试null,但这看起来有点笨拙:

if (results == null) {
    return 0;
} else {
    return results[1] || 0;
}
问:完成上述if/then语句的优雅方式是什么

return results == null ? 0 : ( results[1] || 0 );
但您可能需要检查结果是否为数组。数组是Object类型的,因此您需要

所以你的代码变成了

if (typeOf(results)==='array'){
      return results[1];
}
else
{
      return 0;
}
你可以试试这个:

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

最简洁的解决方案是更改
返回结果[1]| | 0
返回(结果和结果[1])| | 0

return (results||0) && results[1] || 0;

&&运算符充当警卫,如果falsy,则返回0 if结果;如果truthy,则返回最右边的部分。

所有提到的解决方案都是合法的,但如果我们谈论的是优雅,那么我将介绍以下示例:

//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函数有助于提高代码的可读性。

我更喜欢这种样式

(results || [, 0]) [1]

也可以使用not运算符。它将检查变量是否为null,或者如果是字符串,则检查变量是否为空。它使您的代码更紧凑,更易于阅读

例如:

var pass = "";
if(!pass)
    return false;
else
    return true;
这将返回false,因为字符串为空。如果变量pass为null,它也将返回false

为什么不试试
.test()
。。。尝试其最佳布尔值(true或false):

教程:
我正在使用这个函数

function isNull() {
    for (var i = 0; i < arguments.length; i++) {
        if (
            typeof arguments[i] !== 'undefined'
            && arguments[i] !== undefined
            && arguments[i] != null
            && arguments[i] != NaN
            && arguments[i] 
        ) return arguments[i];
      }
}

@DDaviesBrackett:它不:js>results=null;空js>结果[1]| | 0;typein:2:TypeError:results没有属性好吧,看起来你是先回答的,所以你得到了我的支持票。再想一想,我不确定与null的比较是否是最可读的方法,我想我更喜欢像return results instanceof Array这样的方法?(结果[1]| | 0):0如果我返回结果[1]| | 0不需要parens,那是默认的优先级,那么
结果和结果[1]| | 0
。对Phillip来说太晚了,但我会咬一口:&&是短路”和“操作符lol,我正要问确切问题的那段代码。3年后,
结果[1]
的测试将是不必要的,因为如果
结果
为非空,则表示regexp成功,这意味着还找到了第一个捕获的组。所以你只需要
结果?结果[1]:0
@Brad什么是(结果[1]| | 0)?我以前没有见过。它是“results”中索引位置1处的对象或值0。Brad,请尝试使用
。test()
是最好的。这并不能提供问题的答案。若要批评或要求作者澄清,请在其帖子下方留下评论。这确实为问题提供了明确的答案。这不是批评或要求澄清。在什么意义上这不是一个答案?这是一个我一直用来处理OP提出的精确问题的结构,即如何简洁地处理来自
RegExp#exec
null
结果。我最喜欢这个答案,因为我找不到曲解它的方法,重要的是,默认答案(0)只指定了一次。当一个特定的幻数出现在多个地方时,会出现许多编码错误。您刚刚重写了OP提供的代码,以使用三元运算符,而不是
if
//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;
}
(results || [, 0]) [1]
var pass = "";
if(!pass)
    return false;
else
    return true;
$.urlParam = function(name){
    var results = new RegExp('[\\?&]' + name + '=([^&#]*)');
    return results.test(window.location.href);
}
function isNull() {
    for (var i = 0; i < arguments.length; i++) {
        if (
            typeof arguments[i] !== 'undefined'
            && arguments[i] !== undefined
            && arguments[i] != null
            && arguments[i] != NaN
            && arguments[i] 
        ) return arguments[i];
      }
}
console.log(isNull(null, null, undefined, 'Target'));