javascript - 数字()与新数字()?

标签 javascript object prototype

<分区>

我试图理解编写 m = Number() 之间的区别(这导致 typeof m 评估为 "number" ) vs m = new Number()(导致 typeof m 评估为 “object”)。

无论哪种方式,我都希望它是一个对象。我只是在胡闹,我向 Number 原型(prototype)添加了一个 .helloWorld() 方法,我能够在 m 上访问它不管我用哪种方法来实例化它。

这里有什么区别?我在编写 Number()new Number() 之间有什么不同?为什么一个是对象,而另一个是数字

最佳答案

Number()本身返回一个数字原语。当您调用 new Number()您收到一个对象的新实例,它表示 Number的(relevant ES5 spec)。

当您调用基元上的属性时,基元会自动装箱(就像在 Java 中一样)到该对象的一个​​实例,这就是让您调用 helloWorld() 的原因。在objectnumber .

但是,试试这个;

var x = Number(5);
x.bar = function (x) { alert(x); };
x.bar("hello");

var y = new Number(5);
y.bar = function (x) { alert(x); };
y.bar("hello");

您会看到后者有效,而前者无效;首先,number被自动装箱到一个数字,bar方法被添加到它(对象)。当您调用 x.bar()您正在创建一个 自动装箱号码,bar不存在于。

在后者中,您要添加 bar该 Number 实例的方法,它的行为与任何其他 Object 实例一样,因此它会在对象的整个生命周期中持续存在。

关于javascript - 数字()与新数字()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20734404/

相关文章:

javascript - 检查一个字符串的任何字符是否在另一个字符串javascript中的最佳方法

javascript - jQuery - 如果选择选项值等于数据添加类

java - 这个 "method prototype"实际上在这个 Java 源代码中是什么?

javascript - 如何优化我的算法以使用子字符串进行搜索?

javascript - 如何禁用原型(prototype)中的输入元素?

javascript - JS原型(prototype)返回原型(prototype)代码

javascript - Chrome 扩展程序中弹出窗口关闭后记住数组

javascript - 使用站点范围与本地页面脚本时可能存在 JavaScript 框架版本冲突

java - 通过对象在静态方法上使用非静态变量? java

javascript - 该嵌入 HTML 的对象不会在 IE 中呈现