Javascript中的数据类型
基本数据类型
是对值的操作;放在栈内存里面,栈内存是
js
代码执行的环境,存放轻量级的数据
-
数值
Number
-
NaN
属于Number
数据类型,跟任何值都不相等,包括它自己 -
isNaN()
:判断是否是非有效数字;是非有效数字:true
,是有效数字:false
-
-
字符串
String
- 字符串和任何值相加
-
布尔
Boolean
-
Null
-
undefined
-
null==undefined
得到的是true
-
null===undefined
得到的是false
-
产生
undefined
的情况1. 变量未定义 2. 函数没有设置return的时候,用一个变量去接收其的返回值是undefined;即使设置了return,但是后面没有语句,那么获得的函数返回值也是undefined 3. 对象身上的属性不存在的时候,获取的是undefined 4. 如果定义了形参,但是没有传入实参,获取得也是undefined
-
-
undefined+undefined=NaN
引用数据类型
对地址的操作;开辟一个新的空间地址,存放在堆内存;对象以键值对的方式存储,数组是以字符串的方式存储;把空间地址赋值给一个变量名,指向当前的这个空间(堆内存);堆内存里面存放的是
js
代码的字符串(也就是函数的定义阶段),执行js
代码要到栈内存里面(也就是函数的调用阶段)
-
对象数据类型
- 数组
[]
- 字面量方式创建:
var ary=[]
- 对象实例创建:
var ary=new Array()
- 字面量方式创建:
- 对象
{}
- 两个基本的特征:属性(没有括号)和方法(有括号);键值对展示对象的特性
var obj={}
var obj=new Object()
- 遍历对象的方法:
for(var a in obj){}
- 正则
RegExp()
- 日期对象
new Date()
- 数组
-
函数数据类型
-
函数
function
- 最重要的是封装
- 只定义函数,不调用函数(函数()),函数不会执行
- 定义阶段:
1. 开辟一个新的空间地址,堆内存 2. 把函数体内的所有`js`代码都作为**字符串**存储在这个堆内存里面 3. 把这个堆内存的地址赋值给函数名
-
调用阶段:
1. 函数调用,会形成一个私有作用域 2. 把以前的存储在堆内存里面的`js代码字符串`拿到栈内存作为`js代码`进行执行
-
函数自带参数机制:
arguments
1.可以获取到函数传入的实参,并且以`类数组`的形式展现或者打印;其是一个对象,有属性和方法 2.arguments.callee:拿到的是当前函数本身,包括注释 3.arguments.length:拿到的是实参的个数 4.解决参数个数不确定而无法传入的问题 5.形参是私有变量
-
数据类型检测的方法
-
typeof
:可以检测基本数据类型,但是对于对象数据类型,检测出来的都是object
,无法知道具体属于哪种对象。 -
对象 instanceof 类
:比如ary instanceof Array
判断这个实例对象是否属于某个类 -
对象.constructor
:比如ary.constructor
可以打印出对象所属的类 -
Object.prototype.toString.call(ary)
:出来的结果[object Array]
数据类型的真假
- 除了假都是真
- 假
false
6种false
- 空字符串
''
0
NaN
null
undefined
数据类型的转换
- 字符串类型与数值类型之间的转换
- 严格转换
Number()
- 非严格转换
-
parseInt(传入要转化为整数的小数或者数字字符串)
:只能转化为整数,不会进行四舍五入,向下取整,从前往后转 -
parseFloat(传入要转化的小数或者数字字符串)
;可以保留小数 - 返回的都是
Number
数据类型,转换失败得到NaN
,也是Number
数据类型
-
- 严格转换
隐式数据类型的比较
-
[]
默认通过自身的toString()
转成空字符串''
,再通过Number('')
转为0
-
null
默认隐式转换为0
故:null+10=10
- 对象==对象
不相等,对地址的引用
- 对象==字符串
默认都转成字符串比较 特殊:""=={} 相等
- 对象==数值
默认转为数值比较 特殊:0==[]相等 0=={} 不相等
- 对象==布尔值
默认转为数值 特殊:false==[] 相等 ![]==[] 相等
- 数值==字符串
默认是转数值 特殊:0=="" 相等
网友评论