在Javascript中,'this'可以为null

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)变革,所以它始终是真实的.唯一的例外是nullundefined其映射到全局对象.所以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将应用于所有其他值,并且结果将作为此值传递.