1

console && (typeof console.log === "function") && console.log('contains called');此函数中的字符串在做什么:

(function ($) {
$.validator.addMethod('contains', function (value, element, param) {
    console && (typeof console.log === "function") && console.log('contains called');
    if (this.optional(element)) { return true; } // let required rule deal with this.

    var pattern = new RegExp('' + param, "gi");
    return value && ('' + value).match(pattern);
}, "Part of the word is invalid");

$.validator.unobtrusive.adapters.add('contains', function (options) {
    var element = options.element,
            message = options.message;
    options.rules['contains'] = $(element).attr('data-val-contains-word');
    if (options.message) {
        options.messages['contains'] = options.message;
    }
});
})(jQuery);

我会理解该字符串是否像: var var1 = console && (typeof console.log === "function") && console.log('contains called');

或喜欢:if(console && (typeof console.log === "function") && console.log('contains called'))

这不是错误的代码。它正在工作。

4

4 回答 4

1

它只是向浏览器控制台写入一些内容。但前提是该控制台可用并且具有“日志”功能。前两个条件可以阻止第三个条件运行,因此在 console.log(..) 不存在的情况下不会导致 js 错误。

于 2013-02-09T10:20:25.723 回答
1

运行时检查第一个条件。如果没有控制台,它将停止检查其他条件,因为false && ...在任何情况下都是false。如果存在,则console运行时检查是否console.log是函数,如果是,则将某些内容记录到控制台。这称为短期评估。否则,运行时将始终尝试执行每个条件,如果没有控制台对象,则会导致运行时错误。

于 2013-02-09T10:23:03.393 回答
1

这只是一种可读性较差的写作方式:

if (console && (typeof console.log === "function")) {
  console.log('contains called');
}

它(错误)使用了这样一个事实,即您可以编写一个不对结果做任何事情的表达式,并且语句也是一个表达式,因此可以将它写在表达式中来做某事。

于 2013-02-09T10:32:13.983 回答
0

它的作用与

if (console && (typeof console.log === "function")) {
    console.log('contains called');
}

一旦某些东西是假的,解释器就会停止,所以console.log如果console没有log函数就不会被调用。console如果甚至不存在,它也不会检查此功能是否存在。

于 2013-02-09T10:36:17.130 回答