javascript中new Object 该不该加括号?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javascript中new Object 该不该加括号?相关的知识,希望对你有一定的参考价值。

印象中JS实例化对象是要加括号的,但是在看其它一些程序时,发现不加也能正常运行。
最近看到一段程序,有的地方写 var img=new Image();是加了括号的,同一个程序中,后面又出现了 var clickLoc=new Object; 没加括号,程序运行正常。
请问加或不加括号,有什么区别吗?

let o1 = new Object;

let o2 = new Object(); 

这样运行的 是一样,  用 o1,o2 调用里面的方法 一样

o1.toString() // "[object Object]"

o2.toString() // "[object Object]"

但是

new Object.toString()  // 报错

new Object().toString()  // "[object Object]"

追问

为什么报错?还是有区别咯?

追答

还又啥区别,俺也不知道牙,没查到

参考技术A

‍你只需要查询new的语法即可得到如下描述:

语法

new constructor[([arguments])]

参数

    constructor

    一个指定对象实例的类型的类或函数。

    arguments

    一个用于被 constructor 调用的参数列表。

其中[]表示可选.所以综上,有无括号对于实例化对象来说没有区别.

JavaScript中object和Object有什么区别

JavaScript中object和Object有什么区别,为什么用typeof检测对象,返回object,而用instanceof 必须要接Object呢

技术分享

 

————————————————————————————————————————————————————————————————————

 

这个问题和我之前遇到的问题非常相似,我认为这里有两个问题需要解决,一个是运算符new的作用机制,一个是function关键字和Funtion内置对象之间的区别。看了一些前辈的博客和标准,这里帮提问者总结一下。
1.new
new运算符的作用是创建一个对象实例。这个对象可以是用户自定义的,也可以是带构造函数的一些系统自带的对象。如果 new 表达式之后的构造函数返回的不是JavaScript内置的引用对象(Object,String等)new会创建一个匿名对象并返回;如果是内置引用对象或者原始类型就会覆盖匿名对象。(无 return 时其实为 return 原始类型 undefined)。new运算符详细介绍
2.function和Function
ECMAScript 的Function实际上就是一个功能完整的对象。而function这个关键字是用来创建所有对象的构造函数或者普通函数要用的关键字ECMAScript如何定义类和对象,提问者var a=new function(){}实际上是用构造函数的方法创建了一个匿名对象的实例,而并不是系统内置对象Function的实例,所以a instanceof Function返回falsetypeof返回"object"
那么什么时候typeof返回"function"呢?当它真的是一个函数名的时候。

 
`function a (){}
//undefined
typeof a
//"function"`




typeof 和 instanceof 这两个功能就是完全不一样的运算符。typeof 是为了检查数据类型,instanceof是为了看一个变量是否是某个对象的实例。

typeof 的目的,是检查数据类型,而它的输出,非常确定的只有如下几个:

  • undefined

  • object

  • boolean

  • number

  • string

  • function

  • symbol(新)

typeof 返回的结果,是一个字符串。只要检查的变量是一个对象,或者是 Null,那它就会返回 object,这当然不够精确,所以有了 instanceof

因为不存在 object 这个对象,所以会提示你 object is not defined 。而 Object 是 JavaScript 中一个重要的对象,其它对象都是基于它的,包括你创建的函数。你创建 a 的时候,使用的是 new 关键字,这相当于是一个 Function 引用类型的实例。所以 a instanceof Object 就会是 true

 

区别是Object 是一种对象类型, "object"是一个字符串, 你不定义的话没有意义。











以上是关于javascript中new Object 该不该加括号?的主要内容,如果未能解决你的问题,请参考以下文章

关于JavaScript new 的一些疑问

JavaScript对象

JavaScript 继承:Object.create 与 new

JavaScript实现new操作符

JavaScript实现new操作符

Javascript“var obj = new Object”在C#中的等价物