• JavaScript – 数据类型


    前言

    写着 TypeScript 学习笔记, 顺便也写点 JS 的呗.

    参考

    JS数据类型分类和判断

    阮一峰 – 数据类型

    JS 数据类型

    string

    number

    boolan

    undefined

    null

    object

    symbol (es6)

    bigint (es2020)

    其中 symbol 和 bigint 是后来加进去的

    另外还有一些很常见但其实它们不能说是类型. array, function, class, arrow function, NaN, Regex, Date

    typeof

    typeof 是用来判断类型的.

    console.log('string', typeof 'string');
    console.log('number', typeof 1);
    console.log('boolean', typeof true);
    console.log('undefined', typeof undefined);
    console.log('null', typeof null);
    console.log('object', typeof {});
    console.log('symbol', typeof Symbol('v'));
    console.log('bigint', typeof (100n));

    结果

    只有一个奇葩, null = object. 这个是历史原因.

    另一组

    console.log('array', typeof []);
    console.log('function', typeof function() {});
    console.log('arrow function', typeof (() => {}));
    console.log('date', typeof new Date());
    console.log('reg', typeof /\d/gi);
    console.log('NaN', typeof NaN);
    console.log('class', typeof class{});

    结果

    我们先讲好理解的, function, arraw function 都是 function, JS 的 class 只是语法糖其实也是 function, 所有它们三都是 function, 没问题.

    reg, date 都是 new 出来的对象, 没问题

    最后只剩下 array = object, NaN (not a number) = number 比较乱水了. (背起来呗)

    类型判断方式

    除了用 typeof 还有一些常用的技巧

    判断 null 

    null === null

    判断 NaN

    isNaN(NaN)

    判断 Array

    Array.isArray([])

    判断 Date, Regex

    (new Date()) instanceof Date

     黑魔法 typeof

    console.log('string', Object.prototype.toString.call('string').slice(8, -1).toLowerCase());

    效果

    类型转换

    参考: 阮一峰 – 数据类型转换

    所有类型都可以被强制转换成 boolean, string, number

    转 boolean

    Boolean(variable) 或者 !!variable 2 种写法都可以把 variable 强制转换成 boolean

    它的规则是除以下 5 个值转成 false, 其余都转成 true

    转 number

    Number(variable) 或者 +(variable) 2 种写法都可以把 variable 强制转换成 number

    '324' = 324
    '' = 0
    true = 1
    false = 0
    '324abc' = NaN
    undefined = NaN
    null = 0

    几个记忆点

    1. boolean true = 1, false = 0 (好记)

    2. empty string = 0 (可以记)

    3. full number string = number 和 partial number string = NaN (这个和 parseInt, parseFloat 有时会搞乱, parse 会自动过滤掉不是 number 的 string, 比如 parseInt('100px') = 100, Number('100px') = NaN) (可以记, 但要记得和 parse 不同)

    4. undefined = NaN, null = 0 (不好记...为什么这 2 个不同...乱水)

    当强转对象

    三个步骤

    valueOf > toString > Number(variable)

    概念是先把对象转成普通类型

    首先是调用 valueOf, 如果返回的依然是对象就再调用 toString, 如果依然是对象就报错

    只要 valueOf 或 toString 返回的不是对象, 那么就 Number(variable)

    转 string

    转换规则是

    123 = '123' (好记)

    true = 'true' (好记)

    undefined = 'undefned'  (好记)

    null = 'null'  (好记)

    当强转对象

    toString > valueOf  > String(variable)

    概念和 Number 一样, 只是顺序不同, 它先调用 toString 如果依然返回对象就调用 valueOf

    自动类型转换

    if (variable) 会把 variable 强行转成 boolean

    !!(variable) 会把 varable 强行转成 boolean

    +(variable) 会把 varable 强行转成 number

    string + variable 会把 varable 强行转成 string e.g. '123' + 3 = '1233'

    variable -*/ variable 会把 variable 变成 number e.g. '123' - '3' = 120

    variable == variable 双等号在对比时, 也会自动类型转换. 

    双等号 ==

    参考: JavaScript中双等号(==)的比较机制

    这个规则挺多的, 真实开发中已经被禁用了. 其实没有必要学.

    首先是

    1. null 和 undefned 是相等的

    2. null 和 undefined 不可以被转换类型

    3. NaN 和谁都不相等, 包括 NaN... 所以 NaN == NaN 是 false, NaN != NaN 是 true

    4. string == string, number == number, bool == bool, object == object 这些都不会有自动转换

    5. 类型不同的情况下, 比如 string == number, bool == string, object == number, 先把他们转成 Number(string) == Number(boolean). Number 是老大就对了.

    我日常会用的类型转换

    +(new Date()) 把日期转成 number, 表示 1970 到日期的 milliseconds

    true = 1 和 false = 0 (number 和 boolean 间的转换)

    if(object|array) 判断空 null or undefined (我只会判断 object 和 array, string, number 我不会这样做)

    'abc' + 123 把 number 拼接到 string 里.

    其它的我都不会去记也不会去用.

  • 相关阅读:
    基于学习的方法决定在哪些分支节点上运行heuristic算法
    深度学习结合树搜索求解集装箱预翻箱问题
    elementui el-tree 树节点颜色修改
    循环更新swingui并想动态看到效果,请使用invokeAndWait
    SwingWorker.publish 方法注释写的很清楚, 尤其是标红处
    GridBagConstraintsHelper 源码
    WeKeyWord微信关键字自动回复工具(一)初版
    WeFilesReciver微信文件接收助手(二)新增搜索
    模仿Cheat Engine内存搜索——(Sunday算法)
    WCarer微信客服工具(一)初版
  • 原文地址:https://www.cnblogs.com/keatkeat/p/16226790.html
Copyright © 2020-2023  润新知