Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/438.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript console.log是否处理';这';不同地_Javascript_Console.log - Fatal编程技术网

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%的信心)