как исправить jslint Подвыражение '&&' должно быть заключено в ошибку parens - PullRequest
4 голосов
/ 27 сентября 2011

Я поставил все в скобки, но приведенный ниже код по-прежнему выдает ошибку в jslint:

Problem at line 5 character 104: The '&&' subexpression should be wrapped in parens.

if ((typeof (c1) === 'string') && (typeof (c2) === 'string') && (c1 !== n...

Как исправить?

"use strict";

function t() {
    var c1, c2;
    if (((typeof (c1)) === 'string') && ((typeof (c2)) === 'string') && (c1 !== null) && (c2 !== null) && ((c1.trim()) === '') || ((c2.trim()) !== '')) {
        return;
    }
}

Ответы [ 3 ]

6 голосов
/ 27 сентября 2011

Он жалуется на форму if(a && b && c || d), потому что (я полагаю) не сразу очевидно, будет ли && или || иметь приоритет.Исправьте это, чтобы выглядеть как if(a && b && (c || d)), и он перестанет жаловаться.

0 голосов
/ 27 сентября 2011

Я вполне уверен, вам нужно следующее :

function t() {
    var c1, c2;
    if (typeof c1 === 'string' && typeof c2 === 'string' && c1 !== null && c2 !== null && (c1.trim() === '' || c2.trim() !== '')) {
        return;
    }
}

Не все знают приоритет булевой логики, поэтому они хотят, чтобы вы заключили операторы c1.trim() || c2.trim() в скобкитак что понятно, как они работают.

В качестве примечания, я думаю, что смешно, что jslint хочет пробелы между моими операторами и моими операндами.Я думаю, что это гораздо яснее, когда нет пробела.

0 голосов
/ 27 сентября 2011

Я думаю, что это нужно:

    if (((typeof (c1) === 'string') && (typeof (c2) === 'string') && (c1 !== null) && (c2 !== null)) && ((c1.trim()) === '') || ((c2.trim()) !== '')) {

обернуть 4-х выраженных выражений слева от && в 100.

...