js对象:从万物皆对象说起
经常见很多文章中说:在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对象:从万物皆对象说起相关推荐
- JS入门篇-万物皆对象
万物即是对象,这是我看<悟透javascript>第一部分最强烈的印象.接下来我来理一下书中第一部分的脉络. 书中告诉我们,在编程的世界里就是数据和实现的逻辑,接下来讲了在JS中,万物皆是 ...
- 你还认为JS中万物皆对象?
经常在国内的各大网站博客上看到一句话,叫做JS中万物皆对象,那是否真是如此? 那么,我们先来捋一捋JS中的数据类型,JS中的数据类型有下面几种 Undefined Null Boolean Numbe ...
- javascript”面向对象编程”- 1万物皆对象
javascript几乎成了如今web开发人员必学必会的一门语言,但很多人却只停在了一些表单验证等基础操作层面上,在面向对象语言大行其道的当下,我们需要去学习javascript的面向对象的知识,以便 ...
- python一切皆对象的理解_在 Python 中万物皆对象
在 Python 中一切都是对象,并且几乎一切都有属性和方法.所有的函数都有一个内置的 __doc__ 属性,它会返回在函数源代码中定义的 doc string:sys 模块是一个对象,它有一个叫作 ...
- 理解“万事万物皆对象”
什么是对象? 对象(Object)是一个应用系统中的用来描述客观事物的实体,是有特定属性和行为(方法)的基本运行单位.是类的一个特殊状态下的实例.对象可以是一个实体.一个名词.一个可以想象为有自己标识 ...
- Python源码解读之一 万物皆对象(上)
万物皆对象 初探对象 Python中一切皆对象,在Python的世界里面,所有东西都是对象.整型.字符串.字典.int.str.list.class自定义类都是对象. 像int.str.list等基本 ...
- Java的 “万物皆对象“
面向对象 面向过程和面向对象的区别 类和对象的关系 类和对象的创建 类的创建 对象的创建 构造器 构造器重载 this的使用 static修饰 代码块 包(import) 面向过程和面向对象的区别 面 ...
- scala(4)-万物皆对象
转载:http://blog.csdn.net/y3wegy/article/details/8024880 Scala作为一个纯面向对象的语言,于是在Scala中万物皆对象,包括数字和函数.在这方面 ...
- Kotlin入门-万物皆对象,基础类型
Kotlin说:万物皆对象. 可以说,Kotlin全面的接管了所有类型.一统天下. 即是基础,那就需要,通盘了解.按目录来就行.也有Xmind版本 github地址 本文将从下面几个方面去讲解 数字 ...
最新文章
- iOS根据Debug和Release状态的变化来屏蔽日志输出
- iDempiere = OSGi + ADempiere 一款ERPCRMSCM系统、助力中小企业发展
- idea设置中文界面_英雄联盟手游中文翻译--游戏主页设置界面翻译
- centos7安装界面、桌面记录(ubuntu没试过)
- iptables实现防火墙及NAT的基本功能----视频下载
- 【裂缝识别】基于matlab GUI无人机裂缝图像处理系统(带面板)【含Matlab源码 1727期】
- 进程、线程、I/O密集、计算密集
- BUUCTF-Reverse-相册
- 局域网连接外网时,二级路由器设置
- javax.crypto.Cipher线程安全问题
- 计算机计算公式单组数据求乘法,excel怎么算乘法
- 微博相互关注互粉mysql表实现_用MySQL实现微博关注关系的方案分析
- 每周跑一下Python脚本,轻松生成工作日志模板
- 2018最新苹果APP上架App Store流程(超详细)
- spring cache注解@Cacheable参数key赋值
- 支付宝小程序JS省市区三级联动
- JSONP及Axios
- Linux常用指令与操作
- 计算机系统配置低会带来,电脑配置差装什么系统合适
- 受限玻尔兹曼机(RBM)在Tensorflow的实现
热门文章
- C语言结构体初始化的几种方法
- 微信小程序+.NET(四) 科大讯飞语音接口-iat语音听写
- Python聚类分析之sklearn.manifold.TSNE
- UML设计系列(4):用例图
- 0032-【R-ggplot2]-Rstudio的ggplot可视化插件-esquisse
- 又说自己累成狗?那真是误会大了,狗才没你这么累!
- A Map of the Cat CodeForces - 952B(交互式题目)
- c++ error LNK2001: 无法解析的外部符号
- 扫描的图片怎样转换成word
- 考公务员可以用计算机吗,公务员考试还能用计算器啊!大家都带了吗?