JavaScript中object和Object的区别(详解)


Posted in Javascript onFebruary 27, 2017

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

JavaScript中object和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返回false,typeof返回"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中object和Object的区别(详解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript取消文本选定的实现代码
Nov 14 Javascript
Jquery Uploadify上传带进度条的简单实例
Feb 12 Javascript
js 判断js函数、变量是否存在的简单示例代码
Mar 04 Javascript
使用jquery选择器如何获取父级元素、同级元素、子元素
May 14 Javascript
吐槽一下我所了解的Node.js
Oct 08 Javascript
JavaScript列表框listbox全选和反选的实现方法
Mar 18 Javascript
最精简的JavaScript实现鼠标拖动效果的方法
May 11 Javascript
浅谈Javascript数组索引
Jul 29 Javascript
原生js更改css样式的两种方式
Mar 15 Javascript
原生JS实现多个小球碰撞反弹效果示例
Jan 31 Javascript
vue watch深度监听对象实现数据联动效果
Aug 16 Javascript
windows实现npm和cnpm安装步骤
Oct 24 Javascript
jQuery使用DataTable实现删除数据后重新加载功能
Feb 27 #Javascript
使用Bootstrap + Vue.js实现添加删除数据示例
Feb 27 #Javascript
关于Sequelize连接查询时inlude中model和association的区别详解
Feb 27 #Javascript
详解Javascript几种跨域方式总结
Feb 27 #Javascript
JavaScript与JQUERY获取元素的宽、高和位置
Feb 26 #Javascript
JavaScript无阻塞加载和defer、async详解
Feb 26 #Javascript
浅谈JavaScript中的apply/call/bind和this的使用
Feb 26 #Javascript
You might like
phpBB BBcode处理的漏洞
2006/10/09 PHP
php jquery 实现新闻标签分类与无刷新分页
2009/12/18 PHP
解析在PHP中使用全局变量的几种方法
2013/06/24 PHP
CodeIgniter CLI模式简介
2014/06/17 PHP
php.ini save_handler 修改不生效的解决办法
2014/07/22 PHP
php数组排序usort、uksort与sort函数用法
2014/11/17 PHP
PHP CURL 多线程操作代码实例
2015/05/13 PHP
js获取单选按钮的数据
2006/11/27 Javascript
js控制框架刷新
2008/08/01 Javascript
跟着Jquery API学Jquery之一 选择器
2010/04/07 Javascript
解析javascript 实用函数的使用详解
2013/05/10 Javascript
js实现倒计时时钟的示例代码
2013/12/17 Javascript
JavaScript中的Web worker多线程API研究
2014/12/06 Javascript
举例详解JavaScript中Promise的使用
2015/06/24 Javascript
解决OneThink中无法异步提交kindeditor文本框中修改后的内容方法
2017/05/05 Javascript
动态加载JavaScript文件的3种方式
2018/05/05 Javascript
jquery实现下载图片功能
2019/07/18 jQuery
js实现的格式化数字和金额功能简单示例
2019/07/30 Javascript
Python 类的继承实例详解
2017/03/25 Python
Python操作mysql数据库实现增删查改功能的方法
2018/01/15 Python
pandas修改DataFrame列名的方法
2018/04/08 Python
Python 多线程不加锁分块读取文件的方法
2018/12/11 Python
Python生成指定数量的优惠码实操内容
2019/06/18 Python
python线程安全及多进程多线程实现方法详解
2019/09/27 Python
使用 Python 处理3万多条数据只要几秒钟
2020/01/19 Python
python函数定义和调用过程详解
2020/02/09 Python
python实现交并比IOU教程
2020/04/16 Python
利用4行Python代码监测每一行程序的运行时间和空间消耗
2020/04/22 Python
浅谈tensorflow 中的图片读取和裁剪方式
2020/06/30 Python
python批量检查两个对应的txt文件的行数是否一致的实例代码
2020/10/31 Python
CSS3实现大小不一的粒子旋转加载动画
2016/04/21 HTML / CSS
俄罗斯旅游网站:Tripadvisor俄罗斯
2017/03/21 全球购物
新领导上任欢迎词
2014/01/13 职场文书
2014年学校团委工作总结
2014/12/20 职场文书
2015年食堂工作总结报告
2015/04/23 职场文书
《有余数的除法》教学反思
2016/02/22 职场文书