这不是现实生活中的情况。我试图学习有关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的输出符合我的期望,我对浏览器的输出感到困惑。
这种行为差异的原因是什么?
答案 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