此函数中正在执行的字符串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'))
这不是一个错误的代码。它正在发挥作用。
答案 0 :(得分:1)
它只是向浏览器控制台写了一些内容..但只有当控制台可用并且它具有“日志”功能时才会这样。 前两个条件可以防止第三个条件运行,因此在console.log(..)不存在的情况下不会导致js错误。
答案 1 :(得分:1)
运行时检查第一个条件。如果没有控制台,则会停止检查其他条件,因为false && ...
在每种情况下均为false
。如果有console
运行时检查console.log
是否为函数,如果是,则将某些内容记录到控制台。
这称为short-curcuit-evaluation。否则,运行时将总是尝试执行每个条件,这将导致运行时错误,例如,如果没有控制台对象。
答案 2 :(得分:1)
这只是一种不太可读的写作方式:
if (console && (typeof console.log === "function")) {
console.log('contains called');
}
它(mis)使用的事实是你可以编写一个对结果不做任何事情的表达式,并且一个语句也是一个表达式,所以它可以写在表达式中来做某事。
答案 3 :(得分:0)
它和
一样if (console && (typeof console.log === "function")) {
console.log('contains called');
}
如果某些内容出现错误,解释程序就会停止,因此如果console.log
没有console
函数,则不会调用log
。如果console
甚至不存在,它也不会检查此功能是否存在。