Javascript console.log是否处理';这';不同地
为什么会有以下声明:Javascript console.log是否处理';这';不同地,javascript,console.log,Javascript,Console.log,为什么会有以下声明: (function(){ console.log(this); }).apply(String("hello")); 显示以下输出 String {0: "h", 1: "e", 2: "l", 3: "l", 4: "o", length: 5} 而不是简单的: hello 这种行为是内置于解释器中的,还是有办法检测传递的引用类型?函数的输出是对象而不是字符串,原因是默认情况下javascript“this”对象总是强制为对象 但是,如果您使用带有“use str
(function(){ console.log(this); }).apply(String("hello"));
显示以下输出
String {0: "h", 1: "e", 2: "l", 3: "l", 4: "o", length: 5}
而不是简单的:
hello
这种行为是内置于解释器中的,还是有办法检测传递的引用类型?函数的输出是对象而不是字符串,原因是默认情况下javascript“this”对象总是强制为对象 但是,如果您使用带有“use strict”的严格格式的javascript,那么这将被禁用,并且您可以得到预期的结果
// wrapped in a function to allow copy paste into console
(function() {
'use strict';
(function(){ console.log(this); }).apply(String("hello"));
})();
关于“严格模式”以及为什么它会删除对对象的装箱的更全面的解释可以在mozilla站点上找到,
这个不能是一个基本类型;您需要使用来获取原语值,即:
(function(){ console.log(this.valueOf()); }).apply(String("hello"));
或使用“使用严格”代码>就像他在回答中提到的那样。字符串是如何被强制/提升为对象的?我是否可以手动(在JS代码中)实现同样的效果?任何其他有趣的副作用(例如,此对象字符串的行为与您期望的字符串不同的情况)?字符串、数字等实际上总是JavaScript中的对象。例如,它们具有如上所示的属性。如果您从一开始就想要一个字符串对象(记录时看起来像一个对象),那么使用'new'关键字(new String(“hello”);)作为行为-除了记录之外,它的行为应该与任何其他javascript字符串一样(尽管我对这一部分没有100%的信心)