javascript - javascript - 字符串对象实例在浏览器和 nodejs 中表现出不同的行为
问题描述
这不是现实生活中的场景。我正在尝试更多地了解 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 的输出符合我的预期,浏览器的输出让我很困惑。
这种行为差异的原因是什么?
解决方案
两者都是对的。
规范说(强调我的):
String 构造函数是 %String% 内在对象和全局对象的 String 属性的初始值。当作为构造函数调用时,它会创建并初始化一个新的 String 对象。当 String 作为函数而不是构造函数调用时,它会执行类型转换。
所以new String(value)
返回一个字符串对象而不是一个原语。
无论如何,在浏览器中,全局window
对象有一个名为 的属性name
,它的设置器会自动将提供的值转换为字符串。
相同的片段,如果包装到函数调用中,报告name
为 type object
,如预期的那样。
(() =>
{
var name = new String('sann');
console.log('type of name', typeof name);
console.log('name instanceof String', name instanceof String);
}
)();
在 Node.js 中,全局对象没有该属性,因此name
被视为普通值。
推荐阅读
- xslt - XSLT 1.0 GROUPING 类似于 XLST 2.0 中的 for-each-group
- python - 在 Python 中训练决策树模型时出现类型错误?
- python - 使用 Python 的多处理并行化简单函数
- java - 如何计算两个 LocalTime 之间的差异并保存在要保存在银行中的变量中?
- android - Android - 在 ConcatAdapter 上拖放
- angular - 从 Angular 9 升级到 11 会阻止 router.navigate 加载新组件
- python - Scrapy 在文件中保存 200 个带有空项目的状态 url
- go - 如何在golang中制作struct类型的队列
- javascript - 计算对象列表的函数
- spring - 生菜反应连接未建立