javascript-字符串对象实例在浏览器和nodejs中表现出不同的行为

时间:2018-06-24 18:31:55

标签: javascript node.js string

这不是现实生活中的情况。我试图学习有关js中字符串的更多信息,并遇到以下问题:

var name = new String('sann');

console.log('type of name=' ,typeof name); 
// returns object in nodejs but string in browser
console.log('name instanceof String' ,name instanceof String) 
// returns true in nodejs but false in browser

NodeJS的输出符合我的期望,我对浏览器的输出感到困惑。
这种行为差异的原因是什么?

2 个答案:

答案 0 :(得分:2)

都是对的。

spec说(强调我):

  

String构造函数是%String%内部对象,而   全局对象的String属性的初始值。 致电时   作为构造函数,它将创建并初始化一个新的String对象。   字符串被称为函数而不是构造函数,它   执行类型转换。

因此new String(value)返回一个字符串 object ,而不是一个基元。

无论如何,在浏览器中,全局window对象具有一个名为name的属性,该属性的设置程序会自动将提供的值转换为字符串。

如果包装到函数调用中,则相同的代码段将报告name属于object类型。

(() =>
{
    var name = new String('sann');

    console.log('type of name', typeof name);
    console.log('name instanceof String', name instanceof String);
}
)();

在Node.js中,全局对象不具有该属性,因此name被视为纯值。

答案 1 :(得分:0)

您的问题是有关浏览器中的窗口对象的,在nodejs中不存在。您也可以阅读以下答案来说明您的问题:https://stackoverflow.com/a/36408348/3554534