Назначение логических операторов на строки в Javascript - PullRequest
0 голосов
/ 05 ноября 2010

Я наткнулся на небольшой фрагмент кода, который, как я надеялся, кто-то может мне объяснить.

Это используется в контексте jqGrid.

onSelectRow: function(id){ 
     if(id && id!==lastsel){ 
          jQuery('#rowed3').jqGrid('restoreRow',lastsel);
          jQuery('#rowed3').jqGrid('editRow',id,true); 
          lastsel=id; 
     } 
}, 

Зачем использовать логические операторы настрока в JavaScript, как показано выше?Это просто ошибка или есть какая-то функциональность, которую я не понимаю?

Код взят из http://trirand.com/blog/jqgrid/rowedex3.html

Полный пример http://trirand.com/blog/jqgrid/jqgrid.html> Редактирование строк> Использование событий

Ответы [ 3 ]

5 голосов
/ 05 ноября 2010

Переменные должны быть численными, хотя условное выражение будет работать в любом случае.

if(id && id !== lastsel)


  1. Первый id говорит, что он должен иметь значение. Значение также должно бытьtruthy.Значение равно truthy, если оно не равно falsy, что означает, что оно не может быть одним из следующих (заимствовано из 11heavens.com ):

    • false
    • null
    • undefined
    • Пустая строка ''
    • Число 0
    • Число NaN (NaN относится к типу)

    Примечание: Вы увидите такие же сравнения с true в других местах JavaScript, особенно для циклов / while:

    /*1*/ while(id){...} // while id is true, do something
    /*2*/ for(;id;){...} // same thing, without the incrementation or variable definition
    

  2. Вторая часть говорит, что id не может быть равен lastsel , который является последним использованным идентификатором.!== является особенным в JavaScript, то есть он должен сравнивать значение и тип, тогда как != просто сравнивает значение:

    • a == b: значение a равно значению b
    • a != b: значение a не равно значению b
    • a === b: значение a равно значению b, а тип a соответствует типуb
    • a !== b: значение a не равно значению b, а тип a не равно типу b

Редактировать


Кроме того, может быть полезно подумать о выражении, если вы увидели его в скобках:
if( (id) && (id !== lastsel) )

1 голос
/ 05 ноября 2010

Ну, почему бы и нет?

(id) && (id !== lastsel)    // parentheses added for logical emphasis

Это говорит if (id is trueish) and (not equal to lastsel). «Trueish» означает, что это не false, undefined или что-либо еще falsy. if (id) эквивалентно if (id == true). id не обязательно должно быть строкой (и, как отмечают комментарии, вероятно, никогда не будет), и эта проверка гарантирует, что это не то, чем не должно быть Он проверяет переменную , а не строку.

0 голосов
/ 05 ноября 2010

Итак, это говорит о том, что id должен быть определен, а не равен lastsel.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...