应用新操作符时有什么区别?

时间:2011-01-29 04:29:03

标签: javascript jquery

例如,如果我想在p元素上显示当前日期:

$("p").html('Now is '+Date()); // good
$("p").html('Now is '+new Date()); // good
$("p").html(Date()); // good
$("p").html(new Date()); // bad

为什么最后一个语句不显示当前日期,但第二个语句有效?

3 个答案:

答案 0 :(得分:8)

在第一行和第三行Date()返回当前日期的字符串。

在第二个中,当您将Date对象添加到字符串时,它必须将日期对象转换为字符串,以便您看到所期望的内容。

在最后一行中,它返回一个日期对象,这就是它看起来错误的原因。

要了解有关Date的更多信息,您可能会觉得这很有用:

https://developer.mozilla.org/en/JavaScript/Reference/global_objects/date

答案 1 :(得分:5)

我只想捅这个:

// Javascript解析器检测字符串连接。 Date()转换为字符串(默认)。

("p").html('Now is '+Date());

// Javascript解析器检测字符串连接。 Date()转换为字符串(默认)。

$("p").html('Now is '+new Date());

//默认情况下,通过Date()构造函数的实例转换为字符串。

$("p").html(Date());

// new Date()生成一个对象。将非dom识别的对象插入dom树会引发错误。

$("p").html(new Date());

答案 2 :(得分:1)

答案似乎表明你对字符串连接和Date对象更感兴趣。但是,问题标题表明您更关心JavaScript中new运算符和对象的一般行为。所以这个答案可能完全无关紧要。

但是,对于它的价值,new运算符是告诉构造函数返回一个对象的东西。它是构造函数构造函数的快捷方式。请使用以下代码:

function SomeConstructor(val1, val2) {
    this.val1 = val1;
    this.val2 = val2;
}

var constructed_obj = SomeConstructor('something', 'else');

以上代码将(如果未在严格模式下执行)将值附加到全局对象。哦,哦。

也不好:

SomeConstructor.prototype = {
    method1: function () { ... },
    method2: function () { ... }
};

var constructed_obj = SomeConstructor();

以上constructed_obj 无权访问method1method2 。这可能看起来不是什么大问题,但想象一下创建一个新的Date对象而无法访问其方法!

TL; DR:
Sans new,ledéluge。