使用'thisArg'和'use strict'的Nodejs方法; 问题

 mobiledu2502891413 发布于 2023-01-16 15:59

我在Fedora 19上安装了节点v0.10.28以及V8 v3.14.5.9.我遇到的问题是带有thisArg可选参数的方法,比如Array.prototype.forEach.

如果我在Chromium v​​33或Firefox v28上执行以下代码 - jsFiddle

var y = [1, 2, 3];

y.forEach(function (element) {
    console.log(this);
}, 'hej');

我得到了一个输出

String {0: "h", 1: "e", 2: "j", length: 3}
String {0: "h", 1: "e", 2: "j", length: 3}
String {0: "h", 1: "e", 2: "j", length: 3}

然后相同的代码,但在严格的模式 - jsFiddle

var y = [1, 2, 3];

y.forEach(function (element) {
    'use strict';
    console.log(this);
}, 'hej');

我得到一个输出

hej
hej
hej

根据ECMA5规范sec-function.prototype.call,这些是我期望的结果.

thisArg值未经修改即作为此值传递.这是对版本3的更改,其中未定义或null thisArg替换为全局对象,ToObject应用于所有其他值,并将结果作为此值传递.即使thisArg未经修改就通过,非严格模式函数在进入函数时仍会执行这些转换.

例如sec-array.prototype.foreach

如果提供了thisArg参数,则每次调用callbackfn时它都将用作此值.如果未提供,则使用undefined.

和相关的伪代码

Let funcResult be the result of calling the [[Call]] internal method of callbackfn with T as thisArgument and a List containing kValue, k, and O as argumentsList.

但是,在节点上,上述两个片段都会返回

{ '0': 'h', '1': 'e', '2': 'j' }
{ '0': 'h', '1': 'e', '2': 'j' }
{ '0': 'h', '1': 'e', '2': 'j' }

任何人都可以确认这是否是我的节点环境的问题,或者这是否与节点有关?

更新:只是为了确认,在两种情况下都typeof this返回节点object.

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有