[英]Why does (function() { return this; }).call('string literal') return [String: 'string literal'] instead of 'string literal'?
这是我在尝试使用JS时的最新发现:
(function() { return this; }).call('string literal');
// => [String: 'string literal'] in V8
// => String { "string literal" } in FF
在执行以下操作时我偶然发现了这一点:
(function() { return this === 'string literal'; }).call('string literal');
// => false
谁能告诉我,为什么this
里面的功能不完全是被作为第一个参数传递给call
?
编辑1
JavaScript中的字符串原语和String对象有什么区别? 已被标记为我的问题的可能重复。
虽然这两个问题的答案都与JS如何在Objects中包含原语有关,但我相信这些问题及其答案并不相同。
我的问题是“为什么参数传递给调用并且函数内部的值不同?”而另一个问题是“为什么代码块1比代码块2更快?”
我的问题的正确答案是“因为你没有使用严格模式”而另一个问题的答案与实现ECMAScript的引擎内部访问数据的速度有关。
我希望这个澄清是正确的😅
.call
内部调用[[Call]]
,执行
- 执行OrdinaryCallBindThis(F,calleeContext,thisArgument)。
和OrdinaryCallBindThis
(这将把this
,那将被调用的函数的值),将包装的新this
在非严格模式的对象:
如果thisMode是严格的,那么让thisValue成为thisArgument。
其他,
一种。 如果thisArgument未定义或为null,则...
湾 否则,让这个值得! ToObject(thisArgument)。
在严格模式下,您将看到字符串未包含在对象中:
'use strict'; (function() { console.log(this); console.log(this === 'string literal'); }).call('string literal');
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.