这个JavaScript三元运算符发生了什么?

时间:2012-03-26 14:00:45

标签: javascript cookies ternary-operator

此功能创建&存储一个cookie,这里它将访问者的名字存储在一个cookie变量中。根据{{​​3}}

  

该函数的参数包含cookie的名称,即   cookie的值,以及cookie到期前的天数。

     

在函数中我们首先将天数转换为有效天数   日期,然后我们添加cookie到期之前的天数。   之后我们存储cookie名称,cookie值和到期日期   在document.cookie对象中的日期。

function setCookie(c_name,value,exdays)
{
  var exdate=new Date();
  exdate.setDate(exdate.getDate() + exdays);
  var c_value=escape(value) + 
              ((exdays==null) ? "" : ";expires="+exdate.toUTCString());
  document.cookie=c_name + "=" + c_value;
}

我可以看到日期是如何运作的,但是这部分发生了什么:

var c_value=escape(value) + ((exdays==null) ? "" : "; 

这是调用代码:

function checkCookie()
{
var username=getCookie("username");
if (username!=null && username!="")
  {
  alert("Welcome again " + username);
  }
else 
  {
  username=prompt("Please enter your name:","");
  if (username!=null && username!="")
    {
    setCookie("username",username,365);
    }
  }
}

我感谢任何提示或建议。

4 个答案:

答案 0 :(得分:4)

换行,这是完整的一行:

var c_value=escape(value) + ((exdays==null) ? "" : ";expires="+exdate.toUTCString());

这意味着如果未指定exdays参数(exdays==null),则添加空白(""),否则添加";expires="加上日期(exdate)使用toUTCString()

作为字符串

要详细了解Cookie use Mozilla MDN而不是w3schools。这种if语句是conditional operator

答案 1 :(得分:2)

应该是这样的吗?

var c_value=escape(value) + (exdays==null) ? "True Part" : "False Part";

答案 2 :(得分:1)

三元组的错误部分在最后有一个换行符。我想它应该是这样的:

 var c_value=escape(value) + ((exdays==null) ? "" : "; expires="+exdate.toUTCString());

而不是:

 var c_value=escape(value) + ((exdays==null) ? "" : "; 
     expires="+exdate.toUTCString());

答案 3 :(得分:1)

您发布的代码中似乎存在错误的换行符。

var c_value=escape(value) + ((exdays==null) ? "" : "; 
  expires="+exdate.toUTCString()); // this line should be up after the semicolon

然后会产生:

var c_value=escape(value) + ((exdays==null) ? "" : ";expires="+exdate.toUTCString());

这基本上意味着如果赋予函数的exdays为null(double等于强制,这意味着未定义,空字符串或整数0也会失败)则不会连接到期字符串。如果给出了截止日期,它会将";expires="+exdate.toUTCString()附加到cookie字符串。