Что происходит в этом троичном операторе JavaScript? - PullRequest
0 голосов
/ 26 марта 2012

Эта функция создает и сохраняет куки, и здесь она сохраняет имя посетителя в переменной куки. По данным источника

Параметры функции содержат имя куки, значение файла cookie и количество дней до его истечения.

В функции мы сначала конвертируем количество дней в действительное date, затем мы добавляем количество дней до истечения срока действия 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 ]

4 голосов
/ 26 марта 2012

Строка завернута, вот полная строка:

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

это означает, что если параметр exdays не был указан (exdays==null), то добавить пробел (""), иначе добавить ";expires=" плюс дату (exdate) в виде строки, используя toUTCString ()

Чтобы узнать больше о файлах cookie , используйте Mozilla MDN вместо w3schools . Этот вид if оператора является условным оператором

2 голосов
/ 26 марта 2012

Должно ли это быть что-то вроде этого?

var c_value=escape(value) + (exdays==null) ? "True Part" : "False Part";
1 голос
/ 26 марта 2012

Похоже, что в опубликованном коде произошел плохой разрыв строки.

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.

1 голос
/ 26 марта 2012

Ложная часть троичной имеет разрыв строки в самом конце.Я думаю, это должно быть так:

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

вместо:

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