在javascript中使用没有if和var表达式的bool

时间:2013-02-09 10:17:29

标签: javascript

此函数中正在执行的字符串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 个答案:

答案 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甚至不存在,它也不会检查此功能是否存在。