Number数字类型
包含:常规数字、NaN
NaN
not a number :不是一个数,但它是属于数字类型
NaN和任何值(包括自己)都不相等:NaN!=NaN,所有不能用相等的方式判断是否为有效数字
isNaN
检测一个值是否为非有效数字,如果不是有效数组返回true,反之是有效数字返回false
在使用isNaN进行检测的时候,首先会验证检测的值是否为数字类型,如果不是,先基于Number()这个方法,把值转换为数字类型,然后再检测
console.log(isNaN(10)); //=>false;
console.log(isNaN('AA')); //=>true;
console.log(isNaN(‘10’)); //=>false;
console.log(isNaN(NaN)); //=>true;
/*
* Number(‘10’) => 10 ;
*isNaN(10); =>false;
*/
把其它类型值转换为数字类型
空字符串会变为数组零
- Number([val])
- parseInt/parseFloat([val], [进制]) : 也是转换为数字的方法,对于字符串来说,它是从左到右依次查找有效数字字符,直到遇到非有效数字字符,停止查找(不管后面是否还有数字,都不在找了),把找到的当做数字返回。
- ==进行比较的时候,可能要出现把其它类型值转换为数字。
console.log(Number('')); //=>0
console.log(Number(true)); //=>1
console.log(Number(false)); //=>0
console.log(Number(null)); //=>0
console.log(Number(undefind)); //=>NaN
//把引用数据类型转换为数字,是先把他基于toString方法转换为字符串,然后在转换为数字
// {}/{xxx:'xxx'}.toString() => "[object object]" =>NaN
console.log(Number({name:'9'})); //=>NaN
console.log(Number({})); //=>NaN
// [].toString() => '' =>0
console.log(Number([])); //=>0
// [12].toString() => '12' =>12
console.log(Number([12])); //=>12
// [12,23].toString() => '12,23' =>NaN
console.log(Number(12,23)); //=>NaN
let str = '20.1px';
console.log(Number(str)); =>NaN
console.log(parseInt(str)); =>20 //整数
console.log(parseFloat(str));=>20.1
console.log(parseFloat(‘width:20.1px'));=>NaN
String字符串数据类型
所有用单引号、双引号、反引号(撇 ES6模板字符串)包起来的都是字符串
把其它类型值转换为字符串
- [val].toString()
- 字符串拼接
let a = 12;
console.log(a.toString()); //=>'12'
console.log((NaN).toString()); //=>'NaN'
//null 和undefined是禁止直接toString的
//(null).toString() //=>报错
//但是和undefined一样转换为字符串的结果就是'null'/'undefined'
//================字符串拼接
//四则运算法则中,除加法之外,其余都是数学计算,只有加法可能存在字符串拼接(一旦遇到字符串,则不是数学运算,而是字符串拼接)
console.log('10'+10); //=>'1010'
console.log('10'-10); //=>0
console.log('10px'-10); //=>NaN
let a = 10 +null +true + [] + undefined + 'XX' +null + [] +10 + false ;
// 10+ null -> 10+0->10 10+ true -> 10+1 ->11 11+[] -> 11+' ' ->'11' 空数组变为数字,先要经历变为空字符串,遇到字符串,直接变为字符串拼接
//'11'+undefined -> '11undefined'
// '11undefinedXXnull10false'
console.log(a) //=> '11undefinedXXnull10false'
boolean布尔数据类型
只有两个值 true/false
把其他类型值转换为布尔类型
只有0、NaN、’’、null、undefined五个值转换为false,其余都转换为true(而且没有任何的特殊情况)
- Boolean([val])
- !/!!
- 条件判断
!: 取反(先转为布尔,然后取反) !!: 取反再取反,只相当于转化为布尔 <=>Boolean
如果条件只是一个值,不是==/===/!=/>= 等这些比较,是要把这个值先转换为布尔类型,然后验证真假
if(1){
true
}
if('3px'+3){
true
}
if('3px'-3){
false //=>'3px'-3=>NaN-3=>NaN=>false
}
null/undefined
null和undefined都代表的是没有
- null: 意料之中(一般都是开始不知道值, 我们手动先设置为null,后期再给予赋值操作)
- undefined: 意料之外(不是自己能决定的)
- 创建一个变量没有赋值,默认值是undefined
object对象数据类型-普通对象
{[key]:[value], …}任何一个对象都是由零到多组键值对(属性名: 属性值)组成的(并且属性名不能重复)
获取属性名对应的属性值
- =>对象. 属性名
- =>对象[‘属性名’] 属性名是数字或者字符串格式的
- 如果当前属性名不存在,默认的属性值是undefined
- 如果属性名是数字,则不能使用点的方式获取属性值
设置属性属性值
- 对象. 属性名=属性值 对象[‘属性名’]=‘属性值’ 属性名不能重复,如果属性名已经存在,不属于新增属于修改属性值
删除属性
- 真删除: 把属性彻底干掉 //delete 对象. 属性名
- 假删除: 属性还在,值为空 //对象. 属性名=null
数组是特殊的对象数据类型
- 在中括号中设置的是属性值,它的属性名是默认生成的从0开始递增,而且这个数字代表每一项的位置,我们把其称为“索引”=>从零开始,连续递增,代表每一项位置的数字属性名
- 天生默认一个属性名length,存储数组的长度# JS中的数据类型检测
- typeof[val]: 用来检测数据类型的运算符
- instanceof: 用来检测当前实例是否属于某个类
- constructor: 基于构造函数检测数据类型(也是基于类的方式)
- object.prototype.toString.call(): 检测数据类型最好的方法
/*
*基于typeof检测出来的结果
* 1.首先是一个字符串
* 2.字符串中包含对应的类型
* 局限性
* 1.typeof null =>"objecr" 但是null并不是对象
* 2.基于typeof无法细分出当前是普通对象还是数组对象等,因为只要是对象数据类型,返回的结果都是"object"
*/
console.log(typeof 1); //=>"number"
let a = NaN;
console.log(typeof a); //=>"number"
console.log(typeof null); //=>"object"
console.log(typeof undefined); //=>"undefined"
console.log(typeof function(){}); //=>"function"
console.log(typeof {}); //=>"object"
console.log(typeof []); //=>"object"
console.log(typeof /^/); //=>"object"
console.log(typeof typeof typeof []);
//=>typeof [] =>"object"
//=>typeof "object" => "string"
//因为typeof检测的结果都是字符串,所以只要两个及以上同时检测,最后结果必然是"string"
来源:CSDN
作者:AA�我也不知道
链接:https://blog.csdn.net/weixin_43837705/article/details/103547515