Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
这个Javascript代码段做什么(jQuery迁移文件的开始)_Javascript_Jquery - Fatal编程技术网

这个Javascript代码段做什么(jQuery迁移文件的开始)

这个Javascript代码段做什么(jQuery迁移文件的开始),javascript,jquery,Javascript,Jquery,我在jQueryMigrateV1.1.1中找到了这段代码 我真的想知道两件事: 1) ==void 0是什么意思 2) 为什么这些条件后面跟一个逗号?我的测试告诉我它总是会被执行的 这不是我真正需要知道的,但我真的很感兴趣,因为我认为我知道关于JS的一切 void 0将产生未定义的,对于任何X,void X;它较短,不能像undefinedcan那样重新定义。因此==void 0将jQuery.migrateMate与未定义的进行比较 !0为真 因此,jQuery.migrateMate==v

我在jQueryMigrateV1.1.1中找到了这段代码

我真的想知道两件事:

1)
==void 0
是什么意思

2) 为什么这些条件后面跟一个逗号?我的测试告诉我它总是会被执行的


这不是我真正需要知道的,但我真的很感兴趣,因为我认为我知道关于JS的一切

void 0
将产生
未定义的
,对于任何
X
void X
;它较短,不能像
undefined
can那样重新定义。因此
==void 0
jQuery.migrateMate
未定义的
进行比较

!0

因此,
jQuery.migrateMate==void 0&&(jQuery.migrateMate=!0)
的“翻译”是:

if (jQuery.migrateMute === undefined) {
  jQuery.migrateMute = true;
}

然后逗号后面的内容独立于此执行。

要总结所有注释和答案

  • 默认情况下,
    void 0
    void(0)
    只是
    undefined
    的值。这就是为什么您可以使用它而不是未定义的,以确保它不会被某人覆盖。

  • 关于这个结构,这意味着:

    if(x){y=z};function(){/*...*/};
    

  • 检查此线程:请参阅用于此代码的最小值uglify2。在该页面上搜索“void 0”。这可以通过查看源代码轻松查看。您忘记了
    类型的
    。OPs代码是最小化的版本,这是一个共识,所以他的问题实际上是“最小化者对JS代码做了什么”…@AlexanderSuraphel尝试重新定义“未定义的”,例如通过JS中的
    undefined=42
    。作品尝试使用
    void
    -无效。看,这就是为什么最小化程序使用
    undefined
    void 0
    @AlexanderSuraphel的转换:我的意思是,正如我在前面的评论中所说的那样,
    undefined=“defined”
    是有效的JavaScript,它会破坏很多代码。如果你做了
    undefined=true
    ,然后又做了
    If(foo==undefined)
    ,怪事就会接踵而至。如果您使用
    If(foo==void 8)
    ,它是万无一失的-它将始终针对值
    未定义的
    ,而不是全局变量
    未定义的
    @sSource:对于变量,因为变量可以声明并保持未定义(
    var foo
    ),或者指定为未定义的(
    var foo=5;foo=undefined
    ). 而且,您可能正在测试从不引发此错误的属性:
    如果(xxobjectxx.xxfoobarxx==undefined).
    将始终工作而不会引发错误。@PaulS:您是正确的,
    undefined
    自ES5以来是不可变的。但是,编译器不一定知道其编译的代码将在兼容的环境中执行。关于全球其他地方都很危险的观点很好。例如,您仍然可以在IE8中重新定义
    未定义的
    if(x){y=z};function(){/*...*/};