Mar*_*son 32 javascript null this
我有一个功能如下:
doSomething: function () {
var parent = null;
if (this === null) {
parent = 'some default value';
} else {
parent = this.SomeValue();
}
}
Run Code Online (Sandbox Code Playgroud)
父母可以设置为'某个默认值'还是检查null是多余的?
或者,如果我使用限制较少的情况怎么办:
doSomething: function () {
var parent = this ? this.SomeValue() : 'some default value';
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下父母可以设置为"某个默认值"吗?
pim*_*vdb 37
在非严格模式下,this经历了一次Object(this)变革,所以它始终是真实的.唯一的例外是null和undefined其映射到全局对象.所以this从来都不null是真的,这两个检查都是多余的.
然而,在严格模式下,this可以是任何东西,在这种情况下你必须要小心.但是你必须自己选择严格的模式,所以如果你不这样做,就不用担心了.
(function() { return this; }).call(null); // global object
(function() { "use strict"; return this; }).call(null); // null
Run Code Online (Sandbox Code Playgroud)
ES5 的规格说:
thisArg值未经修改即作为此值传递.这是对第3版的更改,其中未定义或null thisArg将替换为全局对象,ToObject将应用于所有其他值,并且结果将作为此值传递.