console.log对待'this'有何不同?

hon*_*man 5 javascript console.log

为什么以下声明:

(function(){ console.log(this); }).apply(String("hello"));
Run Code Online (Sandbox Code Playgroud)

显示以下输出

String {0: "h", 1: "e", 2: "l", 3: "l", 4: "o", length: 5} 
Run Code Online (Sandbox Code Playgroud)

而不是一个简单的:

hello
Run Code Online (Sandbox Code Playgroud)

这种行为是内置于解释器还是有办法检测传递的引用类型?

Dea*_*ady 6

你得到一个对象而不是一个字符串作为你的函数输出的原因是默认情况下javascript'this'对象总是被强制为一个对象.

但是,如果您使用严格格式的javascript并使用'use strict',那么这将被禁用,您可以获得您期望的结果.

// wrapped in a function to allow copy paste into console
(function() {
   'use strict';

   (function(){ console.log(this); }).apply(String("hello")); 
})();
Run Code Online (Sandbox Code Playgroud)

关于'严格模式'的更全面的解释以及为什么它将此拳击移到对象中可以在mozilla网站上找到