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
Last modification:April 22, 2022
如果觉得我的文章对你有用,请随意赞赏