Javascript为空
这是用jQuery编写的一个非常好的函数,用于确定url字段的值: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
$.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'));