为什么以下声明:
(function(){ console.log(this); }).apply(String("hello"));
显示以下输出
String {0: "h", 1: "e", 2: "l", 3: "l", 4: "o", length: 5}
而不是简单:
hello
这种行为是内置于解释器还是有办法检测传递的引用类型?
答案 0 :(得分: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"));
})();
关于'严格模式'的详尽解释以及为什么它将此拳击移到对象中可以在mozilla网站上找到here
答案 1 :(得分:3)
在JavaScript中,this
不能是原始类型;你需要使用.valueOf()
来获取原始值,即:
(function(){ console.log(this.valueOf()); }).apply(String("hello"));
或者像他在答案中提到的那样使用'use strict';
。