【问题标题】:difference between Var and newvar 和 new 的区别
【发布时间】:2017-10-17 03:01:03
【问题描述】:
var a = 10
var b = new Number(10)

console.log(a instanceof Number)
console.log(b instanceof Number)

谁能告诉我上面两个声明和a和b的定义有什么区别。

【问题讨论】:

标签: javascript new-operator var instanceof


【解决方案1】:

明确说明您正在使用new Number(10) 创建一个新号码,会为该号码创建一个新的wrapper object,而简单地将一个数字定义为一个变量会创建一个integer primitive value。因此,您在查看他们的 typeof 时会得到不同的结果:

var a = 10;
var b = new Number(10);

console.log(typeof a);
console.log(typeof b);

希望这会有所帮助! :)

【讨论】:

  • 很确定它创建了一个数字原始值......不过其余的似乎是正确的。
  • 哎呀,我的疏忽:P 已修复 :)
  • 感谢哥们的澄清,但是当我们声明 var a=10 时,我们发现了许多针对变量但没有构造函数的方法。所以你能解释一下吗,javascript中没有整数概念,javascript数字总是存储为双精度浮点数。
【解决方案2】:

第一个创建一个原语。另一个是对象。

Number 对象的主要用途是:

1) 如果参数不能转换为数字,则返回 NaN。

2) 在非构造函数上下文中(即没有 new 运算符),Number 可用于执行类型转换。

reference

理论上有区别,但实际上没有区别。当需要成为对象时,JavaScript 引擎会自动将原语装箱到对象中。

var number = 42;
// calling .toFixed will 'box' the primitive into a number object,
// run the method and then 'unbox' it back to a primitive
console.log( number.toFixed(2) );

我发现的唯一用法是如果你想从构造函数返回一个原语。

function Foo() {
    return 42;
}

var foo = new Foo();
console.log(foo); // foo is instance of Foo

function Bar() {
    return new Number(42);
}

var bar = new Bar();
console.log(bar); // bar is instance of Number

提醒一下

new Number(10) == new Number(10) return false

【讨论】:

    【解决方案3】:

    var 关键字只是一个简单的变量声明。 new 关键字用于生成某种类型的新 object。为了完全理解它们,你需要在一般的编程中研究对象。

    【讨论】:

      【解决方案4】:

      第一个声明类似于原始数据类型。

      在您使用new Number(10) 的第二个声明中,它被视为包装函数或class 以将您的号码保存在object 中。

      要查看实际差异,现在检查两种情况下变量的实际类型:

      console.log(typeof(a)) //should give you "number"
      console.log(typeof(b)) //should give you "object"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-08-02
        • 2019-11-03
        • 1970-01-01
        • 2021-05-07
        • 2011-09-04
        • 2020-11-06
        • 1970-01-01
        相关资源
        最近更新 更多