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

What is happening in this JavaScript ternary operator?

本文关键字:运算符 发生了 什么 三元 JavaScript 这个      更新时间:2023-09-26

此函数创建&存储一个cookie,在这里它将访问者的名称存储在cookie变量中。根据来源

函数的参数包含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);
    }
  }
}

我很感激任何提示或建议。

换行,这是整行:

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

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

要了解有关cookie的更多信息,请使用Mozilla MDN而不是w3schools。这种if语句是条件运算符

应该是这样的吗?

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

三进制的假部分在最后有一个换行符。我想应该是这样的:

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

而不是:

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

发布的代码中似乎有一个错误的换行符。

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(双等于,因此它被强制,这意味着未定义的空字符串或整数0也将失败),则过期字符串将不会被连接。如果给定了过期日期,它会将";expires="+exdate.toUTCString()附加到cookie字符串中。