function (title, msg) {
var title = title || 'Error';
var msg = msg || 'Error on Request';}
有人能给我个提示吗,这家伙为什么要用var title = title || 'ERROR'?我有时看到它没有var声明也是。
慕容708150
浏览 660回答 3
3回答
饮歌长啸
什么是双管操作符(||)?双管操作员(||)是逻辑OR操作者..在……里面大多数语言它的工作方式如下:如果第一个值是false,它检查第二个值。如果是true,它回来了true如果是false,它回来了false.如果第一个值是true,它总是会回来true无论第二个值是什么。基本上,它的工作原理是这样的:function or(x, y) {
if (x) {
return true;
} else if (y) {
return true;
} else {
return false;
}} | true false ------+---------------true | true true false | true false它在JavaScript中有何不同?JavaScript有点不同,因为它是一个松散型语言..在这种情况下,这意味着您可以使用||具有非布尔值的运算符。虽然这没有任何意义,但是您可以使用这个运算符,例如,一个函数和一个对象:(function(){}) || {}如果值不是布尔值,JavaScript将生成隐式会话到布尔..它的意思是,如果价值是弗尔赛(例如。0, "", null, undefined(另见JavaScript中的所有Falsey值),它将被视为false,否则它会被视为true.所以上面的例子应该给出true因为空函数是真实的。但事实并非如此。它返回空函数。那是因为JavaScript的||操作员不像我刚开始写的那样工作。它的工作方式如下:如果第一个值是法尔西,它回来了第二值.如果第一个值是特鲁西,它回来了第一值.惊讶吗?实际上,它与传统的||接线员。function or(x, y) {
if (x) {
return x;
} else {
return y;
}}如果你传递一个真实的值x,它回来了x这是一个真实的价值。所以如果你在后面使用它if条款:(function(x, y) {
var eitherXorY = x || y;
if (eitherXorY) {
console.log("Either x or y is truthy.");
} else {
console.log("Neither x nor y is truthy");
}}(true/*, undefined*/));你得到"Either x or y is truthy.".如果x是弗尔西eitherXorY会是y..在这种情况下,您将得到"Either x or y is truthy."如果y是真实的,否则你会得到"Neither x nor y is truthy".实际问题现在,当你知道||操作员工作,您可以自己判断出什么是x = x || y刻薄。如果x是真实的,x分配给x,所以实际上什么都没有发生;否则y分配给x..它通常用于定义函数中的默认参数。然而,它通常被认为是不良编程实践,因为它阻止您传递Falsey值(这不一定是必需的)。undefined或null)作为参数。考虑以下例子:function badFunction(/* boolean */flagA) {
flagA = flagA || true;
console.log("flagA is set to " + (flagA ? "true" : "false"));}乍一看是有效的。但是,如果你通过了false如flagA参数(因为它是布尔型的,即可以是true或false)? 它会变成true.在本例中,无法设置flagA到false.更好的办法是明确检查flagA是undefined,就像:function goodFunction(/* boolean */flagA) {
flagA = typeof flagA !== "undefined" ? flagA : true;
console.log("flagA is set to " + (flagA ? "true" : "false"));}虽然它更长,但它总是有效的,而且更容易理解。您也可以使用默认函数参数的ES6语法,但请注意,它在较旧的浏览器(如IE)中不起作用。如果您想支持这些浏览器,您应该使用巴贝尔.另见MDN上的逻辑运算符.