经常见很多文章中说:在js中万物皆对象,但真的万物皆对象吗?答案肯定是否定的

先不说概念性的东西,我们随便定义一些变量,然后打印出他们的类型,看如下代码:

//先定义一些变量;
var iNum = 10;
var sText = 'i am string';
var aArray = [1,2,3];
var bIs = true;
var fnFun = function(){};
var oNull = null;
var unde = undefined;
var oObj = {};//打印他们的类型;
console.log(typeof iNum); //number
console.log(typeof sText); //string
console.log(typeof aArray); //object
console.log(typeof bIs); //boolean
console.log(typeof fnFun); //function
console.log(typeof oNull); //object
console.log(typeof unde); //undefined
console.log(oObj);  //[object Object]
复制代码

上面的结果看,足以证明javascript中一切皆对象是错误的,可以看得出来,总共出现了包括number、string、boolean、undefined、object、function、[object object]这些情况;


接下来看看一些概念性的东西:

原始类型(值类型)与 引用类型

在javascript中变量只能存储为两种类型,一是原始类型(又称值类型),一是引用类型;


原始类型(值类型):

首先它是存放在栈内存中的,当然值也是直接存放在变量访问的位置; 这是因为值类型的值是不会发生变化的(也就是占用的空间是固定不变的),这样直接去栈内存中去取数据,大大提高了访问速度;

原始类型包括以下五种类型 : undefined、boolean、number、string、null;

这里要特别说一下string 与 null;

string :

其他语言将字符串string归为了引用类型,主要原因是因为字符串长度是可以变化的,不可预测的,但是ECMAscript硬性规定了他是原始类型,所以它只能是原始类型;

null

这个东西就有意思了,可以从上面的例子中可以看出,他打印出来的居然是object; 按他的类型分配(原始类型)他不应该返回的是 null吗?; 我们知道null返回的是一个空对象,既然是空对象那么js处理的时候,自然将它的类型返回会object了,因为空对象也是对象; 是的,这么一看就很矛盾了,既然是对象又要归为原始类型,是不是很怪,呵呵,像这样的问题javascript存在很多,这也是为什么javascript被大家所诟病了;


引用类型

从上面的例子看,有很多也也许会有疑问,怎么难道函数不是对象吗?对象不是对象吗? 这个时候,我们就需要instanceof来判断了;


console.log(fnFun instanceof Object) //true
console.log(oObj instanceof Object) //true复制代码

很显然数组和对象都是对象,属于对象的一个分支吧;但是函数不一样;

你知道蛋生鸡鸡生蛋的故事吗?哦,知道!

那你知道函数与对象的故事吗?哦,不知道!那好吧,我告诉你;

函数属于对象中的一种,对象是由函数创造的,这就是函数与对象的关系;

这也太简单了吧,是的,就是这么简单;看下面列子:

//数组作为对象这样创建;var aArray = [1,2,3,4];其实就是下面写法的简写var aArray = new Array();
aArray[0] = 1;
aArray[1] = 2;
aArray[2] = 3;
aArray[3] = 4;
//而Array又是个函数;这说明数组对象是由函数创建的;//对象作为对象这样创建:var oObj = {};其实也是下面写法的简写
var aArray = new Object();//而Object又是个函数;这说明对象对象是由函数创建的;
复制代码

所以说函数与对象之间的关系就是包含与被包含的关系;

总结

从上文我们可以得出了一下结论,值类型除了null都不是对象,一切引用类型和null都是对象,所以javascript中一切皆对象,确切说应该是一切引用类型都是对象;

本篇文章讲到这里了,如果有不正确的地方,还望指正,共同学习,共同进步,感谢阅读;

微信搜索关注公众号 【大前端js】,每天分享最硬的前端知识;

原创不易,总结不易,手打不易,转载时请注明出处,谢谢

js对象:从万物皆对象说起相关推荐

  1. JS入门篇-万物皆对象

    万物即是对象,这是我看<悟透javascript>第一部分最强烈的印象.接下来我来理一下书中第一部分的脉络. 书中告诉我们,在编程的世界里就是数据和实现的逻辑,接下来讲了在JS中,万物皆是 ...

  2. 你还认为JS中万物皆对象?

    经常在国内的各大网站博客上看到一句话,叫做JS中万物皆对象,那是否真是如此? 那么,我们先来捋一捋JS中的数据类型,JS中的数据类型有下面几种 Undefined Null Boolean Numbe ...

  3. javascript”面向对象编程”- 1万物皆对象

    javascript几乎成了如今web开发人员必学必会的一门语言,但很多人却只停在了一些表单验证等基础操作层面上,在面向对象语言大行其道的当下,我们需要去学习javascript的面向对象的知识,以便 ...

  4. python一切皆对象的理解_在 Python 中万物皆对象

    在 Python 中一切都是对象,并且几乎一切都有属性和方法.所有的函数都有一个内置的 __doc__ 属性,它会返回在函数源代码中定义的 doc string:sys 模块是一个对象,它有一个叫作 ...

  5. 理解“万事万物皆对象”

    什么是对象? 对象(Object)是一个应用系统中的用来描述客观事物的实体,是有特定属性和行为(方法)的基本运行单位.是类的一个特殊状态下的实例.对象可以是一个实体.一个名词.一个可以想象为有自己标识 ...

  6. Python源码解读之一 万物皆对象(上)

    万物皆对象 初探对象 Python中一切皆对象,在Python的世界里面,所有东西都是对象.整型.字符串.字典.int.str.list.class自定义类都是对象. 像int.str.list等基本 ...

  7. Java的 “万物皆对象“

    面向对象 面向过程和面向对象的区别 类和对象的关系 类和对象的创建 类的创建 对象的创建 构造器 构造器重载 this的使用 static修饰 代码块 包(import) 面向过程和面向对象的区别 面 ...

  8. scala(4)-万物皆对象

    转载:http://blog.csdn.net/y3wegy/article/details/8024880 Scala作为一个纯面向对象的语言,于是在Scala中万物皆对象,包括数字和函数.在这方面 ...

  9. Kotlin入门-万物皆对象,基础类型

    Kotlin说:万物皆对象. 可以说,Kotlin全面的接管了所有类型.一统天下. 即是基础,那就需要,通盘了解.按目录来就行.也有Xmind版本 github地址 本文将从下面几个方面去讲解 数字 ...

最新文章

  1. iOS根据Debug和Release状态的变化来屏蔽日志输出
  2. iDempiere = OSGi + ADempiere 一款ERPCRMSCM系统、助力中小企业发展
  3. idea设置中文界面_英雄联盟手游中文翻译--游戏主页设置界面翻译
  4. centos7安装界面、桌面记录(ubuntu没试过)
  5. iptables实现防火墙及NAT的基本功能----视频下载
  6. 【裂缝识别】基于matlab GUI无人机裂缝图像处理系统(带面板)【含Matlab源码 1727期】
  7. 进程、线程、I/O密集、计算密集
  8. BUUCTF-Reverse-相册
  9. 局域网连接外网时,二级路由器设置
  10. javax.crypto.Cipher线程安全问题
  11. 计算机计算公式单组数据求乘法,excel怎么算乘法
  12. 微博相互关注互粉mysql表实现_用MySQL实现微博关注关系的方案分析
  13. 每周跑一下Python脚本,轻松生成工作日志模板
  14. 2018最新苹果APP上架App Store流程(超详细)
  15. spring cache注解@Cacheable参数key赋值
  16. 支付宝小程序JS省市区三级联动
  17. JSONP及Axios
  18. Linux常用指令与操作
  19. 计算机系统配置低会带来,电脑配置差装什么系统合适
  20. 受限玻尔兹曼机(RBM)在Tensorflow的实现

热门文章

  1. C语言结构体初始化的几种方法
  2. 微信小程序+.NET(四) 科大讯飞语音接口-iat语音听写
  3. Python聚类分析之sklearn.manifold.TSNE
  4. UML设计系列(4):用例图
  5. 0032-【R-ggplot2]-Rstudio的ggplot可视化插件-esquisse
  6. 又说自己累成狗?那真是误会大了,狗才没你这么累!
  7. A Map of the Cat CodeForces - 952B(交互式题目)
  8. c++ error LNK2001: 无法解析的外部符号
  9. 扫描的图片怎样转换成word
  10. 考公务员可以用计算机吗,公务员考试还能用计算器啊!大家都带了吗?