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 Function对象扩展之延时执行函数
Jul 06 Javascript
javascript动态加载三
Aug 22 Javascript
JS匀速运动演示示例代码
Nov 26 Javascript
使用js判断数组中是否包含某一元素(类似于php中的in_array())
Dec 12 Javascript
JavaScript操作DOM元素的childNodes和children区别
Apr 01 Javascript
JS模式之简单的订阅者和发布者模式完整实例
Jun 30 Javascript
javascript日期验证之输入日期大于等于当前日期
Dec 13 Javascript
在Docker快速部署Node.js应用的详细步骤
Sep 02 Javascript
jQuery表单验证简单示例
Oct 17 Javascript
Less 安装及基本用法
May 05 Javascript
js实现json数组分组合并操作示例
Feb 12 Javascript
详解vue中在循环中使用@mouseenter 和 @mouseleave事件闪烁问题解决方法
Apr 07 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
使ecshop模板中可引用常量的实现方法
2011/06/02 PHP
php中的常用魔术方法总结
2013/08/02 PHP
ThinkPHP之A方法实例讲解
2014/06/20 PHP
PHP开发APP端微信支付功能
2017/02/17 PHP
PHP单例模式实例分析【防继承,防克隆操作】
2019/05/22 PHP
PHP大文件分割分片上传实现代码
2020/12/09 PHP
javascript引用对象的方法代码
2007/08/13 Javascript
jQuery实现自定义下拉列表
2015/01/05 Javascript
详谈js中window.location.search的用法和作用
2017/02/13 Javascript
js前端实现图片懒加载(lazyload)的两种方式
2017/04/24 Javascript
浅谈vue,angular,react数据双向绑定原理分析
2017/11/28 Javascript
vue-cli脚手架引入图片的几种方法总结
2018/03/13 Javascript
electron-vue利用webpack打包实现多页面的入口文件问题
2019/05/12 Javascript
Node.js爬虫如何获取天气和每日问候详解
2019/08/26 Javascript
微信小程序实现打开并下载服务器上面的pdf文件到手机
2019/09/20 Javascript
vue中实现动态生成二维码的方法
2020/02/21 Javascript
es6中Promise 对象基本功能与用法实例分析
2020/02/23 Javascript
Python 中迭代器与生成器实例详解
2017/03/29 Python
Pycharm2017版本设置启动时默认自动打开项目的方法
2018/10/29 Python
python模拟键盘输入 切换键盘布局过程解析
2019/08/15 Python
Python字典中的值为列表或字典的构造实例
2019/12/16 Python
夏威夷灵感服装及配饰:Reyn Spooner
2018/09/18 全球购物
印度服装购物网站:Limeroad
2018/09/26 全球购物
草莓网中国:StrawberryNet中国
2020/08/17 全球购物
简述synchronized和java.util.concurrent.locks.Lock的异同
2014/12/08 面试题
我有一个char * 型指针正巧指向一些int 型变量, 我想跳过它们。 为什么如下的代码((int *)p)++; 不行?
2013/05/09 面试题
物流专业大学生的自我鉴定
2013/11/13 职场文书
体育教育专业毕业生自荐信
2013/11/15 职场文书
读书心得体会
2013/12/28 职场文书
企业管理毕业生求职信范文
2014/03/07 职场文书
行风评议整改报告
2014/11/06 职场文书
青年联谊会致辞
2015/07/31 职场文书
导游词之无锡丝业博物馆
2019/11/12 职场文书
python基础之匿名函数详解
2021/04/21 Python
基于Go语言构建RESTful API服务
2021/07/25 Golang
MySql如何将查询的出来的字段进行转换
2022/06/14 MySQL