js常用的数据类型
基本数据类型
number 数字
- 常规数字
- NaN
string 字符串
boolean 布尔
- true/false
空对象指针null
未定义 undefined
引用数据类型
object 对象数据类型
- 普通对象 {}
- 数组对象 []
- 正则对象 /^&/
- math数学函数对象
- 日期对象
- .....
function函数数据类型
数字类型
NaN
NaN,不是一个数,但它属于数字类型
NaN和任何值包括自己都不相等
isNaN
检验一个值是否为有效数字,如果不是有效数字返回true.是有效数字返回false
console.log(isNaN);//flase
console.log(isNaN("AA"));//true
console.log(isNaN('10'));//falsexxxxxxxxxx console.log(isconsole.log(isNaN);//flase console.log(isNaN("AA"));//true console.log(isNaN('10'));//false
在使用isNaN进行`检测的时候,首先会验证,检测的值是否是数字类型
如果不是,先基于Number()这个方法,先把数值转化为数字类型,然后再检测
其他类型转换成数字类型
- number
//字符串转换为数值,只要字符串中包含任意一个非有效数字
//结果都是NaN,空字符串会变为数字0
console.log(Number('12.5'));//12.5
console.log(Number('12.5px'));//NaN
console.log(Number(""));//0
//布尔转换成数字
console.log(Number(true));// 1
console.log(Number(false));//0
console.log(isNaN(false));//false
//null->0 undefined->NaN
console.log(Number(null));//0
console.log(Number(undefined));//NaN
//把引用数据类型转换成数字,是先把他基于toString方法转换为字符串
//然后在转换为数字
console.log(Number({}));//NaN
console.log(Number([]));//0
console.log(Number([12]));//12
console.log(Number([12,13]));//NaN
- parseInt/parseFlout([val],[进制])
也是转换为数组的方法,对于字符串来说,它是从左到右依次查找有效字符,知道遇到非有效字符,停止查找.把找到的当做数字返回
let str="12.5px"
Number(str);//NaN
parseInt(str);//12
parseFloat(str);//12.5
parseFloat('width:12px');//NaN
- ==进行比较的时候,可能会出现把其他类型转换成数字(自动转换)
字符串类型
所有用单引号,双引号,撇包起来的都是字符串
其他类型转换成字符串
[val].tostring()字符串拼接
let a=12
a.toString(a);//'12'
(NaN).toString;//"NaN"
(true.toString());//"true"
//null和undefined是禁止直接tostring的
[].toString();//""
[12,23].toString();//12,23
/^&/.toString();//"/^&/"
//普通对象tostring的结果是"[object Object]"
//Obkect.prototype.toString方法不是转换为字符串的,而是用来检测数据类型的
({}).toString();//"[object Object]"
//====================================字符串拼接
//四则运算中,除加法之外,琦玉都是数学计算,只有加法可能存在字符串拼接
'10'+10;//"1010"
'10'-10;//0
'10px'-10;//NaN
测试题
let a=10+null+true+[]+undefined+'珠峰'+null+[]+10+false
解题思路
10+null->10+0->10
10+true->10+1->11
11+[]->11+''->'11'
'11'+undefined->'11undefined'
'11undefined'+'珠峰'->'11undefined珠峰'
'11undefined珠峰'+'null10false'->'11undefined珠峰null10false'
boolean布尔数据类型
俩个值true/false
其他类型转回为布尔类型
只有0,NaN,'',null,,undefined五个值转换为false,其余都是true,没有任何特殊情况
!!可以取反再取反,转换成boolean
if也会自动将括号内的内容转换为boolean类型
null/undefied
null和undefined都代表没有
- null:意料之中,一开始不知道值,手动先设置为null.后期再给与赋值
- undefined:意料之外(不是我能决定的)
let num;
创建一个变量没有赋值,默认值是undefined
object对象数据类型-普通对象
{[keyy]:[value]}
任何对象都是由零到多组键值对组成的(且属性名,属性值不能重复)
对象的属性键名默认是字符串格式的
let person={
name:"易烊千玺",
1:100
};
console.log(person.name);
console.log(person['age']);
//如果调用的属性名不存在则返回undefined
// console.log(person.1);-》语法错误SyntaxError
console.log(person["1"]);
console.log(person[1]);
//以上俩个等效
//设置属性
person.a=1;
数组对象类型
数组是特殊的对象数据类型
let ary=[12,32,'asd',true];
console.log(ary)
//数组不需要写属性名,他的属性名是默认生成的数字,从0开始递增
//而且数字代表每一项的位置,成为索引
//天生默认一个属性名length,存储数组的长度
console.log(ary.length);//4
console.log(ary['length']);//4
console.log(ary[-1]);//undefined
//向对象末尾追加内容
ary[ary.length]=100;
//获取最后一项
console.log(ary[ary.length-1])
数据类型检测
- typeof[val]:用来检测数据类型的运算符
- instanceof:用来检测当前实例是否属于某个类
- constructor:基于构造函数检测我数据类型(也是基于类的方式)
- Object.prototype.toString.call():检测数据类型的最好的办法
//控制台输出的内容蓝色是数字灰色是字符串
console.log(typeof 1);//number
console.log(typeof NaN);//number
console.log(typeof undefined);//undefined
//局限性,基于typeof无法细分出当前值是普通对象还是数组对象
//因为只要是对象数据类型,返回结果都是object
console.log(typeof typeof typeof[])//从右到左进行运算结果是string
2 comments
undefined,嗯
null/defined 的标题漏字了