null 是对象嘛? 为什么不是对象? 基础数据类型有哪些?基础数据类型和复杂数据类型的区别有哪些?

您所在的位置:网站首页 前端基本数据类型有哪些 null 是对象嘛? 为什么不是对象? 基础数据类型有哪些?基础数据类型和复杂数据类型的区别有哪些?

null 是对象嘛? 为什么不是对象? 基础数据类型有哪些?基础数据类型和复杂数据类型的区别有哪些?

2024-07-10 19:43| 来源: 网络整理| 查看: 265

基本类型有6种,分别是 undefined, null, bool, string, number,  symbol(ES6新增)虽然 typeof null 返回的值是 object,但是null不是对象,而是基本数据类型的一种。

基本数据类型存储在栈内存,存储的是值。 原始类型存储的都是值,是没有函数可以调用的,比如 undefined.toString()

复杂数据类型的值存储在堆内存,地址(指向堆中的值)存储在栈内存。当我们把对象赋值给另外一个变量的时候,复制的是地址,指向同一块内存空间,当其中一个对象改变时,另一个对象也会变化。

/** * isComplex判断是否是复杂数据类型,如果是返回true,否则返回false * @param {*} data 需要被判断类型的数据 */ function isComplex(data) { if (data && (typeof data === 'object' || typeof data === 'function')) { return true; } return false; }

null 是一个什么类型呢,typeof null输出的是对象,首先 typeof 能够正确的判断基本数据类型,但是除了 null, typeof null输出的是对象。但是对象来说,typeof 不能正确的判断其类型, typeof 一个函数可以输出 'function',而除此之外,输出的全是 object,这种情况下,我们无法准确的知道对象的类型。为什么null  返回的是一个object n呢?在 JS 的最初版本中使用的是 32 位系统,为了性能考虑使用低位存储变量的类型信息,000 开头代表是对象,然而 null 表示为全零,所以将它错误的判断为 object 。虽然现在的内部类型判断代码已经改变了,但是对于这个 Bug 却是一直流传下来。

 

使用typeof 判断数据类型; console.log( typeof 123, //"number" typeof 'dsfsf', //"string" typeof false, //"boolean" typeof [1,2,3], //"object" typeof {a:1,b:2,c:3}, //"object" typeof function(){console.log('aaa');}, //"function" typeof undefined, //"undefined" typeof null, //"object" typeof new Date(), //"object" typeof /^[a-zA-Z]{5,20}$/, //"object" typeof new Error() //"object" ); null 和 undefined 的区别:

null 是 javascript 的关键字,表示一个特殊值,常用来描述"空值",typeof 运算返回"object",所以可以将 null 认为是一个特殊的对象值,含义是"非对象"。

undefined 是预定义的全局变量,他的值就是"未定义", typeof 运算返回 "undefined"

 

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3