002-JS中常用的数据类型
1.数据值是一门编程语言进行生产的材料,js中的数据类型值包括基本数据类型、引用数据类型、函数
2.基于alert输出的结果是字符串;alert(1+1); 输出结果为字符串"2"
一、基本数据类型值(值类型)
1.1 数字number
- NaN:not a number 但是它是数字类型的
- isNaN:检测当前这个值是否不是有效数字,false代表的是有效数字,true代表不是有效数字
- NaN的比较:
NaN == NaN;
结果为false,NaN和谁都不相等、包括和自己 1.1.1 isNaN检测机制:
1.首先验证当前要检测的值是否为数字类型,如果不是浏览器会把默认的值转换为数字类型;
a:其它基本类型值转换为数字:直接使用Number这个方法转换
b:把引用类型值转换为数字:先把引用值调取toString转换为字符串,然后再把字符串调取Number转换为数字
`其它基本类型值转换为数字`
[字符串转数字]:
规律:如果当前字符串中出现任意一个非有效数字,结果则为NaN
Number('13'); //结果为13;
Number('13px'); //结果为NaN
Number(13.5); //结果为13.5
[布尔转数字]:
Number(true); //结果为1
Number(false); //结果为0
[其它]:
Number(null); //结果为0
Number(undefined); //结果为NaN
[对象]
({}).toString() //结果为[object Object]->NaN
[数组]
[12,23].toString() //'12,23'->NaN 出现任何一个非有效数字结果都为NaN
[12].toString() //'12'->12
[空字符串]
Number('') //结果为0
[ ].toString() //结果为'' 空数组的toStrin后的结果为空字符串
isNaN([]) //结果为false
2.如果当前检测的值已经是数字类型,是有效数字就返回false,不是有效数字就返回true(数字类型中只有NaN不是有效数字,其余的都是有效数字)
语法:isNaN([value])
var num = 12;
isNaN(num); //检测num变量存储的值是否为有效数字;false
isNaN('12'); //结果为false
isNaN('小明'); //结果为true
isNaN(true); //结果为false
isNaN(null); //结果为false
isNaN(undefined); //结果为true
isNaN({age:9}); //结果为true
isNaN([12,23]); //结果为true
isNaN([12]); //结果为false
isNaN(/^$/); //结果为true
isNaN(function () {}); //结果为true
1.1.2 parseInt/parseFloat(从字符串最左边开始查找有效数字字符)
等同于Number,也是将其它类型的值转换为数字类型,和Number的区别在于字符串转换分析上
Number:出现任意非有效数字字符,结果就为NaN
parseInt: 把一个字符串中的整数部分解析出来
parseFloat: 把一个字符串中的整数和小数(浮点数)解析出来
parseInt('width:13px') =>结果为NaN;从字符串最左边开始查找有效数字字符,并且转换为数字,但是第一个遇见非有效数字字符,就会立刻结束查找
1.2 字符串string
由单引号和双引号包裹起来的值都是字符串类的值
1.3 布尔boolean
只有两个值:true/false
把其它数据类型值转换为布尔类型的三种方法
- Boolean
- !
- !!
[方法一]
Boolean(1) =>true
[方法二]
!'小明' =>先把其它类型值转换为布尔类型值,然后再取反 =>false
[方法三]
!!null =>两次取反,等价于没取反;也就只剩下转换为布尔类型了,项目中经常用这个方法,主要是比较简单
规律总结:在js中只有"0/NaN/空字符串/null/undefined"这五个值转换为布尔类型都为false,其余都转换true
1.4 null && undefined
null和undefined都代表空
- null:空对象指针
- undefined:未定义
null:一般都是意料之中的没有(一般都是人为手动赋值为null,后面程序中我们会再次给它赋值)
undefined:一般都不是人为手动控制的,大部分都是浏览器自主为空的(后面可以赋值,也可以不赋值)
[null]
var num = null; //null是手动赋值,预示着后面我们会把num变量的值进行修改
...
num = 12;
[undefined]
var num; //此时变量的值浏览器分配的就是undefined,后面可以赋值,也可以不用赋值
二、引用数据类型值
- 对象object
普通对象: 由大括号包裹起来的;由零到多组属性名和属性值(键值对)组成
一般来说对象的属性名都是字符串的;属性值类型可以是多种多样的
js中属性名是不允许重复的,是唯一的
一个对象的属性名不仅仅可以是字符串格式的,还可以是数字格式的
如果当我们存储的属性名不是字符串也不是数字的时候,浏览器会把这个值转换为字符串(toString),然后再进行存储
在获取属性值的时候,如果当前对象有这个属性名,则可以正常的获取到属性值(哪怕是null),如果当前对象没有这个属性名,则获取到的结果是undefined。
属性是用来描述当前对象特征的,属性名是当前对象具备的这个特征;属性值是对这个特征的描述(专业术语,属性名为[key],属性值[vaule];一组属性名和属性值叫做一组键值对)
- 普通对象
- 数组对象
- 正则对象
- 日期对象
- 数学对象
对象中的方法:获取、增和改、删除(真删除和假删除)
var obj = {
name:'小明',
age:18
};
[获取]
语法:对象.属性 / 对象[属性]
obj.name
obj['name']
obj["name"]
[增/改]
obj.name = '小李'; //原有对象中存在name属性,此处为修改属性值
obj.sex = '女'; //原有对象中不存在sex属性,此处为增加一个属性sex在
[删]
彻底删除
delete obj['age']; //对象中不存在这个属性了,彻底没了
假删除:并没有移除这个属性,这是让当前属性为空
obj.sex = null; //sex这个属性还有,只是值为null了
[引用数据类型-普通对象]
var obj = {name:'良雨', age:18}; // 普通的对象:由大括号包裹起来,里面包含对组属性名和属性值(包含多组键值对) {}空对象
[引用数据类型-数组对象]
var ary = [12,23,34]; // 中括号包裹起来,包含零到多项内容;这种是数组对象 []空数组
[引用数据类型-正则对象]
var reg = /-?(\d|([1-9]\d+))(\.\d+)?\g; // 验证是否为有效数字;由元字符组成一个完整的正则
[引用数据类型-函数]
数组也是对象(也是由键值对组成的)
var ary = [12,23]; //属性值分别是12,23;属性名是数组的索引(数字类型)
- 函数function
function fn () {
}
三、ES6中新增加的特殊类型:symbol
[symbol]
var a = Symbol('小明');
var b = Symbol('小明');
a == b; //结果为false
ES6新语法:const c = Symbol('你好'); //const创建常量,不可更改,symbol也是唯一的,不能被修改的