这个Javascript代码段做什么(jQuery迁移文件的开始)
我在jQueryMigrateV1.1.1中找到了这段代码 我真的想知道两件事: 1)这个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
==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(){/*...*/};