Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 什么时候*不*使用内置的新工作?_Javascript_Standards - Fatal编程技术网

Javascript 什么时候*不*使用内置的新工作?

Javascript 什么时候*不*使用内置的新工作?,javascript,standards,Javascript,Standards,在使用内置JavaScript对象和构造函数时,我注意到有点奇怪 有时,可以通过调用构造函数而不使用new来获取新对象。例如: > new Array(1,2,3,4) [1, 2, 3, 4] > Array(1,2,3,4) [1, 2, 3, 4] 但有时这不起作用: > Date() "Thu Jun 05 2014 00:28:10 GMT-0600 (CST)" > new Date() Date 2014-06-05T06:28:10.876Z ECMA

在使用内置JavaScript对象和构造函数时,我注意到有点奇怪

有时,可以通过调用构造函数而不使用
new
来获取新对象。例如:

> new Array(1,2,3,4)
[1, 2, 3, 4]
> Array(1,2,3,4)
[1, 2, 3, 4]
但有时这不起作用:

> Date()
"Thu Jun 05 2014 00:28:10 GMT-0600 (CST)"
> new Date()
Date 2014-06-05T06:28:10.876Z

ECMAScript规范中是否定义了非新构造函数内置函数的行为?注意,这种行为实际上是有用的;我可以通过调用
array.apply(arr)
来创建数组的非稀疏副本,但只有在跨平台的情况下,我才会觉得这样做很舒服。

本机方法的行为取决于EcmaScript规范

对于
日期
来说:

当Date作为函数而不是构造函数调用时,它 返回表示当前时间(UTC)的字符串

注意:函数调用日期(…)与具有相同参数的对象创建表达式new Date(…)不等效

对于
数组

当数组作为函数而不是构造函数调用时,它 创建并初始化新的数组对象

因此函数调用 数组(…)等同于对象创建表达式new Array(…) 用同样的论点

因此,它在使用或不使用
new
关键字的情况下如何工作完全取决于您使用的方法,以及在不使用new关键字的情况下调用规范时会发生什么

例如,数学对象再次不同

数学对象没有[[Construction]]内部属性;它是 无法将Math对象用作具有新 接线员

是的,(我使用5.1版作为参考)确实定义了在使用或不使用
new
关键字调用对象构造函数时,对象构造函数的行为

对于
阵列

:

Array
作为函数而不是构造函数调用时,它会创建并初始化一个新的数组对象。因此,函数调用
Array(…)
相当于具有相同参数的对象创建表达式
newarray(…)

:

Array
作为
new
表达式的一部分被调用时,它是一个构造函数:它初始化新创建的对象

对于日期:

:

Date
作为函数而不是构造函数调用时,它返回一个表示当前时间(UTC)的字符串。
函数调用
Date(…)
与具有相同参数的对象创建表达式
new Date(…)
不同

:

Date
作为新表达式的一部分被调用时,它是一个构造函数:它初始化新创建的对象


另一个回答类似的相关问题:注意:
Date()==new Date().toString()
的行为在文档中->
“注意,JavaScript日期对象只能通过调用JavaScript日期作为构造函数来实例化:将其作为常规函数调用(即不使用新操作符)将返回字符串而不是日期对象;与其他JavaScript对象类型不同,JavaScript日期对象没有文字语法。”
对于数组,它不同,即使在调用时没有new关键字,它也会返回一个新实例,因此,这取决于您使用的本机方法。如果您可以将所有内置函数的行为添加为函数与构造函数(没有那么多),那就太好了。对规范的引用非常好。@user3629476-有日期、数组、对象、字符串、数字、布尔值、数学、RegExp等。有很多,规范说明了一切,我不确定复制每个内置的规范是否会使答案更好?更不用说,你必须更新ES6、ES7等的答案。