javascript中一切皆对象吗?

既然标题给出了问号,那么答案必然是否定的;

先不说概念性的东西,来看一段代码:

//先定义一些变量;
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】,回复vue教程,react教程,webpack实战等等,获得不同的视频教程,大量视频教程等你来拿;

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

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值