• JavaScript数据类型


    JavaScript数据类型

    JavaScript的数据类型分为:基本数据类型和引用数据类型。

    JavaScript的基本数据类型有undefined、null、string、Boolean、number,ES6新增的Symbol。

    JavaScript引用数据类型:object、function、Array和Date等等。

    Undefined

    undefined表示一个值不存在,一般在以下这几种情况才返回undefined。

    1. 使用一个已经声明,但是没有赋值的变量时,会返回undefined;
    2. 读取变量中不存在的属性时会返回undefined;
    3. 函数没有返回值,但是在其他地方使用了函数的返回值,这时候返回undefined;
    4. 声明函数的时候,定义了多个参数,但是在函数调用的时候,传参数个数少于形参的数量,这时候没有匹配上的参数为undefined;

    Null

    null表示一个空指针对象,如果使用typeof运算符来检测null时,会返回object。

    在以下几种情况会返回null:

    1. 在获取DOM元素的时候,如果没有拿到指定元素对象,就会返回null;
    2. 在正则匹配时,没有匹配结果也会返回null;
    3. 如果声明一个变量是为了保存后面的某个值,那么在声明该变量的时候赋值为null。

    undefined和null在非严格相等的情况下是相等的,并且在转为Boolean类型值时,都是false。

    在JavaScript中,null是关键字,但是undefined是JavaScript的一个全局变量;
    在这里插入图片描述

    如上图所示,在使用Object.prototype.toString.call()来检测两者类型时,返回的结果也是有所区别的。

    在转化为string类型的时候,undefined转为’undefined’,null转为’null’;

    在转为number类型的时候,null转为0,可以进行运算;undefined会转为NaN;

    建议:在任何情况,没有必要将一个变量设置为undefined,如果声明一个变量是为了在后面用来保存某个值,那么这个变量应该初始化为null。

    Boolean

    Boolean类型,之后两种情况:要么是true,要么是false。

    1. String转为Boolean,空字符串为false,任何非空字符串转为true;
    2. Number转为Boolean,0和NaN转为false,其他数字包括无穷大和无穷小都会转为true;
    3. Object转为Boolean,object为null时,转为false,否则结果为true,包含{}的结果也是true;
    4. function类型转为Boolean,任何的function转为Boolean类型,结构都为true

    Number

    将其他数据类型转换为Number类型,通常用到三个函数:Number()、parseInt()、parseFloat()。

    Number()
    1. 如果是数字,则按照对应的进制数据格式,转化为十进制;
    2. Boolean类型转Number,true为1,false为0;
    3. Null为0;
    4. undefined为‘NaN’;
    5. 字符串,那么:
    1. 字符串只含有数字,直接转为十进制数;
    2. 如果数字前面含有0,则是直接忽略0;
    3. 字符串是有效的浮点型数,直接转为对应的浮点数,前面的0会被清空,只保留一个
    4. 字符串是有效的十六进制数,会转换为对应的十进制数;
    5. 如果是有效的八进制数,直接按照十进制进行转换,前面的0被忽略点;
    6. 字符串为空,或者是连续多个空格,直接转为0;
    7. 字符串含有其他格式的内容,直接返回NaN;
    1. 若是Object类型,则会先调用对象的valueOf()函数拿到返回值,再按照上面的步骤判断返回。如果还是不满足,那么会调用对象的toString()函数,获取返回值,再次判断是否可以转化为Number类型,否则返回NaN
    parseInt()

    parseInt()函数是用来解析一个字符串,并且返回对应基数的整数值。例如:parseInt(‘123’,8),结果为83。

    其中的第二个参数是表示进制转换的基数,范围是2到36,默认值是10。

    如果该字符串不能转换为Number类型,那么会返回NaN。
    非字符串转换为整数:

    1. 非字符串转化为字符串类型,如果传入的不是一个字符串,则是优先转化为字符串,然后再转化为整数
    2. 数据截取的前置匹配原则,从字符串的第一个字符开始匹配,如果是处在基数指定的范围,那么保留并且继续往后面匹配,当遇到不满足基数指定的范围,那么后面的字符无效被忽略掉
    3. 对字符e的处理:

    如果参数本身是Number类型,就会按照科学计数法计算后转换为字符串,最后按照对应的基数转换得到最终结果。
    如果参数是字符串并且含有e字符,那么会判断字符e是否是处在设置的进制范围内,如果是,则直接转换为对应进制数,否则是忽略掉。例如:
    parseInt(6e3,16),6e3等于6000,转为’6000’,再执行parseInt(‘6000’,16)结果为24576。
    parseInt(‘6e3’, 10),结果为1763。

    1. 浮点数的处理:参数数浮点型数,那么会忽略后面的小数部分;
    2. map和parseInt的误区:把一个数组元素转换为整数。
    ['1','23','46','43'].map(parseInt)
    
    • 1

    按照这个逻辑流程理解,我们会认为结果[1,23,46,43]。但是执行结果为[1,NaN,NaN,NaN]。

    因为这段代码是等价于:

    ['1','23','46','43'].map((item,index)=>parseInt(item,index))
    
    • 1

    所以要达到预期效果,代码需要改为:

    ['1','23','46','43'].map((item,index)=>parseInt(item,10))
    
    • 1
    parseFloat()

    parseFloat函数用来解析一个字符串,返回一个浮点型数,如果不能转为number,直接返回NaN。

    1. 如果在解析过程中遇到了正负号(+ /-)、数字0~9、小数点或者科学计数法(e /E)以外的字符,则会忽略从该字符开始至结束的所有字符,然后返回当前已经解析的字符的浮点数形式;
    2. 字符串前面的空白字符会被忽略掉
    3. 字符串中含有e,进行运算后转为浮点型数
    4. 如果参数有小数点的,只匹配第一个,后面的小数点无效。
    isNaN和Number.isNaN()

    · isNaN()函数在判断是否为NaN时,需要先进行数据类型转换,只有在无法转换为数字时才会返回“true”;
    · Number.isNaN()函数在判断是否为NaN时,只需要判断传入的值是否为NaN,并不会进行数据类型转换。

    String

    在将某个数据转换为字符串时,有一个简单的方法是直接使用加号(+)拼接一个空字符串(“”)。

    String()

    String()函数将任何类型的值,转为字符串类型

    1. Number类型,直接转为对应的string类型;
    2. Boolean类型,直接转为对应的字符串;
    3. 参数为null,结果为’null’;
    4. 参数是undefined,结果为’undefined’;
    5. 参数为字符串,返回字符串本身;
    6. 参数是object类型,先调用toString()获取返回值,再按照上面的步骤判断是否可以转为string类型如果不满足,就调用valueOf()函数获取返回值,在按照上面的步骤尽心判断。如果还是不满足,则抛出类型转换的异常
  • 相关阅读:
    “技能兴鲁”职业技能大赛-网络安全赛项-学生组初赛 WP
    git基础操作
    计算机组成和体系结构[备考]
    系统架构师笔记——嵌入式系统
    分布式ID生成服务
    C++17中头文件filesystem的使用
    X-CSV-Reader:一个使用Rust实现CSV命令行读取器
    OSPF.综合实验
    WebDAV之π-Disk派盘 + Xplore
    IDEA设置方法分割线
  • 原文地址:https://blog.csdn.net/xuelian3015/article/details/126786899