例如,如果我想在p
元素上显示当前日期:
$("p").html('Now is '+Date()); // good
$("p").html('Now is '+new Date()); // good
$("p").html(Date()); // good
$("p").html(new Date()); // bad
为什么最后一个语句不显示当前日期,但第二个语句有效?
答案 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
无权访问method1
或method2
。这可能看起来不是什么大问题,但想象一下创建一个新的Date
对象而无法访问其方法!
TL; DR:
Sans new
,ledéluge。