Sé que, de acuerdo con la especificación ECMAScript, los métodos no estrictos tendrán thisArg transformado en el objeto global, si se les pasó null o undefined . Esa es la razón por la que este código registra el objeto de la ventana (en los navegadores) en lugar de nulo:
function x() { console.log(this); } x.call(null); Lo que no entiendo es por qué hacer lo mismo con Object.prototype.toString.call(null) , no transforma null en el objeto global, pero lo mantiene como null y devuelve la cadena [object Null] .
¿Es porque 'use strict' se usa en la implementación predeterminada del método toString ? ¿Todos los métodos integrados se ejecutan en modo estricto?
No pude encontrar nada de eso en la especificación a https://tc39.es/ecma262/multipage/fundamental-objects.html#sec-object.prototype.tostring .
¿Todos los métodos incorporados se ejecutan en modo estricto?
Sí. Lo dice en §10.3 Objetos de función incorporados :
" Las funciones integradas que son objetos de función de ECMAScript deben ser funciones estrictas ".
Esto no solo implica un manejo no descuidado del argumento this , sino también que estas funciones no tienen .arguments , .callee y .caller .