javascript 之数据类型--01
写在前面
国庆整理资料时,发现刚开始入门前端时学习JS 的资料,打算以一个基础入门博客记录下来,有不写不对的多多指教;
先推荐些书籍给需要的童鞋
《JavaScript 高级程序设计.pdf》第三版
《JavaScript权威指南(第六版).pdf》
《高性能javascript.pdf》
《JavaScript语言精粹---高清版.pdf》
《你不知道的JavaScript(上卷).pdf》
《你不知道的JavaScript(中卷).pdf》
数据类型
ECMAScript 中数据类型分为基本数据类型,复杂数据类型也称为引用数据类型,即常说的对象;
基本数据类型是简单的数据段,包括 String、Number、Boolean、Null、Undefined。
引用数据类型是由一组无序的名值对组成 如 Object;
基本数据类型
1、Undefined 类型
Undefined 类型只有一个值,即 undefined。以下情况的值会是 undefined
(1)变量被声明了,但没有赋值,默认值为undefined。
(2)调用函数时,应该提供的参数没有提供,该参数等于undefined。
(3)对象没有赋值的属性,该属性的值为undefined。
(4)函数没有返回值时,默认返回undefined。
(5)未定义的变量使用typeof 返回undefined(严格模式下报错)。
1 2 3 4 5 6 7 8 9 10 11 | <script> var a; console.log(a); //undefined function f(a, b, c) { console.log(c) //undefined } f(1, 2); //未传递的实参 function fo(){} console.log(fo()); //没有明确返回值,默认返回undefined </script> |
2、Null 类型
Null 只有一个值 null,null是javascript语言的关键字,它表示一个特殊值,常用来描述"空值",从逻辑角度来看,null 是一个空对象指针;通常要把一个变量来保存对象,那么最好将变量初始化为null;
[注意]null是空对象指针,而[]是空数组,{}是空对象,三者不相同;
null与undefined 都是表示无、不存在,那么为什么会同时存在呢?
1、一开始null像在Java、.net里一样,被当成一个对象。但是javascript的值分成原始类型和对象类型两大类,作者认为基本类型表示”无”的值最好不是对象。
2、javascript的最初版本没有包括错误处理机制,发生数据类型不匹配时,往往是自动转换类型或者默默地失败。作者认为如果null自动转为0,很不容易发现错误;
null 与undefined 区别又是什么呢?
目前来说,null和undefined基本是同义的,都是表示无,只是应用场景不太一样 如:
null表示"没有对象",即该处不应该有值。典型用法是:
- 作为函数的参数,表示该函数的参数不是对象。
- 作为对象原型链的终点。
undefined表示"缺少值",就是此处应该有一个值,但是还没有定义/初始化。典型用法是:
- 变量被声明了,但没有赋值,默认值为undefined。
- 调用函数时,应该提供的参数没有提供,该参数等于undefined。
- 对象没有赋值的属性,该属性的值为undefined。
- 函数没有返回值时,默认返回undefined。
- 未定义的变量使用typeof 返回undefined(严格模式下报错)。
(typeof null) //返回object 误区
在 JavaScript 最初的实现中,JavaScript 中的值是由一个表示类型的标签和实际数据值表示的。对象的类型标签是0。由于 null 被设计成空指针(大多数平台下值为0x00),因此,null的类型标签也成为了0,typeof null就错误的返回了"object".(referenc) 但是如果修复了 会造成大量旧的js不兼容;
该现象有待于在ECMAScript 6中被修复 (该提议已被否决). 正确的返回值将成为 typeof null === 'null'.
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/typeof
3、Boolean 类型
Boolean 布尔类型有 true、false。在js中是区分大小写的,即 True、False 并不是Boolean的值,虽然Boolean 只有这两个值,但是在js中任何数据类型的值调用Boolean()函数,都能返回一个Boolean值;只要记住如下规则即可:(0,-0,NaN,'',null,undefined)这六个永远为false,其它都为true
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <script> var message = 'ds' ; if (message) { console.log( '成功' +message) // 成功ds } var obj={}; if (obj){ console.log( '成功' +obj) // 成功[object Object] } var a=0; if (a){ console.log( '成功' +a); } else { console.log( '失败' +a) // 失败0 } </script> |
4、Number 类型
在js中使用Number 类型来表示整数与浮点数(数值必须包含一个小数点);
var intNum=66; //整数
var floatNum=1.1 //浮点数
如果某次计算的结果超出了Javascript 数值范围(Number.MAX_VALUE 最大值 Number.MIX_VALUE)那么这个结果就会自动转为Infinity,如果这个数值是负数会转为-Infinity(负无穷),如果是正数会转为Infinity(正无穷)
NaN:非数值(Not a Number)是一个特殊的值,表示这里本应该是一个数值,但是并不是数值; 如
1 2 | var a=10,b= 'str' ; console.log(a*b); //NaN |
NaN 具有如下特点:
1、任何与NaN的操作都是返回NaN;
2、NaN与任何值都不相等;
1 2 3 4 5 6 7 8 | <script> var a = 10, b = 'str' ; console.log(a * b); //NaN console.log(NaN == NaN) //false console.log(NaN === NaN) //false console.log(NaN == 'str' ) //false </script> |
针对NaN的两个特点,ECMAScript定义了 isNaN()函数来确定某个变量/表达式结果是不是NaN,这个函数会尝试把变量转换为数值,如果不能转换则返回true,反正返回false;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <script> console.log(isNaN( 'red' )); //true 不能转换number console.log(isNaN( '10' )); //false 能转换number console.log(isNaN(10)); //false 能转换number console.log(isNaN( false )); //false 能转换number console.log(isNaN( true )); //false 能转换number console.log(isNaN( '' )); //false 能转换number 0 console.log(isNaN(undefined)); //true 不能转换number console.log(isNaN( 'undefined' )); //true 不能转换number console.log(isNaN( null )); //false 能转换number 0 console.log(isNaN( 'null' )); //true 不能转换number </script> |
typeof 基本数据类型检查
1 2 3 4 | <script> var s = 'name' ; console.log( typeof s) //string </script> |
typeof 返回以下字符串
undefined 这个变量未定义、未初始化
object 这个变量是对象或者是null
boolean 这个变量是布尔值
number 这个变量是数值
string 这个变量是字符串
function 这个变量是函数
引用数据类型
引用类型是一种用于将数据和功能组织在一起的数据结构(也常被成为类),引用类型的值(对象)是引用类型的一个实例。但是js中没有类的概念,因此引用类型也可以被称为对象,因为他们描述的是属性和方法的集合;
ECMAScript提供了很多原生引用类型(如:Object)
Object类型
我们看到的大部分引用类型都是Object类型的实例,Object的实例本身不具备很多功能,但对于在应用程序中存储和传输数据而言,是非常理想的选择。
Array类型
除了Object之外,Array算是js最常用最常用的类型。js中的数组与其他语言的数组都是数据的有序列表,因为js是弱类型,所以js中数组的每一项可以保存任何类型的数据;
Date类型
js中用于构建日期对象的引用类型
RegExp类型
js通过RegExp类型来支持正则表达式
Function类型
js中的function实际上是对象,每个函数都是Function类型的实例,而且都与其他引用类型一样具有属性和方法。由于函数是对象,因此函数名实际上也是一个指向函数对象的指针;
引用类型提供的属性以及方法这里不在叙述,不知道的可以参考如下连接
http://www.w3school.com.cn/jsref/jsref_obj_array.asp
instanceof 检测某个实例的具体类型
语法:
1 | object instanceof constructor |
描述:
instanceof 运算符用来检测 constructor.prototype 是否存在于参数 object 的原型链上。
可以理解为 instanceof 用于判断某个实例(对象)是否是某个类型的实例;
1 2 3 4 5 6 7 8 | var a= new Array(); alert(a instanceof Array); //true, alert(a instanceof Object)也会返回 true ;这是因为Array是object的子类。 再如: function test(){}; var a= new test(); alert(a instanceof test)会返回 true 。 |
如果您觉得阅读本文对您有帮助,请点一下推荐按钮,您的推荐将是我最大的写作动力,欢迎各位转载!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!